Clarity: isolate and extract each responsibility from an overloaded variable

This commit is contained in:
James Addison 2021-02-04 17:30:05 +00:00 committed by Łukasz Langa
parent afc8c326bf
commit caa3fcc2de

View File

@ -1481,6 +1481,7 @@ class Line:
bracket_tracker: BracketTracker = field(default_factory=BracketTracker)
inside_brackets: bool = False
should_explode: bool = False
magic_trailing_comma: Optional[Leaf] = None
def append(self, leaf: Leaf, preformatted: bool = False) -> None:
"""Add a new `leaf` to the end of the line.
@ -1508,7 +1509,7 @@ def append(self, leaf: Leaf, preformatted: bool = False) -> None:
self.bracket_tracker.mark(leaf)
if self.mode.magic_trailing_comma:
if self.has_magic_trailing_comma(leaf):
self.should_explode = True
self.magic_trailing_comma = leaf
elif self.has_magic_trailing_comma(leaf, ensure_removable=True):
self.remove_trailing_comma()
if not self.append_comment(leaf):
@ -1792,6 +1793,7 @@ def clone(self) -> "Line":
depth=self.depth,
inside_brackets=self.inside_brackets,
should_explode=self.should_explode,
magic_trailing_comma=self.magic_trailing_comma,
)
def __str__(self) -> str:
@ -2710,7 +2712,7 @@ def init_st(ST: Type[StringTransformer]) -> StringTransformer:
transformers: List[Transformer]
if (
not line.contains_uncollapsable_type_comments()
and not line.should_explode
and not (line.should_explode or line.magic_trailing_comma)
and (
is_line_short_enough(line, line_length=mode.line_length, line_str=line_str)
or line.contains_unsplittable_type_ignore()
@ -4385,6 +4387,7 @@ def do_transform(self, line: Line, string_idx: int) -> Iterator[TResult[Line]]:
depth=line.depth + 1,
inside_brackets=True,
should_explode=line.should_explode,
magic_trailing_comma=line.magic_trailing_comma,
)
string_leaf = Leaf(token.STRING, string_value)
insert_str_child(string_leaf)
@ -5946,7 +5949,7 @@ def generate_trailers_to_omit(line: Line, line_length: int) -> Iterator[Set[Leaf
"""
omit: Set[LeafID] = set()
if not line.should_explode:
if not line.should_explode and not line.magic_trailing_comma:
yield omit
length = 4 * line.depth
@ -5968,7 +5971,7 @@ def generate_trailers_to_omit(line: Line, line_length: int) -> Iterator[Set[Leaf
elif leaf.type in CLOSING_BRACKETS:
prev = line.leaves[index - 1] if index > 0 else None
if (
line.should_explode
(line.should_explode or line.magic_trailing_comma)
and prev
and prev.type == token.COMMA
and not is_one_tuple_between(
@ -5996,7 +5999,7 @@ def generate_trailers_to_omit(line: Line, line_length: int) -> Iterator[Set[Leaf
yield omit
if (
line.should_explode
(line.should_explode or line.magic_trailing_comma)
and prev
and prev.type == token.COMMA
and not is_one_tuple_between(leaf.opening_bracket, leaf, line.leaves)
@ -6629,7 +6632,7 @@ def can_omit_invisible_parens(
penultimate = line.leaves[-2]
last = line.leaves[-1]
if line.should_explode:
if line.should_explode or line.magic_trailing_comma:
try:
penultimate, last = last_two_except(line.leaves, omit=omit_on_explode)
except LookupError:
@ -6656,7 +6659,9 @@ def can_omit_invisible_parens(
# unnecessary.
return True
if line.should_explode and penultimate.type == token.COMMA:
if (
line.should_explode or line.magic_trailing_comma
) and penultimate.type == token.COMMA:
# The rightmost non-omitted bracket pair is the one we want to explode on.
return True