[syntax-errors] Starred expressions in return, yield, and for (#17134)

Summary
--

Fixes https://github.com/astral-sh/ruff/issues/16520 by flagging single,
starred expressions in `return`, `yield`, and
`for` statements.

I thought `yield from` would also be included here, but that error is
emitted by
the CPython parser:

```pycon
>>> ast.parse("def f(): yield from *x")
Traceback (most recent call last):
  File "<python-input-214>", line 1, in <module>
    ast.parse("def f(): yield from *x")
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/ast.py", line 54, in parse
    return compile(source, filename, mode, flags,
                   _feature_version=feature_version, optimize=optimize)
  File "<unknown>", line 1
    def f(): yield from *x
                        ^
SyntaxError: invalid syntax
```

And we also already catch it in our parser.

Test Plan
--

New inline tests and updates to existing tests.
This commit is contained in:
Brent Westbrook 2025-04-02 08:38:25 -04:00 committed by GitHub
parent 2ae39edccf
commit d45593288f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 679 additions and 435 deletions

View file

@ -22,19 +22,9 @@ for a, b, c, in iter:
for (a, b) in iter:
pass
for target in *x.attr:
pass
for target in [1, 2]:
pass
for *target in a, b, c,:
pass
else:
pass
for target in *x | y: ...
for target in *await x: ...
for target in await x: ...
for target in lambda x: x: ...
for target in x if True else y: ...