diff --git a/crates/ty_python_semantic/resources/mdtest/pep613_type_aliases.md b/crates/ty_python_semantic/resources/mdtest/pep613_type_aliases.md index 13f05ddd5d..d227087d65 100644 --- a/crates/ty_python_semantic/resources/mdtest/pep613_type_aliases.md +++ b/crates/ty_python_semantic/resources/mdtest/pep613_type_aliases.md @@ -96,6 +96,24 @@ def _(x: MyAlias): reveal_type(x) # revealed: int | ((str, /) -> int) ``` +## Generic aliases + +```py +from typing import TypeAlias, TypeVar + +T = TypeVar("T") + +MyList: TypeAlias = list[T] +ListOrSet: TypeAlias = list[T] | set[T] + +reveal_type(MyList) # revealed: +reveal_type(ListOrSet) # revealed: types.UnionType + +def _(list_of_int: MyList[int], list_or_set_of_str: ListOrSet[str]): + reveal_type(list_of_int) # revealed: list[int] + reveal_type(list_or_set_of_str) # revealed: list[str] | set[str] +``` + ## Subscripted generic alias in union ```py diff --git a/crates/ty_python_semantic/src/types/infer/builder.rs b/crates/ty_python_semantic/src/types/infer/builder.rs index 2203c9e537..88404120ba 100644 --- a/crates/ty_python_semantic/src/types/infer/builder.rs +++ b/crates/ty_python_semantic/src/types/infer/builder.rs @@ -5531,11 +5531,16 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> { self.deferred_state = DeferredExpressionState::Deferred; } + let previous_typevar_binding_context = self.typevar_binding_context; + self.typevar_binding_context = Some(definition); + let inferred_ty = self.infer_maybe_standalone_expression( value, TypeContext::new(Some(declared.inner_type())), ); + self.typevar_binding_context = previous_typevar_binding_context; + self.deferred_state = previous_deferred_state; self.dataclass_field_specifiers.clear();