Python: Allow list_splats as type annotations

That is, the `*T` in `def foo(*args : *T): ...`.

This is apparently a piece of syntax we did not support correctly until
now.

In terms of the grammar, we simply add `list_splat` as a possible
alternative for `type` (which could previously only be an `expression`).
We also update `python.tsg` to not specify `expression` those places (as
the relevant stanzas will then not work for `list_splat`s).

This syntax is not supported by the old parser, hence we only add a new
parser test for it.
This commit is contained in:
Taus
2024-10-22 15:17:12 +00:00
parent fcec8e0256
commit 8053e0ed44
4 changed files with 49 additions and 6 deletions

View File

@@ -0,0 +1,41 @@
Module: [1, 0] - [3, 0]
body: [
Assign: [1, 0] - [1, 42]
targets: [
Name: [1, 4] - [1, 26]
variable: Variable('tuple_typed_list_splat', None)
ctx: Store
]
value:
FunctionExpr: [1, 0] - [1, 42]
name: 'tuple_typed_list_splat'
args:
arguments
defaults: []
kw_defaults: []
annotations: []
varargannotation:
Starred: [1, 35] - [1, 40]
value:
Name: [1, 36] - [1, 40]
variable: Variable('ARGS', None)
ctx: Load
ctx: Load
kwargannotation: None
kw_annotations: []
returns: None
inner_scope:
Function: [1, 0] - [1, 42]
name: 'tuple_typed_list_splat'
type_parameters: []
args: []
vararg:
Name: [1, 28] - [1, 32]
variable: Variable('args', None)
ctx: Param
kwonlyargs: []
kwarg: None
body: [
Pass: [2, 4] - [2, 8]
]
]

View File

@@ -0,0 +1,2 @@
def tuple_typed_list_splat(*args : *ARGS):
pass