Handle PEP 613 aliases as well

This commit is contained in:
David Peter 2025-11-24 13:15:11 +01:00
parent f40ab81093
commit 343c6b6287
2 changed files with 23 additions and 0 deletions

View File

@ -96,6 +96,24 @@ def _(x: MyAlias):
reveal_type(x) # revealed: int | ((str, /) -> int) 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: <class 'list[T]'>
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 ## Subscripted generic alias in union
```py ```py

View File

@ -5531,11 +5531,16 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.deferred_state = DeferredExpressionState::Deferred; 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( let inferred_ty = self.infer_maybe_standalone_expression(
value, value,
TypeContext::new(Some(declared.inner_type())), TypeContext::new(Some(declared.inner_type())),
); );
self.typevar_binding_context = previous_typevar_binding_context;
self.deferred_state = previous_deferred_state; self.deferred_state = previous_deferred_state;
self.dataclass_field_specifiers.clear(); self.dataclass_field_specifiers.clear();