2Tests basic usage of ParamSpec.
5# Specification: https://typing.readthedocs.io/en/latest/spec/generics.html#paramspec-variables
7from typing import Any, Callable, Concatenate, ParamSpec, TypeAlias
10WrongName = ParamSpec("NotIt") # E: name inconsistency
Expected a ty diagnostic for this line
13# > Valid use locations
[invalid-type-form] Bare ParamSpec `P` is not valid in this context in a type alias value
17TA2: TypeAlias = Callable[P, None] # OK
18TA3: TypeAlias = Callable[Concatenate[int, P], None] # OK
19TA4: TypeAlias = Callable[..., None] # OK
20TA5: TypeAlias = Callable[..., None] # OK
23def func1(x: P) -> P: # E
[invalid-type-form] Bare ParamSpec `P` is not valid in this context in a parameter annotation
[invalid-type-form] Bare ParamSpec `P` is not valid in this context in a return type annotation
24 raise NotImplementedError
27def func2(x: Concatenate[int, P]) -> int: # E
[invalid-type-form] `typing.Concatenate` is not allowed in this context in a parameter annotation
28 raise NotImplementedError
31def func3(x: list[P]) -> None: # E
[invalid-type-arguments] ParamSpec `P` cannot be used to specialize type variable `_T`
35def func4(x: Callable[[int, str], P]) -> None: # E
[invalid-type-form] Bare ParamSpec `P` is not valid in this context in a parameter annotation
39def func5(*args: P, **kwargs: P) -> None: # E
[invalid-type-form] Bare ParamSpec `P` is not valid in this context in a parameter annotation
[invalid-type-form] Bare ParamSpec `P` is not valid in this context in a parameter annotation