Skip to content
This repository has been archived by the owner on Jul 11, 2022. It is now read-only.

Commit

Permalink
Merge pull request pytest-dev#138 from ambv/star-expr
Browse files Browse the repository at this point in the history
Parse complex expressions in parameters after * and **
  • Loading branch information
zsol authored Apr 17, 2018
2 parents a764f1b + 68cc978 commit 0507044
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 7 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,9 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
* generalized star expression handling, including double stars; this
fixes multiplication making expressions "unsafe" for trailing commas (#132)

* fix parsing of complex expressions after star and double stars in
function parameters (#2)

### 18.4a2

* fixed parsing of unaligned standalone comments (#99, #112)
Expand Down
4 changes: 2 additions & 2 deletions black.py
Original file line number Diff line number Diff line change
Expand Up @@ -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} | STARS:
return NO

elif p.type == syms.decorator:
Expand Down Expand Up @@ -2165,7 +2165,7 @@ def is_python36(node: Node) -> bool:
and n.children[-1].type == token.COMMA
):
for ch in n.children:
if ch.type == token.STAR or ch.type == token.DOUBLESTAR:
if ch.type in STARS:
return True

return False
Expand Down
4 changes: 2 additions & 2 deletions blib2to3/Grammar.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
Binary file modified blib2to3/Grammar3.6.5.final.0.pickle
Binary file not shown.
11 changes: 8 additions & 3 deletions tests/expression.diff
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -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)): ...
Expand Down Expand Up @@ -226,8 +232,7 @@
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-):
- return True
+
+
+print(*lambda x: x)
+for (x,) in (1,), (2,), (3,):
+ ...
+for y in ():
Expand Down
6 changes: 6 additions & 0 deletions tests/expression.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)): ...
Expand Down Expand Up @@ -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 ():
Expand Down

0 comments on commit 0507044

Please sign in to comment.