@@ -2680,6 +2680,33 @@ reveal_type(SneakyPrefix(f10, 1, '', '').args) # N: Revealed type is "Union[tup
26802680reveal_type(Sneaky(f11).args) # N: Revealed type is "Union[tuple[()], tuple[builtins.int]]"
26812681[builtins fixtures/paramspec.pyi]
26822682
2683+ [case testRevealBoundParamSpecGeneric]
2684+ from typing import Callable, Generic, ParamSpec, TypeVar
2685+ from typing_extensions import TypeVarTuple, Unpack
2686+
2687+ T = TypeVar("T")
2688+ P = ParamSpec("P")
2689+ Ts = TypeVarTuple("Ts")
2690+
2691+ class SplitSneaky(Generic[P]):
2692+ def __init__(self, target: Callable[P, None]) -> None:
2693+ ...
2694+
2695+ def run(self, *args: P.args, **kwargs: P.kwargs) -> None:
2696+ self.args = args
2697+ self.kwargs = kwargs
2698+
2699+ def f1(x: T) -> None: ...
2700+ def f2(*xs: Unpack[Ts]) -> None: ...
2701+ def f3(fn: Callable[P, None]) -> None: ...
2702+
2703+ reveal_type(SplitSneaky(f1).args) # N: Revealed type is "builtins.tuple[builtins.object, ...]"
2704+ reveal_type(SplitSneaky(f1).kwargs) # N: Revealed type is "builtins.dict[builtins.str, builtins.object]"
2705+ reveal_type(SplitSneaky(f2).args) # N: Revealed type is "builtins.tuple[builtins.object, ...]"
2706+ reveal_type(SplitSneaky(f2).kwargs) # N: Revealed type is "builtins.dict[builtins.str, builtins.object]"
2707+ reveal_type(SplitSneaky(f3).args) # N: Revealed type is "builtins.tuple[builtins.object, ...]"
2708+ reveal_type(SplitSneaky(f3).kwargs) # N: Revealed type is "builtins.dict[builtins.str, builtins.object]"
2709+ [builtins fixtures/paramspec.pyi]
26832710
26842711[case testRevealBoundParamSpecKwargs]
26852712from typing import Callable, Generic, ParamSpec
0 commit comments