Ignore empty bracket pairs while splitting

Fixes #35
This commit is contained in:
Łukasz Langa 2018-03-16 17:09:23 -07:00
parent 2854794249
commit 6ba615092e
2 changed files with 26 additions and 21 deletions

View File

@ -1178,7 +1178,7 @@ def left_hand_split(line: Line, py36: bool = False) -> Iterator[Line]:
leaf.type in CLOSING_BRACKETS and leaf.type in CLOSING_BRACKETS and
leaf.opening_bracket is matching_bracket leaf.opening_bracket is matching_bracket
): ):
current_leaves = tail_leaves current_leaves = tail_leaves if body_leaves else head_leaves
current_leaves.append(leaf) current_leaves.append(leaf)
if current_leaves is head_leaves: if current_leaves is head_leaves:
if leaf.type in OPENING_BRACKETS: 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)) comment_after = line.comments.get(id(leaf))
if comment_after: if comment_after:
result.append(comment_after, preformatted=True) result.append(comment_after, preformatted=True)
# Check if the split succeeded. split_succeeded_or_raise(head, body, tail)
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"
)
for result in (head, body, tail): for result in (head, body, tail):
if result: if result:
yield result yield result
@ -1226,7 +1215,7 @@ def right_hand_split(line: Line, py36: bool = False) -> Iterator[Line]:
for leaf in reversed(line.leaves): for leaf in reversed(line.leaves):
if current_leaves is body_leaves: if current_leaves is body_leaves:
if leaf is opening_bracket: if leaf is opening_bracket:
current_leaves = head_leaves current_leaves = head_leaves if body_leaves else tail_leaves
current_leaves.append(leaf) current_leaves.append(leaf)
if current_leaves is tail_leaves: if current_leaves is tail_leaves:
if leaf.type in CLOSING_BRACKETS: 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)) comment_after = line.comments.get(id(leaf))
if comment_after: if comment_after:
result.append(comment_after, preformatted=True) result.append(comment_after, preformatted=True)
# Check if the split succeeded. split_succeeded_or_raise(head, body, tail)
tail_len = len(str(tail).strip('\n')) 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 not body:
if tail_len == 0: if tail_len == 0:
raise CannotSplit("Splitting brackets produced the same line") 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" 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]: def delimiter_split(line: Line, py36: bool = False) -> Iterator[Line]:
"""Split according to delimiters of the highest priority. """Split according to delimiters of the highest priority.

View File

@ -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 assert task._cancel_stack[:len(old_stack)] == old_stack
def spaces2(result= _core.Value(None)): 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(): def long_lines():
if True: if True:
typedargslist.extend( 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(): def long_lines():
if True: if True:
typedargslist.extend( typedargslist.extend(