From f85a68f4207fbd5528865c42e785d3dac99e3dcd Mon Sep 17 00:00:00 2001 From: Navpreet Sidhu Date: Sun, 25 Oct 2026 23:14:28 +0530 Subject: [PATCH] stubgen: keep explicit type aliases when TypeAlias comes from an unanalyzed module --- mypy/stubgen.py | 5 ++++- test-data/unit/stubgen.test | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/mypy/stubgen.py b/mypy/stubgen.py index fe90c3d256b7a..7cc4710561ecd 100755 --- a/mypy/stubgen.py +++ b/mypy/stubgen.py @@ -979,8 +979,11 @@ def visit_assignment_stmt(self, o: AssignmentStmt) -> None: and self.is_alias_expression(o.rvalue) and not self.is_private_name(lvalue.name) ): + alias_type = ( + o.unanalyzed_type if isinstance(get_proper_type(o.type), AnyType) else o.type + ) is_explicit_type_alias = ( - o.unanalyzed_type and getattr(o.type, "name", None) == "TypeAlias" + o.unanalyzed_type and getattr(alias_type, "name", None) == "TypeAlias" ) if is_explicit_type_alias: self.process_typealias(lvalue, o.rvalue, is_explicit_type_alias=True) diff --git a/test-data/unit/stubgen.test b/test-data/unit/stubgen.test index b4d8c7ec16977..fe567bb96e1d9 100644 --- a/test-data/unit/stubgen.test +++ b/test-data/unit/stubgen.test @@ -1604,6 +1604,17 @@ explicit_alias: TypeAlias = tuple[int, str] implicit_alias = list[int] +[case testExplicitTypeAliasFromUnanalyzedModule_semanal] +from compat import TypeAlias # type: ignore + +explicit_alias: TypeAlias = tuple[int, str] + +[out] +from compat import TypeAlias as TypeAlias + +explicit_alias: TypeAlias = tuple[int, str] + + [case testEllipsisAliasPreserved] alias = Tuple[int, ...]