@@ -2303,3 +2303,38 @@ reveal_type(capture(fn)) # N: Revealed type is "Union[builtins.str, builtins.in
23032303reveal_type(capture(err)) # N: Revealed type is "builtins.int"
23042304
23052305[builtins fixtures/paramspec.pyi]
2306+
2307+ [case testRunParamSpecOverlappingOverloadsOrder]
2308+ from typing import Any, Callable, overload
2309+ from typing_extensions import ParamSpec
2310+
2311+ P = ParamSpec("P")
2312+
2313+ class Base:
2314+ pass
2315+ class Child(Base):
2316+ def __call__(self) -> str: ...
2317+ class NotChild:
2318+ def __call__(self) -> str: ...
2319+
2320+ @overload
2321+ def handle(func: Base) -> int: ...
2322+ @overload
2323+ def handle(func: Callable[P, str], *args: P.args, **kwargs: P.kwargs) -> str: ...
2324+ def handle(func: Any, *args: Any, **kwargs: Any) -> Any:
2325+ return func(*args, **kwargs)
2326+
2327+ @overload
2328+ def handle_reversed(func: Callable[P, str], *args: P.args, **kwargs: P.kwargs) -> str: ...
2329+ @overload
2330+ def handle_reversed(func: Base) -> int: ...
2331+ def handle_reversed(func: Any, *args: Any, **kwargs: Any) -> Any:
2332+ return func(*args, **kwargs)
2333+
2334+ reveal_type(handle(Child())) # N: Revealed type is "builtins.int"
2335+ reveal_type(handle(NotChild())) # N: Revealed type is "builtins.str"
2336+
2337+ reveal_type(handle_reversed(Child())) # N: Revealed type is "builtins.str"
2338+ reveal_type(handle_reversed(NotChild())) # N: Revealed type is "builtins.str"
2339+
2340+ [builtins fixtures/paramspec.pyi]
0 commit comments