mirror of https://github.com/python/cpython
bpo-45450: Improve syntax error for parenthesized arguments (GH-28906)
This commit is contained in:
parent
9852339145
commit
7a1d932528
|
@ -1140,12 +1140,16 @@ invalid_dict_comprehension:
|
||||||
invalid_parameters:
|
invalid_parameters:
|
||||||
| param_no_default* invalid_parameters_helper a=param_no_default {
|
| param_no_default* invalid_parameters_helper a=param_no_default {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "non-default argument follows default argument") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "non-default argument follows default argument") }
|
||||||
|
| param_no_default* a='(' param_no_default+ ','? b=')' {
|
||||||
|
RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "Function parameters cannot be parenthesized") }
|
||||||
invalid_parameters_helper: # This is only there to avoid type errors
|
invalid_parameters_helper: # This is only there to avoid type errors
|
||||||
| a=slash_with_default { _PyPegen_singleton_seq(p, a) }
|
| a=slash_with_default { _PyPegen_singleton_seq(p, a) }
|
||||||
| param_with_default+
|
| param_with_default+
|
||||||
invalid_lambda_parameters:
|
invalid_lambda_parameters:
|
||||||
| lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default {
|
| lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "non-default argument follows default argument") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "non-default argument follows default argument") }
|
||||||
|
| lambda_param_no_default* a='(' ','.lambda_param+ ','? b=')' {
|
||||||
|
RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "Lambda expression parameters cannot be parenthesized") }
|
||||||
invalid_lambda_parameters_helper:
|
invalid_lambda_parameters_helper:
|
||||||
| a=lambda_slash_with_default { _PyPegen_singleton_seq(p, a) }
|
| a=lambda_slash_with_default { _PyPegen_singleton_seq(p, a) }
|
||||||
| lambda_param_with_default+
|
| lambda_param_with_default+
|
||||||
|
|
|
@ -909,6 +909,44 @@ Missing parens after function definition
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: expected '('
|
SyntaxError: expected '('
|
||||||
|
|
||||||
|
Parenthesized arguments in function definitions
|
||||||
|
|
||||||
|
>>> def f(x, (y, z), w):
|
||||||
|
... pass
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Function parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> def f((x, y, z, w)):
|
||||||
|
... pass
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Function parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> def f(x, (y, z, w)):
|
||||||
|
... pass
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Function parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> def f((x, y, z), w):
|
||||||
|
... pass
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Function parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> lambda x, (y, z), w: None
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Lambda expression parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> lambda (x, y, z, w): None
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Lambda expression parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> lambda x, (y, z, w): None
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Lambda expression parameters cannot be parenthesized
|
||||||
|
|
||||||
|
>>> lambda (x, y, z), w: None
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Lambda expression parameters cannot be parenthesized
|
||||||
|
|
||||||
Custom error messages for try blocks that are not followed by except/finally
|
Custom error messages for try blocks that are not followed by except/finally
|
||||||
|
|
||||||
>>> try:
|
>>> try:
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Improve the syntax error message for parenthesized arguments. Patch by Pablo
|
||||||
|
Galindo.
|
1294
Parser/parser.c
1294
Parser/parser.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue