Accept empty stdin (close #2337) (#2346)

Commit history before merge:

* Accept empty stdin (close #2337)
* Update tests/test_black.py
* Add changelog
* Assert Black reformats an empty string to an empty string (#2337) (#2346)
* fix
This commit is contained in:
simaki 2021-06-24 04:11:23 +09:00 committed by GitHub
parent be16cfa035
commit 017aafea99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 1 deletions

View File

@ -6,6 +6,7 @@
- Add primer support and test for code piped into black via STDIN (#2315) - Add primer support and test for code piped into black via STDIN (#2315)
- Fix internal error when `FORCE_OPTIONAL_PARENTHESES` feature is enabled (#2332) - Fix internal error when `FORCE_OPTIONAL_PARENTHESES` feature is enabled (#2332)
- Accept empty stdin (#2346)
## 21.6b0 ## 21.6b0

View File

@ -803,7 +803,8 @@ def format_stdin_to_stdout(
) )
if write_back == WriteBack.YES: if write_back == WriteBack.YES:
# Make sure there's a newline after the content # Make sure there's a newline after the content
dst += "" if dst[-1] == "\n" else "\n" if dst and dst[-1] != "\n":
dst += "\n"
f.write(dst) f.write(dst)
elif write_back in (WriteBack.DIFF, WriteBack.COLOR_DIFF): elif write_back in (WriteBack.DIFF, WriteBack.COLOR_DIFF):
now = datetime.utcnow() now = datetime.utcnow()

View File

@ -6,6 +6,7 @@
from contextlib import contextmanager from contextlib import contextmanager
from dataclasses import replace from dataclasses import replace
import inspect import inspect
import io
from io import BytesIO from io import BytesIO
import os import os
from pathlib import Path from pathlib import Path
@ -1682,6 +1683,20 @@ def test_reformat_one_with_stdin_and_existing_path(self) -> None:
# __BLACK_STDIN_FILENAME__ should have been stripped # __BLACK_STDIN_FILENAME__ should have been stripped
report.done.assert_called_with(expected, black.Changed.YES) report.done.assert_called_with(expected, black.Changed.YES)
def test_reformat_one_with_stdin_empty(self) -> None:
output = io.StringIO()
with patch("io.TextIOWrapper", lambda *args, **kwargs: output):
try:
black.format_stdin_to_stdout(
fast=True,
content="",
write_back=black.WriteBack.YES,
mode=DEFAULT_MODE,
)
except io.UnsupportedOperation:
pass # StringIO does not support detach
assert output.getvalue() == ""
def test_gitignore_exclude(self) -> None: def test_gitignore_exclude(self) -> None:
path = THIS_DIR / "data" / "include_exclude_tests" path = THIS_DIR / "data" / "include_exclude_tests"
include = re.compile(r"\.pyi?$") include = re.compile(r"\.pyi?$")