Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Grammar/python.gram
Original file line number Diff line number Diff line change
Expand Up @@ -638,8 +638,13 @@ type_alias[stmt_ty]:
# Type parameter declaration
# --------------------------

type_params[asdl_type_param_seq*]: '[' t=type_param_seq ']' {
type_params[asdl_type_param_seq*]:
| '[' t=type_param_seq ']' {
CHECK_VERSION(asdl_type_param_seq *, 12, "Type parameter lists are", t) }
| '[' token=']' {
RAISE_SYNTAX_ERROR_STARTING_FROM(
token,
"Type parameter list cannot be empty")}

type_param_seq[asdl_type_param_seq*]: a[asdl_type_param_seq*]=','.type_param+ [','] { a }

Expand Down
15 changes: 15 additions & 0 deletions Lib/test/test_syntax.py
Original file line number Diff line number Diff line change
Expand Up @@ -2015,6 +2015,21 @@ def f(x: *b)

Invalid expressions in type scopes:

>>> type A[] = int
Traceback (most recent call last):
...
SyntaxError: Type parameter list cannot be empty

>>> class A[]: ...
Traceback (most recent call last):
...
SyntaxError: Type parameter list cannot be empty

>>> def some[](): ...
Traceback (most recent call last):
...
SyntaxError: Type parameter list cannot be empty

>>> type A[T: (x:=3)] = int
Traceback (most recent call last):
...
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Improve :exc:`SyntaxError` message for empty type param brackets.
29 changes: 28 additions & 1 deletion Parser/parser.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.