From 13bd0925eb347926399a5bcb8b70853549f3da07 Mon Sep 17 00:00:00 2001 From: cobalt <61329810+RedGuy12@users.noreply.github.com> Date: Fri, 22 Mar 2024 21:11:01 -0500 Subject: [PATCH] fix: Stop moving multiline strings to a new line unless inside brackets (#4289) Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> --- CHANGES.md | 1 + src/black/lines.py | 6 ++++-- tests/data/cases/preview_multiline_strings.py | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 12a2d5fa064..e6098b7ff59 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ - `if` guards in `case` blocks are now wrapped in parentheses when the line is too long. (#4269) +- Stop moving multiline strings to a new line unless inside brackets (#4289) ### Configuration diff --git a/src/black/lines.py b/src/black/lines.py index 72634fd36d2..6b65372fb3f 100644 --- a/src/black/lines.py +++ b/src/black/lines.py @@ -858,11 +858,13 @@ def is_line_short_enough( # noqa: C901 return False if leaf.bracket_depth <= max_level_to_update and leaf.type == token.COMMA: - # Ignore non-nested trailing comma + # Inside brackets, ignore trailing comma # directly after MLS/MLS-containing expression ignore_ctxs: List[Optional[LN]] = [None] ignore_ctxs += multiline_string_contexts - if not (leaf.prev_sibling in ignore_ctxs and i == len(line.leaves) - 1): + if (line.inside_brackets or leaf.bracket_depth > 0) and ( + i != len(line.leaves) - 1 or leaf.prev_sibling not in ignore_ctxs + ): commas[leaf.bracket_depth] += 1 if max_level_to_update != math.inf: max_level_to_update = min(max_level_to_update, leaf.bracket_depth) diff --git a/tests/data/cases/preview_multiline_strings.py b/tests/data/cases/preview_multiline_strings.py index 9288f6991bd..1daf6f4d784 100644 --- a/tests/data/cases/preview_multiline_strings.py +++ b/tests/data/cases/preview_multiline_strings.py @@ -175,6 +175,13 @@ def dastardly_default_value( "c" ) +assert some_var == expected_result, """ +test +""" +assert some_var == expected_result, f""" +expected: {expected_result} +actual: {some_var}""" + # output """cow say""", @@ -385,3 +392,10 @@ def dastardly_default_value( ) this_will_also_become_one_line = "abc" # comment + +assert some_var == expected_result, """ +test +""" +assert some_var == expected_result, f""" +expected: {expected_result} +actual: {some_var}"""