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
# 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
# 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 self.leaves[0].lineno == self.leaves[last_idx].lineno:
for node in self.leaves[last_idx:]:
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

View File

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