Don't explode a one-element collection ending with a comma.

This commit is contained in:
Łukasz Langa 2018-05-17 15:07:40 -07:00
parent 87b8df28c4
commit 180bc06ede
3 changed files with 27 additions and 8 deletions

View File

@ -178,9 +178,9 @@ example above).
If a data structure literal (tuple, list, set, dict) or a line of "from" If a data structure literal (tuple, list, set, dict) or a line of "from"
imports cannot fit in the allotted length, it's always split into one imports cannot fit in the allotted length, it's always split into one
per line. This minimizes diffs as well as enables readers of code to element per line. This minimizes diffs as well as enables readers of
find which commit introduced a particular entry. This also makes code to find which commit introduced a particular entry. This also
*Black* compatible with [isort](https://pypi.org/p/isort/). Use makes *Black* compatible with [isort](https://pypi.org/p/isort/). Use
`multi_line_output=3`, `include_trailing_comma=True`, `multi_line_output=3`, `include_trailing_comma=True`,
`force_grid_wrap=0`, and `line_length=88` in your isort config. `force_grid_wrap=0`, and `line_length=88` in your isort config.

View File

@ -2532,13 +2532,21 @@ def ensure_visible(leaf: Leaf) -> None:
def should_explode(line: Line, opening_bracket: Leaf) -> bool: def should_explode(line: Line, opening_bracket: Leaf) -> bool:
"""Should `line` immediately be split with `delimiter_split()` after RHS?""" """Should `line` immediately be split with `delimiter_split()` after RHS?"""
return bool( if not (
opening_bracket.parent opening_bracket.parent
and opening_bracket.parent.type in {syms.atom, syms.import_from} and opening_bracket.parent.type in {syms.atom, syms.import_from}
and opening_bracket.value in "[{(" and opening_bracket.value in "[{("
and line.bracket_tracker.delimiters ):
and line.bracket_tracker.max_delimiter_priority() == COMMA_PRIORITY return False
)
try:
last_leaf = line.leaves[-1]
exclude = {id(last_leaf)} if last_leaf.type == token.COMMA else set()
max_priority = line.bracket_tracker.max_delimiter_priority(exclude=exclude)
except (IndexError, ValueError):
return False
return max_priority == COMMA_PRIORITY
def is_python36(node: Node) -> bool: def is_python36(node: Node) -> bool:

View File

@ -147,7 +147,18 @@ def tricky_asserts(self) -> None:
"in one line because it's too long" "in one line because it's too long"
) )
# This is weird but true. dis_c_instance_method = """\
%3d 0 LOAD_FAST 1 (x)
2 LOAD_CONST 1 (1)
4 COMPARE_OP 2 (==)
6 LOAD_FAST 0 (self)
8 STORE_ATTR 0 (x)
10 LOAD_CONST 0 (None)
12 RETURN_VALUE
""" % (
_C.__init__.__code__.co_firstlineno + 1,
)
assert ( assert (
expectedexpectedexpectedexpectedexpectedexpectedexpectedexpectedexpect expectedexpectedexpectedexpectedexpectedexpectedexpectedexpectedexpect
== { == {