From 6ba615092e0b323072058f0a90bb7ab301957b7f Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Langa?= Date: Fri, 16 Mar 2018 17:09:23 -0700 Subject: [PATCH] Ignore empty bracket pairs while splitting Fixes #35 --- black.py | 31 +++++++++++-------------------- tests/function.py | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/black.py b/black.py index 48ba0a2..b343da7 100644 --- a/black.py +++ b/black.py @@ -1178,7 +1178,7 @@ def left_hand_split(line: Line, py36: bool = False) -> Iterator[Line]: leaf.type in CLOSING_BRACKETS and leaf.opening_bracket is matching_bracket ): - current_leaves = tail_leaves + current_leaves = tail_leaves if body_leaves else head_leaves current_leaves.append(leaf) if current_leaves is head_leaves: if leaf.type in OPENING_BRACKETS: @@ -1196,18 +1196,7 @@ def left_hand_split(line: Line, py36: bool = False) -> Iterator[Line]: comment_after = line.comments.get(id(leaf)) if comment_after: result.append(comment_after, preformatted=True) - # Check if the split succeeded. - tail_len = len(str(tail)) - if not body: - if tail_len == 0: - raise CannotSplit("Splitting brackets produced the same line") - - elif tail_len < 3: - raise CannotSplit( - f"Splitting brackets on an empty body to save " - f"{tail_len} characters is not worth it" - ) - + split_succeeded_or_raise(head, body, tail) for result in (head, body, tail): if result: yield result @@ -1226,7 +1215,7 @@ def right_hand_split(line: Line, py36: bool = False) -> Iterator[Line]: for leaf in reversed(line.leaves): if current_leaves is body_leaves: if leaf is opening_bracket: - current_leaves = head_leaves + current_leaves = head_leaves if body_leaves else tail_leaves current_leaves.append(leaf) if current_leaves is tail_leaves: if leaf.type in CLOSING_BRACKETS: @@ -1247,8 +1236,14 @@ def right_hand_split(line: Line, py36: bool = False) -> Iterator[Line]: comment_after = line.comments.get(id(leaf)) if comment_after: result.append(comment_after, preformatted=True) - # Check if the split succeeded. - tail_len = len(str(tail).strip('\n')) + split_succeeded_or_raise(head, body, tail) + for result in (head, body, tail): + if result: + yield result + + +def split_succeeded_or_raise(head: Line, body: Line, tail: Line) -> None: + tail_len = len(str(tail).strip()) if not body: if tail_len == 0: raise CannotSplit("Splitting brackets produced the same line") @@ -1259,10 +1254,6 @@ def right_hand_split(line: Line, py36: bool = False) -> Iterator[Line]: f"{tail_len} characters is not worth it" ) - for result in (head, body, tail): - if result: - yield result - def delimiter_split(line: Line, py36: bool = False) -> Iterator[Line]: """Split according to delimiters of the highest priority. diff --git a/tests/function.py b/tests/function.py index abe2200..29de408 100644 --- a/tests/function.py +++ b/tests/function.py @@ -32,7 +32,13 @@ def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r'' assert task._cancel_stack[:len(old_stack)] == old_stack def spaces2(result= _core.Value(None)): ... - +def example(session): + result = session.query(models.Customer.id).filter( + models.Customer.account_id == account_id, + models.Customer.email == email_address, + ).order_by( + models.Customer.id.asc(), + ).all() def long_lines(): if True: typedargslist.extend( @@ -119,6 +125,14 @@ def spaces2(result=_core.Value(None)): ... +def example(session): + result = session.query(models.Customer.id).filter( + models.Customer.account_id == account_id, models.Customer.email == email_address + ).order_by( + models.Customer.id.asc(), + ).all() + + def long_lines(): if True: typedargslist.extend( -- 2.39.5