Parse complex expressions in parameters after * and **

This commit is contained in:
Zsolt Dollenstein 2018-04-17 09:04:35 +01:00
parent a764f1bb3b
commit 5192ed484b
5 changed files with 17 additions and 6 deletions

View File

@ -1364,7 +1364,7 @@ def whitespace(leaf: Leaf) -> str: # noqa C901
if not prevp or prevp.type == token.LPAR:
return NO
elif prev.type == token.EQUAL or prev.type == token.DOUBLESTAR:
elif prev.type in {token.EQUAL, token.STAR, token.DOUBLESTAR}:
return NO
elif p.type == syms.decorator:

View File

@ -138,8 +138,8 @@ arglist: argument (',' argument)* [',']
# that precede iterable unpackings are blocked; etc.
argument: ( test [comp_for] |
test '=' test |
'**' expr |
star_expr )
'**' test |
'*' test )
comp_iter: comp_for | comp_if
comp_for: [ASYNC] 'for' exprlist 'in' or_test [comp_iter]

Binary file not shown.

View File

@ -117,7 +117,7 @@
]
slice[0]
slice[0:1]
@@ -121,85 +135,119 @@
@@ -121,88 +135,122 @@
numpy[-(c + 1):, d]
numpy[:, l[-2]]
numpy[:, ::-1]
@ -184,6 +184,12 @@
async def f():
await some.complicated[0].call(with_args=(True or (1 is not 1)))
-print(* [] or [1])
+
+
+print(*[] or [1])
print(**{1: 3} if False else {x: x for x in range(3)})
-print(* lambda x: x)
-for x, in (1,), (2,), (3,): ...
-for y in (): ...
-for z in (i for i in (1, 2, 3)): ...
@ -226,8 +232,7 @@
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-):
- return True
+
+
+print(*lambda x: x)
+for (x,) in (1,), (2,), (3,):
+ ...
+for y in ():

View File

@ -158,6 +158,9 @@ def gen():
async def f():
await some.complicated[0].call(with_args=(True or (1 is not 1)))
print(* [] or [1])
print(**{1: 3} if False else {x: x for x in range(3)})
print(* lambda x: x)
for x, in (1,), (2,), (3,): ...
for y in (): ...
for z in (i for i in (1, 2, 3)): ...
@ -402,6 +405,9 @@ async def f():
await some.complicated[0].call(with_args=(True or (1 is not 1)))
print(*[] or [1])
print(**{1: 3} if False else {x: x for x in range(3)})
print(*lambda x: x)
for (x,) in (1,), (2,), (3,):
...
for y in ():