ruff/crates/ruff_python_parser/resources/inline/err
Brent Westbrook dcf31c9348
[syntax-errors] PEP 701 f-strings before Python 3.12 (#16543)
## Summary

This PR detects the use of PEP 701 f-strings before 3.12. This one
sounded difficult and ended up being pretty easy, so I think there's a
good chance I've over-simplified things. However, from experimenting in
the Python REPL and checking with [pyright], I think this is correct.
pyright actually doesn't even flag the comment case, but Python does.

I also checked pyright's implementation for
[quotes](98dc4469cc/packages/pyright-internal/src/analyzer/checker.ts (L1379-L1398))
and
[escapes](98dc4469cc/packages/pyright-internal/src/analyzer/checker.ts (L1365-L1377))
and think I've approximated how they do it.

Python's error messages also point to the simple approach of these
characters simply not being allowed:

```pycon
Python 3.11.11 (main, Feb 12 2025, 14:51:05) [Clang 19.1.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> f'''multiline {
... expression # comment
... }'''
  File "<stdin>", line 3
    }'''
        ^
SyntaxError: f-string expression part cannot include '#'
>>> f'''{not a line \
... continuation}'''
  File "<stdin>", line 2
    continuation}'''
                    ^
SyntaxError: f-string expression part cannot include a backslash
>>> f'hello {'world'}'
  File "<stdin>", line 1
    f'hello {'world'}'
              ^^^^^
SyntaxError: f-string: expecting '}'
```

And since escapes aren't allowed, I don't think there are any tricky
cases where nested quotes or comments can sneak in.

It's also slightly annoying that the error is repeated for every nested
quote character, but that also mirrors pyright, although they highlight
the whole nested string, which is a little nicer. However, their check
is in the analysis phase, so I don't think we have such easy access to
the quoted range, at least without adding another mini visitor.

## Test Plan

New inline tests

[pyright]:
https://pyright-play.net/?pythonVersion=3.11&strict=true&code=EYQw5gBAvBAmCWBjALgCgO4gHaygRgEoAoEaCAIgBpyiiBiCLAUwGdknYIBHAVwHt2LIgDMA5AFlwSCJhwAuCAG8IoMAG1Rs2KIC6EAL6iIxosbPmLlq5foRWiEAAcmERAAsQAJxAomnltY2wuSKogA6WKIAdABWfPBYqCAE%2BuSBVqbpWVm2iHwAtvlMWMgB2ekiolUAgq4FjgA2TAAeEMieSADWCsoV5qoaqrrGDJ5MiDz%2B8ABuLqosAIREhlXlaybrmyYMXsDw7V4AnoysyAmQ5SIhwYo3d9cheADUeKlv5O%2BpQA
2025-03-18 11:12:15 -04:00
..
ann_assign_stmt_invalid_annotation.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
ann_assign_stmt_invalid_target.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
ann_assign_stmt_invalid_value.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
ann_assign_stmt_missing_rhs.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
ann_assign_stmt_type_alias_annotation.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assert_empty_test.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assert_invalid_msg_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assert_invalid_test_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assign_stmt_invalid_target.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assign_stmt_invalid_value_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assign_stmt_keyword_target.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
assign_stmt_missing_rhs.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
aug_assign_stmt_invalid_value.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
aug_assign_stmt_missing_rhs.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
class_def_missing_name.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
class_def_unclosed_type_param_list.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
clause_expect_single_statement.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
decorator_await_expression_py38.py [syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors (#16581) 2025-03-17 11:17:27 +00:00
decorator_dict_literal_py38.py [syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors (#16581) 2025-03-17 11:17:27 +00:00
decorator_expression_py38.py [syntax-errors] Named expressions in decorators before Python 3.9 (#16386) 2025-03-05 17:08:18 +00:00
decorator_float_literal_py38.py [syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors (#16581) 2025-03-17 11:17:27 +00:00
decorator_invalid_expression.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
decorator_missing_expression.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
decorator_missing_newline.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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_non_toplevel_call_expression_py38.py [syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors (#16581) 2025-03-17 11:17:27 +00:00
decorator_unexpected_token.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
del_incomplete_target.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
del_stmt_empty.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
dotted_name_multiple_dots.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
except_star_py310.py [syntax-errors] Limit except* range to * (#16473) 2025-03-04 16:50:09 +00:00
except_stmt_invalid_expression.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
except_stmt_missing_as_name.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
except_stmt_missing_exception.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
except_stmt_missing_exception_and_as_name.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
except_stmt_unparenthesized_tuple.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_empty_expression.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_invalid_conversion_flag_name_tok.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_invalid_conversion_flag_other_tok.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_invalid_starred_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_lambda_without_parentheses.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_unclosed_lbrace.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
f_string_unclosed_lbrace_in_format_spec.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
for_stmt_missing_iter.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
for_stmt_missing_target.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
from_import_dotted_names.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
from_import_empty_names.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
from_import_missing_module.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
from_import_missing_rpar.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
from_import_star_with_other_names.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
from_import_unparenthesized_trailing_comma.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_empty_body.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_invalid_return_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_missing_identifier.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_missing_return_type.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_unclosed_parameter_list.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_unclosed_type_param_list.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
function_def_unparenthesized_return_types.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
global_stmt_expression.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
global_stmt_trailing_comma.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_elif_missing_colon.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_empty_body.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_invalid_elif_test_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_invalid_test_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_missing_colon.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_missing_test.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
if_stmt_misspelled_elif.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
implicitly_concatenated_unterminated_string.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
implicitly_concatenated_unterminated_string_multiline.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
import_alias_missing_asname.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
import_stmt_empty.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
import_stmt_parenthesized_names.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
import_stmt_star_import.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
import_stmt_trailing_comma.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
invalid_byte_literal.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
invalid_del_target.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
invalid_fstring_literal_element.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
invalid_string_literal.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
lambda_body_with_yield_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
match_stmt_expected_case_block.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
match_stmt_invalid_guard_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
match_stmt_invalid_subject_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
match_stmt_missing_guard_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
match_stmt_single_starred_subject.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
mixed_bytes_and_non_bytes_literals.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
multiple_clauses_on_same_line.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
nonlocal_stmt_expression.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
nonlocal_stmt_trailing_comma.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
param_missing_annotation.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
param_missing_default.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
param_with_invalid_annotation.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
param_with_invalid_default.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
param_with_invalid_star_annotation.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_expected_after_star_separator.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_kwarg_after_star_separator.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_multiple_kwargs.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_multiple_slash_separator.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_multiple_star_separator.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_multiple_varargs.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_no_arg_before_slash.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_non_default_after_default.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_star_after_slash.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_star_separator_after_star_param.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_var_keyword_with_default.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
params_var_positional_with_default.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
parenthesized_context_manager_py38.py [syntax-errors] Parenthesized context managers before Python 3.9 (#16523) 2025-03-17 08:54:55 -04:00
parenthesized_kwarg_py38.py [syntax-errors] Parenthesized keyword argument names after Python 3.8 (#16482) 2025-03-06 12:18:13 -05:00
pep701_f_string_py311.py [syntax-errors] PEP 701 f-strings before Python 3.12 (#16543) 2025-03-18 11:12:15 -04: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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
raise_stmt_invalid_exc.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
raise_stmt_unparenthesized_tuple_cause.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
raise_stmt_unparenthesized_tuple_exc.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
return_stmt_invalid_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
simple_and_compound_stmt_on_same_line.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
simple_and_compound_stmt_on_same_line_in_block.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
simple_stmts_on_same_line.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
simple_stmts_on_same_line_in_block.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
try_stmt_missing_except_finally.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
try_stmt_misspelled_except.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
try_stmt_mixed_except_kind.py Raise syntax error for mixing except and except* (#14895) 2024-12-10 17:50:55 -06:00
tuple_context_manager_py38.py [syntax-errors] Parenthesized context managers before Python 3.9 (#16523) 2025-03-17 08:54:55 -04:00
type_alias_incomplete_stmt.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
type_alias_invalid_value_expr.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
type_param_missing_bound.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
type_param_param_spec_bound.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
while_stmt_missing_colon.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
while_stmt_missing_test.py Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30
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 Replace LALRPOP parser with hand-written parser (#10036) 2024-04-18 17:57:39 +05:30