mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
bpo-40334: Spacialized error message for invalid args after bare '*' (GH-19865)
When parsing things like `def f(*): pass` the old parser used to output `SyntaxError: named arguments must follow bare *`, which the new parser wasn't able to do.
This commit is contained in:
parent
c3f001461d
commit
e10e7c771b
5 changed files with 598 additions and 336 deletions
|
@ -249,6 +249,7 @@ star_etc[StarEtc*]:
|
|||
| '*' ',' b=param_maybe_default+ c=[kwds] {
|
||||
_PyPegen_star_etc(p, NULL, b, c) }
|
||||
| a=kwds { _PyPegen_star_etc(p, NULL, NULL, a) }
|
||||
| invalid_star_etc
|
||||
|
||||
kwds[arg_ty]: '**' a=param_no_default { a }
|
||||
|
||||
|
@ -356,6 +357,7 @@ lambda_star_etc[StarEtc*]:
|
|||
| '*' ',' b=lambda_param_maybe_default+ c=[lambda_kwds] {
|
||||
_PyPegen_star_etc(p, NULL, b, c) }
|
||||
| a=lambda_kwds { _PyPegen_star_etc(p, NULL, NULL, a) }
|
||||
| invalid_lambda_star_etc
|
||||
|
||||
lambda_kwds[arg_ty]: '**' a=lambda_param_no_default { a }
|
||||
|
||||
|
@ -636,6 +638,10 @@ invalid_comprehension:
|
|||
invalid_parameters:
|
||||
| param_no_default* (slash_with_default | param_with_default+) param_no_default {
|
||||
RAISE_SYNTAX_ERROR("non-default argument follows default argument") }
|
||||
invalid_star_etc:
|
||||
| '*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") }
|
||||
invalid_lambda_star_etc:
|
||||
| '*' (':' | ',' (':' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") }
|
||||
invalid_double_type_comments:
|
||||
| TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT {
|
||||
RAISE_SYNTAX_ERROR("Cannot have two type comments on def") }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue