diff --git a/CHANGES.md b/CHANGES.md index 16d9ebc3fe5..84f156d903d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ ### _Black_ +- Account for += assignment when deciding whether to split string (#2312) - Correct max string length calculation when there are string operators (#2292) - Fixed option usage when using the `--code` flag (#2259) - Do not call `uvloop.install()` when _Black_ is used as a library (#2303) diff --git a/src/black/trans.py b/src/black/trans.py index bc6e93b01b4..d56205d4598 100644 --- a/src/black/trans.py +++ b/src/black/trans.py @@ -867,7 +867,7 @@ def _get_max_string_length(self, line: Line, string_idx: int) -> int: # WMA4 a space, a comma, and a closing bracket [e.g. `), STRING`]. offset += 3 - if P.type in [token.COLON, token.EQUAL, token.NAME]: + if P.type in [token.COLON, token.EQUAL, token.PLUSEQUAL, token.NAME]: # This conditional branch is meant to handle dictionary keys, # variable assignments, 'return STRING' statement lines, and # 'else STRING' ternary expression lines. diff --git a/tests/data/long_strings__edge_case.py b/tests/data/long_strings__edge_case.py index 07c27537191..2bc0b6ed328 100644 --- a/tests/data/long_strings__edge_case.py +++ b/tests/data/long_strings__edge_case.py @@ -32,6 +32,9 @@ assert str(result) == "This long string should be split at some point right close to or around hereeeeeee" assert str(result) < "This long string should be split at some point right close to or around hereeeeee" assert "A format string: %s" % "This long string should be split at some point right close to or around hereeeeeee" != result +msg += "This long string should be wrapped in parens at some point right around hereeeee" +msg += "This long string should be split at some point right close to or around hereeeeeeee" +msg += "This long string should not be split at any point ever since it is just righttt" # output @@ -127,3 +130,11 @@ " hereeeeeee" != result ) +msg += ( + "This long string should be wrapped in parens at some point right around hereeeee" +) +msg += ( + "This long string should be split at some point right close to or around" + " hereeeeeeee" +) +msg += "This long string should not be split at any point ever since it is just righttt" diff --git a/tests/data/long_strings__regression.py b/tests/data/long_strings__regression.py index cd8053f9eb5..d46f96a82d0 100644 --- a/tests/data/long_strings__regression.py +++ b/tests/data/long_strings__regression.py @@ -407,6 +407,16 @@ def _legacy_listen_examples(): ) +class X: + async def foo(self): + msg = "" + for candidate in CANDIDATES: + msg += ( + "**{candidate.object_type} {candidate.rev}**" + " - {candidate.description}\n" + ) + + temp_msg = ( f"{f'{humanize_number(pos)}.': <{pound_len+2}} " f"{balance: <{bal_len + 5}} " @@ -948,6 +958,16 @@ def _legacy_listen_examples(): ) +class X: + async def foo(self): + msg = "" + for candidate in CANDIDATES: + msg += ( + "**{candidate.object_type} {candidate.rev}**" + " - {candidate.description}\n" + ) + + temp_msg = ( f"{f'{humanize_number(pos)}.': <{pound_len+2}} " f"{balance: <{bal_len + 5}} "