ruff/crates/ruff_python_parser/resources/inline/err
Brent Westbrook 3a32e56445
[syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404)
## Summary
This PR detects unparenthesized assignment expressions used in set
literals and comprehensions and in sequence indexes. The link to the
release notes in https://github.com/astral-sh/ruff/issues/6591 just has
this entry:
> * Assignment expressions can now be used unparenthesized within set
literals and set comprehensions, as well as in sequence indexes (but not
slices).

with no other information, so hopefully the test cases I came up with
cover all of the changes. I also tested these out in the Python REPL and
they actually worked in Python 3.9 too. I'm guessing this may be another
case that was "formally made part of the language spec in Python 3.10,
but usable -- and commonly used -- in Python >=3.9" as @AlexWaygood
added to the body of #6591 for context managers. So we may want to
change the version cutoff, but I've gone along with the release notes
for now.

## Test Plan

New inline parser tests and linter CLI tests.
2025-03-14 15:06:42 -04:00
..
ann_assign_stmt_invalid_annotation.py
ann_assign_stmt_invalid_target.py
ann_assign_stmt_invalid_value.py
ann_assign_stmt_missing_rhs.py
ann_assign_stmt_type_alias_annotation.py
args_unparenthesized_generator.py Raise syntax error for unparenthesized generator expr in multi-argument call (#12445) 2024-07-22 14:44:20 +05:30
assert_empty_msg.py
assert_empty_test.py
assert_invalid_msg_expr.py
assert_invalid_test_expr.py
assign_stmt_invalid_target.py
assign_stmt_invalid_value_expr.py
assign_stmt_keyword_target.py
assign_stmt_missing_rhs.py
async_unexpected_token.py Maintain synchronicity between the lexer and the parser (#11457) 2024-06-03 18:23:50 +05:30
aug_assign_stmt_invalid_target.py
aug_assign_stmt_invalid_value.py
aug_assign_stmt_missing_rhs.py
case_expect_indented_block.py Expect indented case block instead of match stmt (#11033) 2024-04-19 16:46:15 +05:30
class_def_empty_body.py
class_def_missing_name.py
class_def_unclosed_type_param_list.py
class_type_params_py311.py [syntax-errors] Type parameter lists before Python 3.12 (#16479) 2025-03-05 13:19:09 +00:00
clause_expect_indented_block.py
clause_expect_single_statement.py
comma_separated_missing_comma.py Implement re-lexing logic for better error recovery (#11845) 2024-06-17 06:47:00 +00:00
comma_separated_missing_comma_between_elements.py Implement re-lexing logic for better error recovery (#11845) 2024-06-17 06:47:00 +00:00
comma_separated_missing_element_between_commas.py Implement re-lexing logic for better error recovery (#11845) 2024-06-17 06:47:00 +00:00
comma_separated_missing_first_element.py Implement re-lexing logic for better error recovery (#11845) 2024-06-17 06:47:00 +00:00
comprehension_missing_for_after_async.py
decorator_expression_py38.py [syntax-errors] Named expressions in decorators before Python 3.9 (#16386) 2025-03-05 17:08:18 +00:00
decorator_invalid_expression.py
decorator_missing_expression.py
decorator_missing_newline.py
decorator_named_expression_py37.py [syntax-errors] Named expressions in decorators before Python 3.9 (#16386) 2025-03-05 17:08:18 +00:00
decorator_unexpected_token.py
del_incomplete_target.py
del_stmt_empty.py
dotted_name_multiple_dots.py
except_star_py310.py [syntax-errors] Limit except* range to * (#16473) 2025-03-04 16:50:09 +00:00
except_stmt_invalid_expression.py
except_stmt_missing_as_name.py
except_stmt_missing_exception.py
except_stmt_missing_exception_and_as_name.py
except_stmt_unparenthesized_tuple.py
f_string_empty_expression.py
f_string_invalid_conversion_flag_name_tok.py
f_string_invalid_conversion_flag_other_tok.py
f_string_invalid_starred_expr.py
f_string_lambda_without_parentheses.py
f_string_unclosed_lbrace.py
f_string_unclosed_lbrace_in_format_spec.py
for_iter_unpack_py38.py [syntax-errors] Tuple unpacking in for statement iterator clause before Python 3.9 (#16558) 2025-03-13 15:55:17 -04:00
for_stmt_invalid_iter_expr.py
for_stmt_invalid_target.py Add ExpressionContext for expression parsing (#11055) 2024-04-23 04:19:05 +00:00
for_stmt_invalid_target_binary_expr.py Add ExpressionContext for expression parsing (#11055) 2024-04-23 04:19:05 +00:00
for_stmt_invalid_target_in_keyword.py Add ExpressionContext for expression parsing (#11055) 2024-04-23 04:19:05 +00:00
for_stmt_missing_in_keyword.py
for_stmt_missing_iter.py
for_stmt_missing_target.py
from_import_dotted_names.py
from_import_empty_names.py
from_import_missing_module.py
from_import_missing_rpar.py
from_import_star_with_other_names.py
from_import_unparenthesized_trailing_comma.py
function_def_empty_body.py
function_def_invalid_return_expr.py
function_def_missing_identifier.py
function_def_missing_return_type.py
function_def_unclosed_parameter_list.py
function_def_unclosed_type_param_list.py
function_def_unparenthesized_return_types.py
function_type_params_py311.py [syntax-errors] Type parameter lists before Python 3.12 (#16479) 2025-03-05 13:19:09 +00:00
global_stmt_empty.py
global_stmt_expression.py
global_stmt_trailing_comma.py
if_stmt_elif_missing_colon.py
if_stmt_empty_body.py
if_stmt_invalid_elif_test_expr.py
if_stmt_invalid_test_expr.py
if_stmt_missing_colon.py
if_stmt_missing_test.py
if_stmt_misspelled_elif.py
implicitly_concatenated_unterminated_string.py
implicitly_concatenated_unterminated_string_multiline.py
import_alias_missing_asname.py
import_stmt_empty.py
import_stmt_parenthesized_names.py
import_stmt_star_import.py
import_stmt_trailing_comma.py
invalid_byte_literal.py
invalid_del_target.py
invalid_fstring_literal_element.py
invalid_string_literal.py
iter_unpack_return_py37.py [syntax-errors] Tuple unpacking in return and yield before Python 3.8 (#16485) 2025-03-06 11:57:20 -05:00
iter_unpack_yield_py37.py [syntax-errors] Tuple unpacking in return and yield before Python 3.8 (#16485) 2025-03-06 11:57:20 -05:00
lambda_body_with_starred_expr.py
lambda_body_with_yield_expr.py
match_before_py310.py Allow passing ParseOptions to inline tests (#16357) 2025-02-27 10:23:15 -05:00
match_classify_as_keyword.py Maintain synchronicity between the lexer and the parser (#11457) 2024-06-03 18:23:50 +05:30
match_classify_as_keyword_or_identifier.py Maintain synchronicity between the lexer and the parser (#11457) 2024-06-03 18:23:50 +05:30
match_expected_colon.py Maintain synchronicity between the lexer and the parser (#11457) 2024-06-03 18:23:50 +05:30
match_stmt_expect_indented_block.py
match_stmt_expected_case_block.py
match_stmt_invalid_guard_expr.py
match_stmt_invalid_subject_expr.py
match_stmt_missing_guard_expr.py
match_stmt_missing_pattern.py Maintain synchronicity between the lexer and the parser (#11457) 2024-06-03 18:23:50 +05:30
match_stmt_no_newline_before_case.py
match_stmt_single_starred_subject.py
mixed_bytes_and_non_bytes_literals.py
multiple_clauses_on_same_line.py
named_expr_slice.py [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404) 2025-03-14 15:06:42 -04:00
named_expr_slice_parse_error.py [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404) 2025-03-14 15:06:42 -04:00
node_range_with_gaps.py Use empty range when there's "gap" in token source (#11032) 2024-04-19 11:36:26 +00:00
nonlocal_stmt_empty.py
nonlocal_stmt_expression.py
nonlocal_stmt_trailing_comma.py
param_missing_annotation.py
param_missing_default.py
param_with_invalid_annotation.py
param_with_invalid_default.py
param_with_invalid_star_annotation.py
param_with_star_annotation_py310.py [syntax-errors] Star annotations before Python 3.11 (#16545) 2025-03-14 15:20:44 +00:00
params_duplicate_names.py
params_expected_after_star_separator.py
params_kwarg_after_star_separator.py
params_multiple_kwargs.py
params_multiple_slash_separator.py
params_multiple_star_separator.py
params_multiple_varargs.py
params_no_arg_before_slash.py
params_non_default_after_default.py
params_star_after_slash.py
params_star_separator_after_star_param.py
params_var_keyword_with_default.py
params_var_positional_with_default.py
parenthesized_kwarg_py38.py [syntax-errors] Parenthesized keyword argument names after Python 3.8 (#16482) 2025-03-06 12:18:13 -05:00
pos_only_py37.py [syntax-errors] Positional-only parameters before Python 3.8 (#16481) 2025-03-05 13:46:43 +00:00
raise_stmt_from_without_exc.py Modify parsing of raise with cause when exception is absent (#15049) 2024-12-19 13:36:32 +00:00
raise_stmt_invalid_cause.py
raise_stmt_invalid_exc.py
raise_stmt_unparenthesized_tuple_cause.py
raise_stmt_unparenthesized_tuple_exc.py
return_stmt_invalid_expr.py
simple_and_compound_stmt_on_same_line.py
simple_and_compound_stmt_on_same_line_in_block.py
simple_stmts_on_same_line.py
simple_stmts_on_same_line_in_block.py
star_index_py310.py [syntax-errors] Star expression in index before Python 3.11 (#16544) 2025-03-14 14:51:34 +00:00
star_slices.py [syntax-errors] Star expression in index before Python 3.11 (#16544) 2025-03-14 14:51:34 +00:00
try_stmt_invalid_order.py
try_stmt_missing_except_finally.py
try_stmt_misspelled_except.py
try_stmt_mixed_except_kind.py Raise syntax error for mixing except and except* (#14895) 2024-12-10 17:50:55 -06:00
type_alias_incomplete_stmt.py
type_alias_invalid_value_expr.py
type_param_default_py312.py [syntax-errors] Type parameter defaults before Python 3.13 (#16447) 2025-03-04 16:53:38 +00:00
type_param_invalid_bound_expr.py
type_param_missing_bound.py
type_param_param_spec_bound.py
type_param_param_spec_invalid_default_expr.py Add support for PEP 696 syntax (#11120) 2024-04-26 09:47:29 +02:00
type_param_param_spec_missing_default.py Add support for PEP 696 syntax (#11120) 2024-04-26 09:47:29 +02:00
type_param_type_var_invalid_default_expr.py Add support for PEP 696 syntax (#11120) 2024-04-26 09:47:29 +02:00
type_param_type_var_missing_default.py Add support for PEP 696 syntax (#11120) 2024-04-26 09:47:29 +02:00
type_param_type_var_tuple_bound.py
type_param_type_var_tuple_invalid_default_expr.py Add support for PEP 696 syntax (#11120) 2024-04-26 09:47:29 +02:00
type_param_type_var_tuple_missing_default.py Add support for PEP 696 syntax (#11120) 2024-04-26 09:47:29 +02:00
type_params_empty.py Add syntax error for empty type parameter list (#12030) 2024-06-26 08:10:35 +05:30
type_stmt_py311.py [syntax-errors] type alias statements before Python 3.12 (#16478) 2025-03-04 17:20:10 +00:00
unparenthesized_named_expr_index_py38.py [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404) 2025-03-14 15:06:42 -04:00
unparenthesized_named_expr_set_comp_py38.py [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404) 2025-03-14 15:06:42 -04:00
unparenthesized_named_expr_set_literal_py38.py [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404) 2025-03-14 15:06:42 -04:00
unterminated_fstring_newline_recovery.py
walrus_py37.py [syntax-errors] Assignment expressions before Python 3.8 (#16383) 2025-02-28 17:13:46 -05:00
while_stmt_invalid_test_expr.py
while_stmt_missing_colon.py
while_stmt_missing_test.py
with_items_parenthesized_missing_colon.py Use speculative parsing for with-items (#11770) 2024-06-06 08:59:56 +00:00
with_items_parenthesized_missing_comma.py