← Back to index

generics_paramspec_basic.py

True Positive
False Positive
False Negative
Optional (detected)
Warning or Info
TP: 6
FP: 0
FN: 1
Optional: 0 / 0
1"""
2Tests basic usage of ParamSpec.
3"""
4
5# Specification: https://typing.readthedocs.io/en/latest/spec/generics.html#paramspec-variables
6
7from typing import Any, Callable, Concatenate, ParamSpec, TypeAlias
8
9P = ParamSpec("P") # OK
10WrongName = ParamSpec("NotIt") # E: name inconsistency
Expected a ty diagnostic for this line
13# > Valid use locations
15TA1: TypeAlias = P # E
[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`
32 ...
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
36 ...
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
40 ...