Consolidate empty line handling in EmptyLineTracker
Previously, extra newlines left on imports were handled sort of by accident. Now it's all handled uniformly in one place.
This commit is contained in:
parent
b9c06a0d23
commit
6c3ce53b60
22
black.py
22
black.py
@ -210,6 +210,11 @@ def format_str(src_contents: str, line_length: int) -> FileContent:
|
|||||||
dst_contents += str(line)
|
dst_contents += str(line)
|
||||||
else:
|
else:
|
||||||
comments.append(current_line)
|
comments.append(current_line)
|
||||||
|
if comments:
|
||||||
|
if elt.previous_defs:
|
||||||
|
# Separate postscriptum comments from the last module-level def.
|
||||||
|
dst_contents += str(empty_line)
|
||||||
|
dst_contents += str(empty_line)
|
||||||
for comment in comments:
|
for comment in comments:
|
||||||
dst_contents += str(comment)
|
dst_contents += str(comment)
|
||||||
return dst_contents
|
return dst_contents
|
||||||
@ -615,7 +620,9 @@ class EmptyLineTracker:
|
|||||||
"""Provides a stateful method that returns the number of potential extra
|
"""Provides a stateful method that returns the number of potential extra
|
||||||
empty lines needed before and after the currently processed line.
|
empty lines needed before and after the currently processed line.
|
||||||
|
|
||||||
Note: this tracker works on lines that haven't been split yet.
|
Note: this tracker works on lines that haven't been split yet. It assumes
|
||||||
|
the prefix of the first leaf consists of optional newlines. Those newlines
|
||||||
|
are consumed by `maybe_empty_lines()` and included in the computation.
|
||||||
"""
|
"""
|
||||||
previous_line: Optional[Line] = None
|
previous_line: Optional[Line] = None
|
||||||
previous_after: int = 0
|
previous_after: int = 0
|
||||||
@ -633,16 +640,23 @@ def maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
|
|||||||
return 0, 0
|
return 0, 0
|
||||||
|
|
||||||
before, after = self._maybe_empty_lines(current_line)
|
before, after = self._maybe_empty_lines(current_line)
|
||||||
|
before -= self.previous_after
|
||||||
self.previous_after = after
|
self.previous_after = after
|
||||||
self.previous_line = current_line
|
self.previous_line = current_line
|
||||||
return before, after
|
return before, after
|
||||||
|
|
||||||
def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
|
def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
|
||||||
|
if current_line.leaves:
|
||||||
|
# Consume the first leaf's extra newlines.
|
||||||
|
first_leaf = current_line.leaves[0]
|
||||||
|
before = int('\n' in first_leaf.prefix)
|
||||||
|
first_leaf.prefix = ''
|
||||||
|
else:
|
||||||
before = 0
|
before = 0
|
||||||
depth = current_line.depth
|
depth = current_line.depth
|
||||||
while self.previous_defs and self.previous_defs[-1] >= depth:
|
while self.previous_defs and self.previous_defs[-1] >= depth:
|
||||||
self.previous_defs.pop()
|
self.previous_defs.pop()
|
||||||
before = (1 if depth else 2) - self.previous_after
|
before = 1 if depth else 2
|
||||||
is_decorator = current_line.is_decorator
|
is_decorator = current_line.is_decorator
|
||||||
if is_decorator or current_line.is_def or current_line.is_class:
|
if is_decorator or current_line.is_def or current_line.is_class:
|
||||||
if not is_decorator:
|
if not is_decorator:
|
||||||
@ -658,7 +672,6 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
|
|||||||
newlines = 2
|
newlines = 2
|
||||||
if current_line.depth:
|
if current_line.depth:
|
||||||
newlines -= 1
|
newlines -= 1
|
||||||
newlines -= self.previous_after
|
|
||||||
return newlines, 0
|
return newlines, 0
|
||||||
|
|
||||||
if current_line.is_flow_control:
|
if current_line.is_flow_control:
|
||||||
@ -1335,9 +1348,6 @@ def normalize_prefix(leaf: Leaf) -> None:
|
|||||||
if is_import(leaf):
|
if is_import(leaf):
|
||||||
spl = leaf.prefix.split('#', 1)
|
spl = leaf.prefix.split('#', 1)
|
||||||
nl_count = spl[0].count('\n')
|
nl_count = spl[0].count('\n')
|
||||||
if len(spl) > 1:
|
|
||||||
# Skip one newline since it was for a standalone comment.
|
|
||||||
nl_count -= 1
|
|
||||||
leaf.prefix = '\n' * nl_count
|
leaf.prefix = '\n' * nl_count
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
|
|
||||||
"""The asyncio package, tracking PEP 3156."""
|
"""The asyncio package, tracking PEP 3156."""
|
||||||
|
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user