From 180bc06ede96959fd52b43467ce3836655108719 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Langa?= Date: Thu, 17 May 2018 15:07:40 -0700 Subject: [PATCH] Don't explode a one-element collection ending with a comma. --- README.md | 6 +++--- black.py | 16 ++++++++++++---- tests/composition.py | 13 ++++++++++++- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index f587744..c56f454 100644 --- a/README.md +++ b/README.md @@ -178,9 +178,9 @@ example above). 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 -per line. This minimizes diffs as well as enables readers of code to -find which commit introduced a particular entry. This also makes -*Black* compatible with [isort](https://pypi.org/p/isort/). Use +element per line. This minimizes diffs as well as enables readers of +code to find which commit introduced a particular entry. This also +makes *Black* compatible with [isort](https://pypi.org/p/isort/). Use `multi_line_output=3`, `include_trailing_comma=True`, `force_grid_wrap=0`, and `line_length=88` in your isort config. diff --git a/black.py b/black.py index 228deb7..6dda93b 100644 --- a/black.py +++ b/black.py @@ -2532,13 +2532,21 @@ def ensure_visible(leaf: Leaf) -> None: def should_explode(line: Line, opening_bracket: Leaf) -> bool: """Should `line` immediately be split with `delimiter_split()` after RHS?""" - return bool( + if not ( opening_bracket.parent and opening_bracket.parent.type in {syms.atom, syms.import_from} 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: diff --git a/tests/composition.py b/tests/composition.py index 542cff6..71eee6a 100644 --- a/tests/composition.py +++ b/tests/composition.py @@ -147,7 +147,18 @@ class C: "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 ( expectedexpectedexpectedexpectedexpectedexpectedexpectedexpectedexpect == { -- 2.39.2