Skip to content

Commit

Permalink
Add support for named exprs inside function calls as gen-exps (#3327)
Browse files Browse the repository at this point in the history
  • Loading branch information
isidentical committed Oct 10, 2022
1 parent b60b85b commit 1c786ee
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
4 changes: 4 additions & 0 deletions CHANGES.md
Expand Up @@ -26,6 +26,10 @@

<!-- Changes to the parser or to version autodetection -->

- Parsing support has been added for walruses inside generator expression that are
passed as function args (for example,
`any(match := my_re.match(text) for text in texts)`) (#3327).

### Performance

<!-- Changes that improve Black's performance. -->
Expand Down
2 changes: 1 addition & 1 deletion src/blib2to3/Grammar.txt
Expand Up @@ -186,7 +186,7 @@ arglist: argument (',' argument)* [',']
# multiple (test comp_for) arguments are blocked; keyword unpackings
# that precede iterable unpackings are blocked; etc.
argument: ( test [comp_for] |
test ':=' test |
test ':=' test [comp_for] |
test 'as' test |
test '=' asexpr_test |
'**' test |
Expand Down
11 changes: 11 additions & 0 deletions tests/data/py_310/pep_572_py310.py
Expand Up @@ -2,3 +2,14 @@
x[a:=0]
x[a:=0, b:=1]
x[5, b:=0]

# Walruses are allowed inside generator expressions on function calls since 3.10.
if any(match := pattern_error.match(s) for s in buffer):
if match.group(2) == data_not_available:
# Error OK to ignore.
pass

f(a := b + c for c in range(10))
f((a := b + c for c in range(10)), x)
f(y=(a := b + c for c in range(10)))
f(x, (a := b + c for c in range(10)), y=z, **q)

0 comments on commit 1c786ee

Please sign in to comment.