Skip to content

Commit

Permalink
Allow for's target expression to be starred (#2879)
Browse files Browse the repository at this point in the history
Fixes #2878
  • Loading branch information
isidentical committed Mar 5, 2022
1 parent eb21315 commit 6f4976a
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
3 changes: 2 additions & 1 deletion CHANGES.md
Expand Up @@ -50,7 +50,8 @@

### Parser

<!-- Changes to the parser or to version autodetection -->
- Black can now parse starred expressions in the target of `for` and `async for`
statements, e.g `for item in *items_1, *items_2: pass` (#2879).

### Performance

Expand Down
2 changes: 1 addition & 1 deletion src/blib2to3/Grammar.txt
Expand Up @@ -109,7 +109,7 @@ compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef
async_stmt: ASYNC (funcdef | with_stmt | for_stmt)
if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite]
while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite]
for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
for_stmt: 'for' exprlist 'in' testlist_star_expr ':' suite ['else' ':' suite]
try_stmt: ('try' ':' suite
((except_clause ':' suite)+
['else' ':' suite]
Expand Down
27 changes: 27 additions & 0 deletions tests/data/starred_for_target.py
@@ -0,0 +1,27 @@
for x in *a, *b:
print(x)

for x in a, b, *c:
print(x)

for x in *a, b, c:
print(x)

for x in *a, b, *c:
print(x)

async for x in *a, *b:
print(x)

async for x in *a, b, *c:
print(x)

async for x in a, b, *c:
print(x)

async for x in (
*loooooooooooooooooooooong,
very,
*loooooooooooooooooooooooooooooooooooooooooooooooong,
):
print(x)
1 change: 1 addition & 0 deletions tests/test_format.py
Expand Up @@ -62,6 +62,7 @@
]

PY310_CASES: List[str] = [
"starred_for_target",
"pattern_matching_simple",
"pattern_matching_complex",
"pattern_matching_extras",
Expand Down

0 comments on commit 6f4976a

Please sign in to comment.