Skip to content

Commit 8f4c840

Browse files
authored
Fix crash in new-style type alias with variadic unpack (#21551)
Fixes #20913 Closes #20931 Fix is trivial, don't fix what is already valid (since `fix_instance()` has some implicit assumptions) like we already do for old-style aliases.
1 parent 938dbe2 commit 8f4c840

2 files changed

Lines changed: 17 additions & 1 deletion

File tree

mypy/semanal.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5771,7 +5771,10 @@ def visit_type_alias_stmt(self, s: TypeAliasStmt) -> None:
57715771
res = make_any_non_unimported(res)
57725772
eager = self.is_func_scope()
57735773
if isinstance(res, ProperType) and isinstance(res, Instance):
5774-
fix_instance(res, self.fail, self.note, disallow_any=False, options=self.options)
5774+
if not validate_instance(res, self.fail, indexed):
5775+
fix_instance(
5776+
res, self.fail, self.note, disallow_any=False, options=self.options
5777+
)
57755778
alias_node = TypeAlias(
57765779
res,
57775780
self.qualified_name(s.name.name),

test-data/unit/check-python312.test

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2280,3 +2280,16 @@ class D[*Ts](Generic[Unpack[Us]]): # E: Generic[...] base class is redundant \
22802280
# E: Can only use one type var tuple in a class def
22812281
pass
22822282
[builtins fixtures/tuple.pyi]
2283+
2284+
[case testPEP695VariadicAliasUnpack]
2285+
class C[*Ts]:
2286+
pass
2287+
2288+
type T[T, *Ts] = C[*Ts]
2289+
2290+
x: T[bool, *tuple[()]]
2291+
reveal_type(x) # N: Revealed type is "__main__.C[()]"
2292+
2293+
y: T[bool]
2294+
reveal_type(y) # N: Revealed type is "__main__.C[()]"
2295+
[builtins fixtures/tuple.pyi]

0 commit comments

Comments
 (0)