From 510a89d584cce0932743d29f4614b2af8a7bf7a2 Mon Sep 17 00:00:00 2001 From: Randolf Scholz Date: Tue, 15 Jul 2025 14:08:45 +0200 Subject: [PATCH] initial commit + revert debugging --- mypy/expandtype.py | 12 ++++++++---- test-data/unit/check-typevar-defaults.test | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/mypy/expandtype.py b/mypy/expandtype.py index d27105f48ed3..100dc94c8639 100644 --- a/mypy/expandtype.py +++ b/mypy/expandtype.py @@ -246,10 +246,14 @@ def visit_type_var(self, t: TypeVarType) -> Type: if (tvar_id := repl.id) in self.recursive_tvar_guard: return self.recursive_tvar_guard[tvar_id] or repl self.recursive_tvar_guard[tvar_id] = None - repl = repl.accept(self) - if isinstance(repl, TypeVarType): - repl.default = repl.default.accept(self) - self.recursive_tvar_guard[tvar_id] = repl + expanded = repl.accept(self) + + if isinstance(expanded, TypeVarType): + expanded.default = expanded.default.accept(self) + else: + repl = expanded + + self.recursive_tvar_guard[tvar_id] = expanded return repl def visit_param_spec(self, t: ParamSpecType) -> Type: diff --git a/test-data/unit/check-typevar-defaults.test b/test-data/unit/check-typevar-defaults.test index 22270e17787e..b90a3d5789d1 100644 --- a/test-data/unit/check-typevar-defaults.test +++ b/test-data/unit/check-typevar-defaults.test @@ -416,6 +416,24 @@ def func_c4( reveal_type(m) # N: Revealed type is "__main__.ClassC4[builtins.int, builtins.float]" [builtins fixtures/tuple.pyi] +[case testTypeVarDefaultsSwap] +from typing import TypeVar, Generic + +T = TypeVar("T") +X = TypeVar("X", default=object) +Y = TypeVar("Y", default=object) + + +class Foo(Generic[T, Y]): + def test(self) -> None: + reveal_type( Foo[Y, T]() ) # N: Revealed type is "__main__.Foo[Y`2 = builtins.object, T`1]" + + +class Bar(Generic[X, Y]): + def test(self) -> None: + reveal_type( Bar[Y, X]() ) # N: Revealed type is "__main__.Bar[Y`2 = builtins.object, Y`2 = builtins.object]" + + [case testTypeVarDefaultsClassRecursive1] # flags: --disallow-any-generics from typing import Generic, TypeVar, List