Fix long lines with power operator(s) getting splitted before line length (#3942)
Fixes #3889
This commit is contained in:
parent
6f84f65285
commit
1648ac5180
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
<!-- Changes that affect Black's preview style -->
|
<!-- Changes that affect Black's preview style -->
|
||||||
|
|
||||||
|
- Fix long lines with power operators getting splitted before the line length (#3942)
|
||||||
- Long type hints are now wrapped in parentheses and properly indented when split across
|
- Long type hints are now wrapped in parentheses and properly indented when split across
|
||||||
multiple lines (#3899)
|
multiple lines (#3899)
|
||||||
- Magic trailing commas are now respected in return types. (#3916)
|
- Magic trailing commas are now respected in return types. (#3916)
|
||||||
|
@ -536,6 +536,17 @@ def __post_init__(self) -> None:
|
|||||||
self.visit_case_block = self.visit_match_case
|
self.visit_case_block = self.visit_match_case
|
||||||
|
|
||||||
|
|
||||||
|
def _hugging_power_ops_line_to_string(
|
||||||
|
line: Line,
|
||||||
|
features: Collection[Feature],
|
||||||
|
mode: Mode,
|
||||||
|
) -> Optional[str]:
|
||||||
|
try:
|
||||||
|
return line_to_string(next(hug_power_op(line, features, mode)))
|
||||||
|
except CannotTransform:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def transform_line(
|
def transform_line(
|
||||||
line: Line, mode: Mode, features: Collection[Feature] = ()
|
line: Line, mode: Mode, features: Collection[Feature] = ()
|
||||||
) -> Iterator[Line]:
|
) -> Iterator[Line]:
|
||||||
@ -551,6 +562,14 @@ def transform_line(
|
|||||||
|
|
||||||
line_str = line_to_string(line)
|
line_str = line_to_string(line)
|
||||||
|
|
||||||
|
# We need the line string when power operators are hugging to determine if we should
|
||||||
|
# split the line. Default to line_str, if no power operator are present on the line.
|
||||||
|
line_str_hugging_power_ops = (
|
||||||
|
(_hugging_power_ops_line_to_string(line, features, mode) or line_str)
|
||||||
|
if Preview.fix_power_op_line_length in mode
|
||||||
|
else line_str
|
||||||
|
)
|
||||||
|
|
||||||
ll = mode.line_length
|
ll = mode.line_length
|
||||||
sn = mode.string_normalization
|
sn = mode.string_normalization
|
||||||
string_merge = StringMerger(ll, sn)
|
string_merge = StringMerger(ll, sn)
|
||||||
@ -564,7 +583,7 @@ def transform_line(
|
|||||||
and not line.should_split_rhs
|
and not line.should_split_rhs
|
||||||
and not line.magic_trailing_comma
|
and not line.magic_trailing_comma
|
||||||
and (
|
and (
|
||||||
is_line_short_enough(line, mode=mode, line_str=line_str)
|
is_line_short_enough(line, mode=mode, line_str=line_str_hugging_power_ops)
|
||||||
or line.contains_unsplittable_type_ignore()
|
or line.contains_unsplittable_type_ignore()
|
||||||
)
|
)
|
||||||
and not (line.inside_brackets and line.contains_standalone_comments())
|
and not (line.inside_brackets and line.contains_standalone_comments())
|
||||||
|
@ -188,6 +188,7 @@ class Preview(Enum):
|
|||||||
dummy_implementations = auto()
|
dummy_implementations = auto()
|
||||||
walrus_subscript = auto()
|
walrus_subscript = auto()
|
||||||
module_docstring_newlines = auto()
|
module_docstring_newlines = auto()
|
||||||
|
fix_power_op_line_length = auto()
|
||||||
|
|
||||||
|
|
||||||
class Deprecated(UserWarning):
|
class Deprecated(UserWarning):
|
||||||
|
@ -29,6 +29,13 @@ def function_dont_replace_spaces():
|
|||||||
p = {(k, k**2): v**2 for k, v in pairs}
|
p = {(k, k**2): v**2 for k, v in pairs}
|
||||||
q = [10**i for i in range(6)]
|
q = [10**i for i in range(6)]
|
||||||
r = x**y
|
r = x**y
|
||||||
|
s = 1 ** 1
|
||||||
|
t = (
|
||||||
|
1
|
||||||
|
** 1
|
||||||
|
**1
|
||||||
|
** 1
|
||||||
|
)
|
||||||
|
|
||||||
a = 5.0**~4.0
|
a = 5.0**~4.0
|
||||||
b = 5.0 ** f()
|
b = 5.0 ** f()
|
||||||
@ -47,6 +54,13 @@ def function_dont_replace_spaces():
|
|||||||
o = settings(max_examples=10**6.0)
|
o = settings(max_examples=10**6.0)
|
||||||
p = {(k, k**2): v**2.0 for k, v in pairs}
|
p = {(k, k**2): v**2.0 for k, v in pairs}
|
||||||
q = [10.5**i for i in range(6)]
|
q = [10.5**i for i in range(6)]
|
||||||
|
s = 1.0 ** 1.0
|
||||||
|
t = (
|
||||||
|
1.0
|
||||||
|
** 1.0
|
||||||
|
**1.0
|
||||||
|
** 1.0
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# WE SHOULD DEFINITELY NOT EAT THESE COMMENTS (https://github.com/psf/black/issues/2873)
|
# WE SHOULD DEFINITELY NOT EAT THESE COMMENTS (https://github.com/psf/black/issues/2873)
|
||||||
@ -97,6 +111,8 @@ def function_dont_replace_spaces():
|
|||||||
p = {(k, k**2): v**2 for k, v in pairs}
|
p = {(k, k**2): v**2 for k, v in pairs}
|
||||||
q = [10**i for i in range(6)]
|
q = [10**i for i in range(6)]
|
||||||
r = x**y
|
r = x**y
|
||||||
|
s = 1**1
|
||||||
|
t = 1**1**1**1
|
||||||
|
|
||||||
a = 5.0**~4.0
|
a = 5.0**~4.0
|
||||||
b = 5.0 ** f()
|
b = 5.0 ** f()
|
||||||
@ -115,6 +131,8 @@ def function_dont_replace_spaces():
|
|||||||
o = settings(max_examples=10**6.0)
|
o = settings(max_examples=10**6.0)
|
||||||
p = {(k, k**2): v**2.0 for k, v in pairs}
|
p = {(k, k**2): v**2.0 for k, v in pairs}
|
||||||
q = [10.5**i for i in range(6)]
|
q = [10.5**i for i in range(6)]
|
||||||
|
s = 1.0**1.0
|
||||||
|
t = 1.0**1.0**1.0**1.0
|
||||||
|
|
||||||
|
|
||||||
# WE SHOULD DEFINITELY NOT EAT THESE COMMENTS (https://github.com/psf/black/issues/2873)
|
# WE SHOULD DEFINITELY NOT EAT THESE COMMENTS (https://github.com/psf/black/issues/2873)
|
||||||
|
97
tests/data/cases/preview_power_op_spacing.py
Normal file
97
tests/data/cases/preview_power_op_spacing.py
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
# flags: --preview
|
||||||
|
a = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
||||||
|
b = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
||||||
|
c = 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1
|
||||||
|
d = 1**1 ** 1**1 ** 1**1 ** 1**1 ** 1**1**1 ** 1 ** 1**1 ** 1**1**1**1**1 ** 1 ** 1**1**1 **1**1** 1 ** 1 ** 1
|
||||||
|
e = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
||||||
|
f = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
||||||
|
|
||||||
|
a = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
||||||
|
b = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
||||||
|
c = 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0
|
||||||
|
d = 1.0**1.0 ** 1.0**1.0 ** 1.0**1.0 ** 1.0**1.0 ** 1.0**1.0**1.0 ** 1.0 ** 1.0**1.0 ** 1.0**1.0**1.0
|
||||||
|
|
||||||
|
# output
|
||||||
|
a = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
||||||
|
b = (
|
||||||
|
1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
** 1
|
||||||
|
)
|
||||||
|
c = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
||||||
|
d = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
||||||
|
e = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
||||||
|
f = (
|
||||||
|
𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
** 𨉟
|
||||||
|
)
|
||||||
|
|
||||||
|
a = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
||||||
|
b = (
|
||||||
|
1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
** 1.0
|
||||||
|
)
|
||||||
|
c = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
||||||
|
d = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
Loading…
Reference in New Issue
Block a user