Don't break long lines when type: ignore
is present (#1040)
Fixes #997.
This commit is contained in:
parent
c5637a7085
commit
d9e71a75cc
33
black.py
33
black.py
@ -1325,6 +1325,28 @@ def contains_uncollapsable_type_comments(self) -> bool:
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def contains_unsplittable_type_ignore(self) -> bool:
|
||||||
|
if not self.leaves:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# If a 'type: ignore' is attached to the end of a line, we
|
||||||
|
# can't split the line, because we can't know which of the
|
||||||
|
# subexpressions the ignore was meant to apply to.
|
||||||
|
#
|
||||||
|
# We only want this to apply to actual physical lines from the
|
||||||
|
# original source, though: we don't want the presence of a
|
||||||
|
# 'type: ignore' at the end of a multiline expression to
|
||||||
|
# justify pushing it all onto one line. Thus we
|
||||||
|
# (unfortunately) need to check the actual source lines and
|
||||||
|
# only report an unsplittable 'type: ignore' if this line was
|
||||||
|
# one line in the original code.
|
||||||
|
if self.leaves[0].lineno == self.leaves[-1].lineno:
|
||||||
|
for comment in self.comments.get(id(self.leaves[-1]), []):
|
||||||
|
if is_type_comment(comment, " ignore"):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def contains_multiline_strings(self) -> bool:
|
def contains_multiline_strings(self) -> bool:
|
||||||
for leaf in self.leaves:
|
for leaf in self.leaves:
|
||||||
if is_multiline_string(leaf):
|
if is_multiline_string(leaf):
|
||||||
@ -2332,7 +2354,10 @@ def split_line(
|
|||||||
if (
|
if (
|
||||||
not line.contains_uncollapsable_type_comments()
|
not line.contains_uncollapsable_type_comments()
|
||||||
and not line.should_explode
|
and not line.should_explode
|
||||||
and is_line_short_enough(line, line_length=line_length, line_str=line_str)
|
and (
|
||||||
|
is_line_short_enough(line, line_length=line_length, line_str=line_str)
|
||||||
|
or line.contains_unsplittable_type_ignore()
|
||||||
|
)
|
||||||
):
|
):
|
||||||
yield line
|
yield line
|
||||||
return
|
return
|
||||||
@ -2705,12 +2730,14 @@ def is_import(leaf: Leaf) -> bool:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def is_type_comment(leaf: Leaf) -> bool:
|
def is_type_comment(leaf: Leaf, suffix: str = "") -> bool:
|
||||||
"""Return True if the given leaf is a special comment.
|
"""Return True if the given leaf is a special comment.
|
||||||
Only returns true for type comments for now."""
|
Only returns true for type comments for now."""
|
||||||
t = leaf.type
|
t = leaf.type
|
||||||
v = leaf.value
|
v = leaf.value
|
||||||
return t in {token.COMMENT, t == STANDALONE_COMMENT} and v.startswith("# type:")
|
return t in {token.COMMENT, t == STANDALONE_COMMENT} and v.startswith(
|
||||||
|
"# type:" + suffix
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def normalize_prefix(leaf: Leaf, *, inside_brackets: bool) -> None:
|
def normalize_prefix(leaf: Leaf, *, inside_brackets: bool) -> None:
|
||||||
|
@ -99,5 +99,9 @@ def func(
|
|||||||
a[-1], # type: ignore
|
a[-1], # type: ignore
|
||||||
)
|
)
|
||||||
|
|
||||||
|
c = call(
|
||||||
|
"aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa" # type: ignore
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
||||||
|
@ -36,6 +36,25 @@
|
|||||||
|
|
||||||
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
||||||
|
|
||||||
|
|
||||||
|
def func():
|
||||||
|
c = call(
|
||||||
|
0.0123,
|
||||||
|
0.0456,
|
||||||
|
0.0789,
|
||||||
|
0.0123,
|
||||||
|
0.0789,
|
||||||
|
a[-1], # type: ignore
|
||||||
|
)
|
||||||
|
|
||||||
|
# The type: ignore exception only applies to line length, not
|
||||||
|
# other types of formatting.
|
||||||
|
c = call(
|
||||||
|
"aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", # type: ignore
|
||||||
|
"aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# output
|
# output
|
||||||
|
|
||||||
from .config import (
|
from .config import (
|
||||||
@ -71,3 +90,26 @@
|
|||||||
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
||||||
|
|
||||||
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa
|
||||||
|
|
||||||
|
|
||||||
|
def func():
|
||||||
|
c = call(
|
||||||
|
0.0123, 0.0456, 0.0789, 0.0123, 0.0789, a[-1] # type: ignore
|
||||||
|
)
|
||||||
|
|
||||||
|
# The type: ignore exception only applies to line length, not
|
||||||
|
# other types of formatting.
|
||||||
|
c = call(
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa", # type: ignore
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
"aaaaaaaa",
|
||||||
|
)
|
||||||
|
@ -118,7 +118,7 @@
|
|||||||
call(**self.screen_kwargs)
|
call(**self.screen_kwargs)
|
||||||
call(b, **self.screen_kwargs)
|
call(b, **self.screen_kwargs)
|
||||||
lukasz.langa.pl
|
lukasz.langa.pl
|
||||||
@@ -94,23 +115,25 @@
|
@@ -94,23 +115,23 @@
|
||||||
1.0 .real
|
1.0 .real
|
||||||
....__class__
|
....__class__
|
||||||
list[str]
|
list[str]
|
||||||
@ -132,15 +132,12 @@
|
|||||||
xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
||||||
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
||||||
)
|
)
|
||||||
-xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
||||||
- sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
||||||
-)
|
)
|
||||||
xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[
|
-xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[
|
||||||
..., List[SomeClass]
|
- ..., List[SomeClass]
|
||||||
-] = classmethod(sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)) # type: ignore
|
-] = classmethod(sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)) # type: ignore
|
||||||
+] = classmethod( # type: ignore
|
|
||||||
+ sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
|
||||||
+)
|
|
||||||
+xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod(
|
+xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod(
|
||||||
+ sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
+ sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
||||||
+) # type: ignore
|
+) # type: ignore
|
||||||
@ -149,7 +146,7 @@
|
|||||||
slice[0:1:2]
|
slice[0:1:2]
|
||||||
slice[:]
|
slice[:]
|
||||||
slice[:-1]
|
slice[:-1]
|
||||||
@@ -134,113 +157,171 @@
|
@@ -134,113 +155,171 @@
|
||||||
numpy[-(c + 1) :, d]
|
numpy[-(c + 1) :, d]
|
||||||
numpy[:, l[-2]]
|
numpy[:, l[-2]]
|
||||||
numpy[:, ::-1]
|
numpy[:, ::-1]
|
||||||
|
@ -374,9 +374,7 @@ async def f():
|
|||||||
xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
||||||
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
||||||
)
|
)
|
||||||
xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[
|
xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
||||||
..., List[SomeClass]
|
|
||||||
] = classmethod( # type: ignore
|
|
||||||
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
||||||
)
|
)
|
||||||
xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod(
|
xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod(
|
||||||
|
Loading…
Reference in New Issue
Block a user