mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-12 23:55:19 +00:00

## Summary Part of #17412 Starred expressions cannot be used as values in assignment expressions. Add a new semantic syntax error to catch such instances. Note that we already have `ParseErrorType::InvalidStarredExpressionUsage` to catch some starred expression errors during parsing, but that does not cover top level assignment expressions. ## Test Plan - Added new inline tests for the new rule - Found some examples marked as "valid" in existing tests (`_ = *data`), which are not really valid (per this new rule) and updated them - There was an existing inline test - `assign_stmt_invalid_value_expr` which had instances of `*` expression which would be deemed invalid by this new rule. Converted these to tuples, so that they do not trigger this new rule.
43 lines
No EOL
729 B
Python
43 lines
No EOL
729 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 |