diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-06-24 15:34:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-24 15:34:28 (GMT) |
commit | 11f1a30cdb59f9da0209798d2057f7afacbd9547 (patch) | |
tree | 7c9d8daaf844edde533e5d19744f64c258df4ad4 /Grammar | |
parent | b3fac2926b23b4f1342099e591aa3fed7f16876d (diff) | |
download | cpython-11f1a30cdb59f9da0209798d2057f7afacbd9547.zip cpython-11f1a30cdb59f9da0209798d2057f7afacbd9547.tar.gz cpython-11f1a30cdb59f9da0209798d2057f7afacbd9547.tar.bz2 |
bpo-44456: Improve the syntax error when mixing keyword and positional patterns (GH-26793)
(cherry picked from commit 0acc258fe6f0ec200ca2f6f9294adbf52a244802)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
Diffstat (limited to 'Grammar')
-rw-r--r-- | Grammar/python.gram | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Grammar/python.gram b/Grammar/python.gram index 56daca0..6b2fa6a 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -380,6 +380,7 @@ class_pattern[pattern_ty]: CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, keywords)))), CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, keywords)), EXTRA) } + | invalid_class_pattern positional_patterns[asdl_pattern_seq*]: | args[asdl_pattern_seq*]=','.pattern+ { args } keyword_patterns[asdl_seq*]: @@ -978,6 +979,13 @@ invalid_case_block: invalid_as_pattern: | or_pattern 'as' a="_" { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use '_' as a target") } | or_pattern 'as' !NAME a=expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "invalid pattern target") } +invalid_class_pattern: + | name_or_attr '(' a=invalid_class_argument_pattern { RAISE_SYNTAX_ERROR_KNOWN_RANGE( + PyPegen_first_item(a, pattern_ty), + PyPegen_last_item(a, pattern_ty), + "positional patterns follow keyword patterns") } +invalid_class_argument_pattern[asdl_pattern_seq*]: + | [positional_patterns ','] keyword_patterns ',' a=positional_patterns { a } invalid_if_stmt: | 'if' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } | a='if' a=named_expression ':' NEWLINE !INDENT { |