From 658eb7161d8d0c23bafe4881e70518c33a74a4c1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Langa?= Date: Tue, 22 May 2018 00:38:31 -0700 Subject: [PATCH 1/1] Fix unstable formatting on trailers omitted from line splitting with comments Fixes #238 --- README.md | 6 +++++- black.py | 6 ++---- tests/expression.diff | 22 ++++++++++++++++++++-- tests/expression.py | 20 ++++++++++++++++++++ 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 90731d2..af1f847 100644 --- a/README.md +++ b/README.md @@ -661,9 +661,13 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md). * fixed optional parentheses being removed within `# fmt: off` sections (#224) -* fixed invalid code produced when stars in very long imports were incorrectly +* fixed invalid code produced when stars in very long imports were incorrectly wrapped in optional parentheses (#234) +* fixed unstable formatting when inline comments were moved around in + a trailer that was omitted from line splitting on a large expression + (#238) + ### 18.5b0 * call chains are now formatted according to the diff --git a/black.py b/black.py index afc37d9..e1a71e8 100644 --- a/black.py +++ b/black.py @@ -2599,7 +2599,8 @@ def generate_trailers_to_omit(line: Line, line_length: int) -> Iterator[Set[Leaf if length > line_length: break - if leaf.type == STANDALONE_COMMENT: + has_inline_comment = leaf_length > len(leaf.value) + len(leaf.prefix) + if leaf.type == STANDALONE_COMMENT or has_inline_comment: break optional_brackets.discard(id(leaf)) @@ -2940,9 +2941,6 @@ def enumerate_with_length( comment: Optional[Leaf] for comment in line.comments_after(leaf, index): - if "\n" in comment.prefix: - return # Oops, standalone comment! - length += len(comment.value) yield index, leaf, length diff --git a/tests/expression.diff b/tests/expression.diff index d7a0313..4a4bb14 100644 --- a/tests/expression.diff +++ b/tests/expression.diff @@ -116,7 +116,7 @@ call(**self.screen_kwargs) call(b, **self.screen_kwargs) lukasz.langa.pl -@@ -93,11 +114,11 @@ +@@ -93,23 +114,25 @@ 1.0 .real ....__class__ list[str] @@ -127,9 +127,27 @@ very_long_variable_name_filters: t.List[ t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]], ] + xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) + ) +-xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore +- sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) +-) + xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[ + ..., List[SomeClass] +-] = classmethod(sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)) # type: ignore ++] = classmethod( # type: ignore ++ sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) ++) ++xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( ++ sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) ++) # type: ignore slice[0] slice[0:1] -@@ -124,107 +145,159 @@ + slice[0:1:2] + slice[:] + slice[:-1] +@@ -133,107 +156,159 @@ numpy[-(c + 1) :, d] numpy[:, l[-2]] numpy[:, ::-1] diff --git a/tests/expression.py b/tests/expression.py index 9221c8e..f35a6fd 100644 --- a/tests/expression.py +++ b/tests/expression.py @@ -99,6 +99,15 @@ tuple[str, int, float, dict[str, int],] very_long_variable_name_filters: t.List[ t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]], ] +xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) +) +xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) +) +xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[ + ..., List[SomeClass] +] = classmethod(sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)) # type: ignore slice[0] slice[0:1] slice[0:1:2] @@ -354,6 +363,17 @@ tuple[str, int, float, dict[str, int]] very_long_variable_name_filters: t.List[ t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]], ] +xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) +) +xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[ + ..., List[SomeClass] +] = classmethod( # type: ignore + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) +) +xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__) +) # type: ignore slice[0] slice[0:1] slice[0:1:2] -- 2.39.5