Delimit multiline expressions according to math operator priority
Fixes #148
This commit is contained in:
parent
1747c388bb
commit
7811f957f3
@ -540,6 +540,9 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
|
|||||||
|
|
||||||
* slices are now formatted according to PEP 8 (#178)
|
* slices are now formatted according to PEP 8 (#178)
|
||||||
|
|
||||||
|
* math operators now use their respective priorities for delimiting multiline
|
||||||
|
expressions (#148)
|
||||||
|
|
||||||
* empty parentheses in a class definition are now removed (#145, #180)
|
* empty parentheses in a class definition are now removed (#145, #180)
|
||||||
|
|
||||||
* fixed an invalid trailing comma sometimes left in imports (#185)
|
* fixed an invalid trailing comma sometimes left in imports (#185)
|
||||||
|
46
black.py
46
black.py
@ -553,19 +553,20 @@ def show(cls, code: str) -> None:
|
|||||||
token.GREATEREQUAL,
|
token.GREATEREQUAL,
|
||||||
}
|
}
|
||||||
MATH_OPERATORS = {
|
MATH_OPERATORS = {
|
||||||
|
token.VBAR,
|
||||||
|
token.CIRCUMFLEX,
|
||||||
|
token.AMPER,
|
||||||
|
token.LEFTSHIFT,
|
||||||
|
token.RIGHTSHIFT,
|
||||||
token.PLUS,
|
token.PLUS,
|
||||||
token.MINUS,
|
token.MINUS,
|
||||||
token.STAR,
|
token.STAR,
|
||||||
token.SLASH,
|
token.SLASH,
|
||||||
token.VBAR,
|
|
||||||
token.AMPER,
|
|
||||||
token.PERCENT,
|
|
||||||
token.CIRCUMFLEX,
|
|
||||||
token.TILDE,
|
|
||||||
token.LEFTSHIFT,
|
|
||||||
token.RIGHTSHIFT,
|
|
||||||
token.DOUBLESTAR,
|
|
||||||
token.DOUBLESLASH,
|
token.DOUBLESLASH,
|
||||||
|
token.PERCENT,
|
||||||
|
token.AT,
|
||||||
|
token.TILDE,
|
||||||
|
token.DOUBLESTAR,
|
||||||
}
|
}
|
||||||
STARS = {token.STAR, token.DOUBLESTAR}
|
STARS = {token.STAR, token.DOUBLESTAR}
|
||||||
VARARGS_PARENTS = {
|
VARARGS_PARENTS = {
|
||||||
@ -599,12 +600,27 @@ def show(cls, code: str) -> None:
|
|||||||
syms.power,
|
syms.power,
|
||||||
}
|
}
|
||||||
COMPREHENSION_PRIORITY = 20
|
COMPREHENSION_PRIORITY = 20
|
||||||
COMMA_PRIORITY = 10
|
COMMA_PRIORITY = 18
|
||||||
TERNARY_PRIORITY = 7
|
TERNARY_PRIORITY = 16
|
||||||
LOGIC_PRIORITY = 5
|
LOGIC_PRIORITY = 14
|
||||||
STRING_PRIORITY = 4
|
STRING_PRIORITY = 12
|
||||||
COMPARATOR_PRIORITY = 3
|
COMPARATOR_PRIORITY = 10
|
||||||
MATH_PRIORITY = 1
|
MATH_PRIORITIES = {
|
||||||
|
token.VBAR: 8,
|
||||||
|
token.CIRCUMFLEX: 7,
|
||||||
|
token.AMPER: 6,
|
||||||
|
token.LEFTSHIFT: 5,
|
||||||
|
token.RIGHTSHIFT: 5,
|
||||||
|
token.PLUS: 4,
|
||||||
|
token.MINUS: 4,
|
||||||
|
token.STAR: 3,
|
||||||
|
token.SLASH: 3,
|
||||||
|
token.DOUBLESLASH: 3,
|
||||||
|
token.PERCENT: 3,
|
||||||
|
token.AT: 3,
|
||||||
|
token.TILDE: 2,
|
||||||
|
token.DOUBLESTAR: 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -1649,7 +1665,7 @@ def is_split_before_delimiter(leaf: Leaf, previous: Leaf = None) -> int:
|
|||||||
and leaf.parent
|
and leaf.parent
|
||||||
and leaf.parent.type not in {syms.factor, syms.star_expr}
|
and leaf.parent.type not in {syms.factor, syms.star_expr}
|
||||||
):
|
):
|
||||||
return MATH_PRIORITY
|
return MATH_PRIORITIES[leaf.type]
|
||||||
|
|
||||||
if leaf.type in COMPARATORS:
|
if leaf.type in COMPARATORS:
|
||||||
return COMPARATOR_PRIORITY
|
return COMPARATOR_PRIORITY
|
||||||
|
@ -129,7 +129,7 @@
|
|||||||
]
|
]
|
||||||
slice[0]
|
slice[0]
|
||||||
slice[0:1]
|
slice[0:1]
|
||||||
@@ -123,91 +145,119 @@
|
@@ -123,103 +145,140 @@
|
||||||
numpy[-(c + 1) :, d]
|
numpy[-(c + 1) :, d]
|
||||||
numpy[:, l[-2]]
|
numpy[:, l[-2]]
|
||||||
numpy[:, ::-1]
|
numpy[:, ::-1]
|
||||||
@ -244,6 +244,18 @@
|
|||||||
-if (
|
-if (
|
||||||
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
|
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
|
||||||
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
-):
|
||||||
|
- return True
|
||||||
|
-if (
|
||||||
|
- ~ aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
|
||||||
|
-):
|
||||||
|
- return True
|
||||||
|
-if (
|
||||||
|
- ~ aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
|
||||||
|
-):
|
||||||
|
- return True
|
||||||
|
-if (
|
||||||
|
- ~ aaaaaaaaaaaaaaaa.a + aaaaaaaaaaaaaaaa.b - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h ^ aaaaaaaaaaaaaaaa.i << aaaaaaaaaaaaaaaa.k >> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
|
||||||
+print(*lambda x: x)
|
+print(*lambda x: x)
|
||||||
+assert not Test, "Short message"
|
+assert not Test, "Short message"
|
||||||
+assert (
|
+assert (
|
||||||
@ -296,6 +308,27 @@
|
|||||||
+if (
|
+if (
|
||||||
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
+ / aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
+ / aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
+):
|
||||||
|
+ return True
|
||||||
|
+if (
|
||||||
|
+ ~aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e
|
||||||
|
+ | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
|
||||||
|
+):
|
||||||
|
+ return True
|
||||||
|
+if (
|
||||||
|
+ ~aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e
|
||||||
|
+ | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h
|
||||||
|
+ ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
|
||||||
|
+):
|
||||||
|
+ return True
|
||||||
|
+if (
|
||||||
|
+ ~aaaaaaaaaaaaaaaa.a
|
||||||
|
+ + aaaaaaaaaaaaaaaa.b
|
||||||
|
+ - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e
|
||||||
|
+ | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h
|
||||||
|
+ ^ aaaaaaaaaaaaaaaa.i
|
||||||
|
+ << aaaaaaaaaaaaaaaa.k
|
||||||
|
+ >> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
|
||||||
):
|
):
|
||||||
return True
|
return True
|
||||||
last_call()
|
last_call()
|
||||||
|
@ -208,6 +208,18 @@ async def f():
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
):
|
):
|
||||||
return True
|
return True
|
||||||
|
if (
|
||||||
|
~ aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
if (
|
||||||
|
~ aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
if (
|
||||||
|
~ aaaaaaaaaaaaaaaa.a + aaaaaaaaaaaaaaaa.b - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h ^ aaaaaaaaaaaaaaaa.i << aaaaaaaaaaaaaaaa.k >> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
|
||||||
|
):
|
||||||
|
return True
|
||||||
last_call()
|
last_call()
|
||||||
# standalone comment at ENDMARKER
|
# standalone comment at ENDMARKER
|
||||||
|
|
||||||
@ -475,5 +487,26 @@ async def f():
|
|||||||
/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
):
|
):
|
||||||
return True
|
return True
|
||||||
|
if (
|
||||||
|
~aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e
|
||||||
|
| aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
if (
|
||||||
|
~aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e
|
||||||
|
| aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h
|
||||||
|
^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
if (
|
||||||
|
~aaaaaaaaaaaaaaaa.a
|
||||||
|
+ aaaaaaaaaaaaaaaa.b
|
||||||
|
- aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e
|
||||||
|
| aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h
|
||||||
|
^ aaaaaaaaaaaaaaaa.i
|
||||||
|
<< aaaaaaaaaaaaaaaa.k
|
||||||
|
>> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
|
||||||
|
):
|
||||||
|
return True
|
||||||
last_call()
|
last_call()
|
||||||
# standalone comment at ENDMARKER
|
# standalone comment at ENDMARKER
|
||||||
|
Loading…
Reference in New Issue
Block a user