From b6ea8c26856f805a3b7cff998709a117636df7ab Mon Sep 17 00:00:00 2001 From: hauntsaninja Date: Thu, 28 Dec 2023 19:20:32 -0600 Subject: [PATCH] Fix comment handling when parenthesising conditional expressions Fixes #3555 --- src/black/linegen.py | 4 +++ tests/data/cases/conditional_expression.py | 42 ++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/black/linegen.py b/src/black/linegen.py index 0972cf432e1..427449e77b4 100644 --- a/src/black/linegen.py +++ b/src/black/linegen.py @@ -170,8 +170,12 @@ def visit_test(self, node: Node) -> Iterator[Line]: ) if not already_parenthesized: + # Similar to logic in wrap_in_parentheses lpar = Leaf(token.LPAR, "") rpar = Leaf(token.RPAR, "") + prefix = node.prefix + node.prefix = "" + lpar.prefix = prefix node.insert_child(0, lpar) node.append_child(rpar) diff --git a/tests/data/cases/conditional_expression.py b/tests/data/cases/conditional_expression.py index c30cd76c791..fdbd7ced5c8 100644 --- a/tests/data/cases/conditional_expression.py +++ b/tests/data/cases/conditional_expression.py @@ -67,6 +67,28 @@ def something(): else ValuesListIterable ) + +def foo(wait: bool = True): + # This full comment and the next one after it will get wrapped into + # the next one-liner unexpectedly + + # even if this comment is separated + time.sleep(1) if wait else None + time.sleep(1) if wait else None + + # With newline above + time.sleep(1) if wait else None + # Without newline above + time.sleep(1) if wait else None + + +a = "".join( + ( + "", # comment + "" if True else "", + ) +) + # output long_kwargs_single_line = my_function( @@ -159,3 +181,23 @@ def something(): if named else FlatValuesListIterable if flat else ValuesListIterable ) + + +def foo(wait: bool = True): + # This full comment and the next one after it will get wrapped into + # the next one-liner unexpectedly + + # even if this comment is separated + time.sleep(1) if wait else None + time.sleep(1) if wait else None + + # With newline above + time.sleep(1) if wait else None + # Without newline above + time.sleep(1) if wait else None + + +a = "".join(( + "", # comment + "" if True else "", +))