mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-09 22:25:09 +00:00

Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / check playground (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
[Knot Playground] Release / publish (push) Waiting to run
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 |