From 6380b9f2f6e53748360a120ed9acb874a35885e0 Mon Sep 17 00:00:00 2001 From: Bryan Bugyi Date: Mon, 7 Jun 2021 10:01:57 -0400 Subject: [PATCH] Account for += assignment when deciding whether to split string (#2312) Fixes #2294 --- CHANGES.md | 1 + src/black/trans.py | 2 +- tests/data/long_strings__edge_case.py | 11 +++++++++++ tests/data/long_strings__regression.py | 20 ++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 16d9ebc..84f156d 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 bc6e93b..d56205d 100644 --- a/src/black/trans.py +++ b/src/black/trans.py @@ -867,7 +867,7 @@ class BaseStringSplitter(StringTransformer): # 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 07c2753..2bc0b6e 100644 --- a/tests/data/long_strings__edge_case.py +++ b/tests/data/long_strings__edge_case.py @@ -32,6 +32,9 @@ return f'{x}/b/c/d/d/d/dadfjsadjsaidoaisjdsfjaofjdfijaidfjaodfjaoifjodjafojdoaja 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 @@ assert ( " 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 cd8053f..d46f96a 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}} " -- 2.39.5