From 79ece1c7c1037b243084e9eb86a3884f3dafaf50 Mon Sep 17 00:00:00 2001 From: David Peter Date: Mon, 29 Sep 2025 16:34:09 +0200 Subject: [PATCH] [ty] Add tests for nested generic functions --- .../resources/mdtest/generics/legacy/functions.md | 8 ++++++++ .../resources/mdtest/generics/pep695/functions.md | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md b/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md index 3175ed7216dce..50a5be70584af 100644 --- a/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md +++ b/crates/ty_python_semantic/resources/mdtest/generics/legacy/functions.md @@ -464,6 +464,7 @@ def f(x: str): from typing import TypeVar, overload T = TypeVar("T") +S = TypeVar("S") def outer(t: T) -> None: def inner(t: T) -> None: ... @@ -479,6 +480,13 @@ def overloaded_outer(t: T | None = None) -> None: if t is not None: inner(t) + +def outer(t: T) -> None: + def inner(inner_t: T, s: S) -> tuple[T, S]: + return inner_t, s + reveal_type(inner(t, 1)) # revealed: tuple[T@outer, Literal[1]] + + inner("wrong", 1) # error: [invalid-argument-type] ``` ## Unpacking a TypeVar diff --git a/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md b/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md index a9224d46c800a..2b72600cea6aa 100644 --- a/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md +++ b/crates/ty_python_semantic/resources/mdtest/generics/pep695/functions.md @@ -474,6 +474,13 @@ def overloaded_outer[T](t: T | None = None) -> None: if t is not None: inner(t) + +def outer[T](t: T) -> None: + def inner[S](inner_t: T, s: S) -> tuple[T, S]: + return inner_t, s + reveal_type(inner(t, 1)) # revealed: tuple[T@outer, Literal[1]] + + inner("wrong", 1) # error: [invalid-argument-type] ``` ## Unpacking a TypeVar