From: Zsolt Dollenstein Date: Tue, 17 Apr 2018 08:04:35 +0000 (+0100) Subject: Parse complex expressions in parameters after * and ** X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/5192ed484bdbe507a8dd03dc31f93e4efec95b19?hp=-c Parse complex expressions in parameters after * and ** --- 5192ed484bdbe507a8dd03dc31f93e4efec95b19 diff --git a/black.py b/black.py index c3610c7..7c487f6 100644 --- a/black.py +++ b/black.py @@ -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: diff --git a/blib2to3/Grammar.txt b/blib2to3/Grammar.txt index 4905c91..c9cb3a7 100644 --- a/blib2to3/Grammar.txt +++ b/blib2to3/Grammar.txt @@ -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] diff --git a/blib2to3/Grammar3.6.5.final.0.pickle b/blib2to3/Grammar3.6.5.final.0.pickle index 3a8d93d..e9d5fab 100644 Binary files a/blib2to3/Grammar3.6.5.final.0.pickle and b/blib2to3/Grammar3.6.5.final.0.pickle differ diff --git a/tests/expression.diff b/tests/expression.diff index bc34c0e..dd9459c 100644 --- a/tests/expression.diff +++ b/tests/expression.diff @@ -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 (): diff --git a/tests/expression.py b/tests/expression.py index 9c07177..2ecf522 100644 --- a/tests/expression.py +++ b/tests/expression.py @@ -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 ():