mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-24 21:44:37 +00:00

Summary -- Detects starred assignment targets outside of tuples and lists like `*a = (1,)`. This PR only considers assignment statements. I also checked annotated assigment statements, but these give a separate error that we already catch, so I think they're okay not to consider: ```pycon >>> *a: list[int] = [] File "<python-input-72>", line 1 *a: list[int] = [] ^ SyntaxError: invalid syntax ``` Fixes #13759 Test Plan -- New inline tests, plus a new `SemanticSyntaxError` for an existing parser test. I also removed a now-invalid case from an otherwise-valid test fixture. The new semantic error leads to two errors for the case below: ```python *foo() = 42 ``` but this matches [pyright] too. [pyright]: https://pyright-play.net/?code=FQMw9mAUCUAEC8sAsAmAUEA
43 lines
No EOL
723 B
Python
43 lines
No EOL
723 B
Python
x = (1, 2, 3)
|
|
|
|
(x, y) = (1, 2, 3)
|
|
|
|
[x, y] = (1, 2, 3)
|
|
|
|
x.y = (1, 2, 3)
|
|
|
|
x[y] = (1, 2, 3)
|
|
|
|
(x, *y) = (1, 2, 3)
|
|
|
|
|
|
# This last group of tests checks that assignments we expect to be parsed
|
|
# (including some interesting ones) continue to be parsed successfully.
|
|
|
|
[x, y, z] = [1, 2, 3]
|
|
|
|
(x, y, z) = (1, 2, 3)
|
|
x[0] = 42
|
|
|
|
# This is actually a type error, not a syntax error. So check that it
|
|
# doesn't fail parsing.
|
|
|
|
5[0] = 42
|
|
x[1:2] = [42]
|
|
|
|
# This is actually a type error, not a syntax error. So check that it
|
|
# doesn't fail parsing.
|
|
5[1:2] = [42]
|
|
|
|
foo.bar = 42
|
|
|
|
# This is actually an attribute error, not a syntax error. So check that
|
|
# it doesn't fail parsing.
|
|
"foo".y = 42
|
|
|
|
foo = 42
|
|
|
|
[] = *data
|
|
() = *data
|
|
a, b = ab
|
|
a = b = c |