Split ternary expressions

Fixes #141
This commit is contained in:
Łukasz Langa 2018-04-24 12:19:56 -07:00
parent 92957a41e3
commit 9d671bdbe1
4 changed files with 26 additions and 3 deletions

View File

@ -540,6 +540,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
* fixed invalid splitting on comma in lambda arguments (#133)
* fixed missing splits of ternary expressions (#141)
### 18.4a2
* fixed parsing of unaligned standalone comments (#99, #112)

View File

@ -583,6 +583,7 @@ def show(cls, code: str) -> None:
}
COMPREHENSION_PRIORITY = 20
COMMA_PRIORITY = 10
TERNARY_PRIORITY = 7
LOGIC_PRIORITY = 5
STRING_PRIORITY = 4
COMPARATOR_PRIORITY = 3
@ -1602,6 +1603,14 @@ def is_split_before_delimiter(leaf: Leaf, previous: Leaf = None) -> int:
):
return COMPREHENSION_PRIORITY
if (
leaf.type == token.NAME
and leaf.value in {"if", "else"}
and leaf.parent
and leaf.parent.type == syms.test
):
return TERNARY_PRIORITY
if leaf.type == token.NAME and leaf.value in LOGIC_OPERATORS and leaf.parent:
return LOGIC_PRIORITY

View File

@ -11,7 +11,7 @@
True
False
1
@@ -29,60 +29,78 @@
@@ -29,61 +29,83 @@
~great
+value
-1
@ -37,8 +37,14 @@
(str or None) if True else (str or bytes or None)
str or None if (1 if True else 2) else str or bytes or None
(str or None) if (1 if True else 2) else (str or bytes or None)
-((super_long_variable_name or None) if (1 if super_long_test_name else 2) else (str or bytes or None))
-{'2.7': dead, '3.7': (long_live or die_hard)}
-{'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}}
+(
+ (super_long_variable_name or None)
+ if (1 if super_long_test_name else 2)
+ else (str or bytes or None)
+)
+{"2.7": dead, "3.7": (long_live or die_hard)}
+{"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
{**a, **b, **c}
@ -110,7 +116,7 @@
call(**self.screen_kwargs)
call(b, **self.screen_kwargs)
lukasz.langa.pl
@@ -91,11 +109,11 @@
@@ -92,11 +114,11 @@
1.0 .real
....__class__
list[str]
@ -123,7 +129,7 @@
]
slice[0]
slice[0:1]
@@ -122,88 +140,122 @@
@@ -123,88 +145,122 @@
numpy[-(c + 1):, d]
numpy[:, l[-2]]
numpy[:, ::-1]

View File

@ -43,6 +43,7 @@
(str or None) if True else (str or bytes or None)
str or None if (1 if True else 2) else str or bytes or None
(str or None) if (1 if True else 2) else (str or bytes or None)
((super_long_variable_name or None) if (1 if super_long_test_name else 2) else (str or bytes or None))
{'2.7': dead, '3.7': (long_live or die_hard)}
{'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}}
{**a, **b, **c}
@ -260,6 +261,11 @@ async def f():
(str or None) if True else (str or bytes or None)
str or None if (1 if True else 2) else str or bytes or None
(str or None) if (1 if True else 2) else (str or bytes or None)
(
(super_long_variable_name or None)
if (1 if super_long_test_name else 2)
else (str or bytes or None)
)
{"2.7": dead, "3.7": (long_live or die_hard)}
{"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
{**a, **b, **c}