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.
This commit is contained in:
Michael J. Sullivan 2019-10-14 18:15:18 -07:00 committed by Jelle Zijlstra
parent 788f87cb58
commit 7b11f04d54
2 changed files with 10 additions and 12 deletions

View File

@ -1341,19 +1341,15 @@ def contains_unsplittable_type_ignore(self) -> bool:
# only report an unsplittable 'type: ignore' if this line was # only report an unsplittable 'type: ignore' if this line was
# one line in the original code. # one line in the original code.
# Like in the type comment check above, we need to skip a black added # Grab the first and last line numbers, skipping generated leaves
# trailing comma or invisible paren, since it will be the original leaf first_line = next((l.lineno for l in self.leaves if l.lineno != 0), 0)
# before it that has the original line number. last_line = next((l.lineno for l in reversed(self.leaves) if l.lineno != 0), 0)
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: if first_line == last_line:
for node in self.leaves[last_idx:]: # 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), []): for comment in self.comments.get(id(node), []):
if is_type_comment(comment, " ignore"): if is_type_comment(comment, " ignore"):
return True return True

View File

@ -112,3 +112,5 @@ def func(
foo, foo,
[AAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBB], # type: ignore [AAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBB], # type: ignore
) )
aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*items))) # type: ignore[arg-type]