From 8b46b71038678b372041c89d0d23c57d5d0ae85c Mon Sep 17 00:00:00 2001 From: Micha Reiser Date: Thu, 24 Aug 2023 14:31:02 +0200 Subject: [PATCH] Fix parenthesizing of implicit strings (#6852) --- .../test/fixtures/ruff/expression/string.py | 6 ++++ .../src/expression/expr_constant.rs | 6 ++-- .../format@expression__string.py.snap | 36 +++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/string.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/string.py index 78e215f91a..1e45d1abf1 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/string.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/string.py @@ -124,3 +124,9 @@ test_particular = [ 'c' ) } + + +# Regression test for https://github.com/astral-sh/ruff/issues/5893 +x = ("""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" """bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""") +x = (f"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" f"""bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""") +x = (b"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" b"""bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""") diff --git a/crates/ruff_python_formatter/src/expression/expr_constant.rs b/crates/ruff_python_formatter/src/expression/expr_constant.rs index ed37dea4b3..92e3461b75 100644 --- a/crates/ruff_python_formatter/src/expression/expr_constant.rs +++ b/crates/ruff_python_formatter/src/expression/expr_constant.rs @@ -79,14 +79,14 @@ impl NeedsParentheses for ExprConstant { _parent: AnyNodeRef, context: &PyFormatContext, ) -> OptionalParentheses { - if is_multiline_string(self, context.source()) + if self.value.is_implicit_concatenated() { + OptionalParentheses::Multiline + } else if is_multiline_string(self, context.source()) || self.value.is_none() || self.value.is_bool() || self.value.is_ellipsis() { OptionalParentheses::Never - } else if self.value.is_implicit_concatenated() { - OptionalParentheses::Multiline } else if should_use_best_fit(self, context) { OptionalParentheses::BestFit } else { diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__string.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__string.py.snap index a3ed8ac6ec..099fbb24a1 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__string.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__string.py.snap @@ -130,6 +130,12 @@ test_particular = [ 'c' ) } + + +# Regression test for https://github.com/astral-sh/ruff/issues/5893 +x = ("""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" """bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""") +x = (f"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" f"""bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""") +x = (b"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" b"""bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""") ``` ## Outputs @@ -284,6 +290,21 @@ test_particular = [ # Parenthesized string continuation with messed up indentation {"key": ([], "a" "b" "c")} + + +# Regression test for https://github.com/astral-sh/ruff/issues/5893 +x = ( + """aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" + """bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""" +) +x = ( + f"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" + f"""bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""" +) +x = ( + b"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa""" + b"""bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb""" +) ``` @@ -438,6 +459,21 @@ test_particular = [ # Parenthesized string continuation with messed up indentation {'key': ([], 'a' 'b' 'c')} + + +# Regression test for https://github.com/astral-sh/ruff/issues/5893 +x = ( + '''aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa''' + '''bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb''' +) +x = ( + f'''aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa''' + f'''bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb''' +) +x = ( + b'''aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa''' + b'''bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb''' +) ```