From 7b11f04d54d6da117ed5e640fd9420727f07ef81 Mon Sep 17 00:00:00 2001 From: "Michael J. Sullivan" Date: Mon, 14 Oct 2019 18:15:18 -0700 Subject: [PATCH] Fix type: ignore line breaking when there is a destructuring assignment (#1065) It turns out we also need to handle invisible *left* parens added at the *start* of a line. Refactor `contains_unsplittable_type_ignore` to handle this more cleanly. --- black.py | 22 +++++++++------------- tests/data/comments6.py | 2 ++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/black.py b/black.py index ff373c8..0776983 100644 --- a/black.py +++ b/black.py @@ -1341,19 +1341,15 @@ class Line: # only report an unsplittable 'type: ignore' if this line was # one line in the original code. - # Like in the type comment check above, we need to skip a black added - # trailing comma or invisible paren, since it will be the original leaf - # before it that has the original line number. - last_idx = -1 - last_leaf = self.leaves[-1] - if len(self.leaves) > 2 and ( - last_leaf.type == token.COMMA - or (last_leaf.type == token.RPAR and not last_leaf.value) - ): - last_idx = -2 - - if self.leaves[0].lineno == self.leaves[last_idx].lineno: - for node in self.leaves[last_idx:]: + # Grab the first and last line numbers, skipping generated leaves + first_line = next((l.lineno for l in self.leaves if l.lineno != 0), 0) + last_line = next((l.lineno for l in reversed(self.leaves) if l.lineno != 0), 0) + + if first_line == last_line: + # We look at the last two leaves since a comma or an + # invisible paren could have been added at the end of the + # line. + for node in self.leaves[-2:]: for comment in self.comments.get(id(node), []): if is_type_comment(comment, " ignore"): return True diff --git a/tests/data/comments6.py b/tests/data/comments6.py index 3de8b2e..abfd96e 100644 --- a/tests/data/comments6.py +++ b/tests/data/comments6.py @@ -112,3 +112,5 @@ call_to_some_function_asdf( foo, [AAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBB], # type: ignore ) + +aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*items))) # type: ignore[arg-type] -- 2.39.2