From caa3fcc2de3cfb6162bee0bb6f68b10bc38e612f Mon Sep 17 00:00:00 2001 From: James Addison Date: Thu, 4 Feb 2021 17:30:05 +0000 Subject: [PATCH] Clarity: isolate and extract each responsibility from an overloaded variable --- src/black/__init__.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/black/__init__.py b/src/black/__init__.py index e398ed0..44017b5 100644 --- a/src/black/__init__.py +++ b/src/black/__init__.py @@ -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 @@ class Line: 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 @@ class 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 transform_line( 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 @@ class StringParenWrapper(CustomSplitMapMixin, BaseStringSplitter): 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 -- 2.39.2