From d960d5d238bc8c73010a3ca5a9f316678ad91e6f Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Sun, 11 Apr 2021 23:41:22 +0200 Subject: [PATCH] Remove NBSP at the beginning of comments (#2092) Closes #2091 --- CHANGES.md | 2 ++ src/black/__init__.py | 7 ++++ tests/data/comments7.py | 7 +++- tests/data/comments_non_breaking_space.py | 44 +++++++++++++++++++++++ tests/test_format.py | 1 + 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/data/comments_non_breaking_space.py diff --git a/CHANGES.md b/CHANGES.md index 6340f60..12e8d45 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,8 @@ #### _Black_ +- `Black` now cleans up leading non-breaking spaces in comments (#2092) + - `Black` now respects `--skip-string-normalization` when normalizing multiline docstring quotes (#1637) diff --git a/src/black/__init__.py b/src/black/__init__.py index 2bb42a4..3671647 100644 --- a/src/black/__init__.py +++ b/src/black/__init__.py @@ -2709,6 +2709,13 @@ def make_comment(content: str) -> str: if content[0] == "#": content = content[1:] + NON_BREAKING_SPACE = " " + if ( + content + and content[0] == NON_BREAKING_SPACE + and not content.lstrip().startswith("type:") + ): + content = " " + content[1:] # Replace NBSP by a simple space if content and content[0] not in " !:#'%": content = " " + content return "#" + content diff --git a/tests/data/comments7.py b/tests/data/comments7.py index 0e2bd35..ca9d7c6 100644 --- a/tests/data/comments7.py +++ b/tests/data/comments7.py @@ -129,6 +129,8 @@ class C: ): ... +square = Square(4) # type: Optional[Square] + # output from .config import ( @@ -263,4 +265,7 @@ class C: def test_fails_invalid_post_data( self, pyramid_config, db_request, post_data, message ): - ... \ No newline at end of file + ... + + +square = Square(4) # type: Optional[Square] diff --git a/tests/data/comments_non_breaking_space.py b/tests/data/comments_non_breaking_space.py new file mode 100644 index 0000000..e17c3f4 --- /dev/null +++ b/tests/data/comments_non_breaking_space.py @@ -0,0 +1,44 @@ +from .config import ( ConfigTypeAttributes, Int, Path, # String, + # DEFAULT_TYPE_ATTRIBUTES, +) + +result = 1 # A simple comment +result = ( 1, ) # Another one + +result = 1 # type: ignore +result = 1# This comment is talking about type: ignore +square = Square(4) # type: Optional[Square] + +def function(a:int=42): + """ This docstring is already formatted + a + b + """ + #  There's a NBSP + 3 spaces before + # And 4 spaces on the next line + pass + +# output +from .config import ( + ConfigTypeAttributes, + Int, + Path, # String, + # DEFAULT_TYPE_ATTRIBUTES, +) + +result = 1 # A simple comment +result = (1,) # Another one + +result = 1 #  type: ignore +result = 1 # This comment is talking about type: ignore +square = Square(4) #  type: Optional[Square] + + +def function(a: int = 42): + """This docstring is already formatted + a + b + """ + # There's a NBSP + 3 spaces before + # And 4 spaces on the next line + pass diff --git a/tests/test_format.py b/tests/test_format.py index e0cb0b7..eabec8c 100644 --- a/tests/test_format.py +++ b/tests/test_format.py @@ -27,6 +27,7 @@ SIMPLE_CASES = [ "comments5", "comments6", "comments7", + "comments_non_breaking_space", "comment_after_escaped_newline", "composition", "composition_no_trailing_comma", -- 2.39.2