Add support for PEP 696 syntax (#11120)

This commit is contained in:
Jelle Zijlstra 2024-04-26 00:47:29 -07:00 committed by GitHub
parent 45725d3275
commit cd3e319538
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
49 changed files with 4338 additions and 669 deletions

View file

@ -0,0 +1,5 @@
type X[**P = *int] = int
type X[**P = yield x] = int
type X[**P = yield from x] = int
type X[**P = x := int] = int
type X[**P = *int] = int

View file

@ -0,0 +1,2 @@
type X[**P =] = int
type X[**P =, T2] = int

View file

@ -0,0 +1,6 @@
type X[T = *int] = int
type X[T = yield x] = int
type X[T = (yield x)] = int
type X[T = yield from x] = int
type X[T = x := int] = int
type X[T: int = *int] = int

View file

@ -0,0 +1,3 @@
type X[T =] = int
type X[T: int =] = int
type X[T1 =, T2] = int

View file

@ -0,0 +1,5 @@
type X[*Ts = *int] = int
type X[*Ts = *int or str] = int
type X[*Ts = yield x] = int
type X[*Ts = yield from x] = int
type X[*Ts = x := int] = int

View file

@ -0,0 +1,2 @@
type X[*Ts =] = int
type X[*Ts =, T2] = int

View file

@ -0,0 +1,4 @@
type X[**P] = int
type X[**P = int] = int
type X[T, **P] = int
type X[T, **P = int] = int

View file

@ -0,0 +1,5 @@
type X[T] = int
type X[T = int] = int
type X[T: int = int] = int
type X[T: (int, int) = int] = int
type X[T: int = int, U: (int, int) = int] = int

View file

@ -0,0 +1,5 @@
type X[*Ts] = int
type X[*Ts = int] = int
type X[*Ts = *int] = int
type X[T, *Ts] = int
type X[T, *Ts = int] = int

View file

@ -29,9 +29,15 @@ class Test(A, B):
# TypeVar
class Test[T](): ...
# TypeVar with default
class Test[T = str](): ...
# TypeVar with bound
class Test[T: str](): ...
# TypeVar with bound and default
class Test[T: int | str = int](): ...
# TypeVar with tuple bound
class Test[T: (str, bytes)](): ...
@ -44,9 +50,18 @@ class Test[T, U,](): ...
# TypeVarTuple
class Test[*Ts](): ...
# TypeVarTuple with default
class Test[*Ts = Unpack[tuple[int, str]]](): ...
# TypeVarTuple with starred default
class Test[*Ts = *tuple[int, str]](): ...
# ParamSpec
class Test[**P](): ...
# ParamSpec with default
class Test[**P = [int, str]](): ...
# Mixed types
class Test[X, Y: str, *U, **P]():
pass

View file

@ -7,6 +7,10 @@ type X[T] = list[T] | set[T]
type X[T, *Ts, **P] = (T, Ts, P)
type X[T: int, *Ts, **P] = (T, Ts, P)
type X[T: (int, str), *Ts, **P] = (T, Ts, P)
type X[T = int] = T | str
type X[T: int | str = int] = T | int | str
type X[*Ts = *tuple[int, str]] = tuple[int, *Ts, str]
type X[**P = [int, str]] = Callable[P, str]
# Soft keyword as alias name
type type = int