Skip to content

Commit 510a89d

Browse files
initial commit + revert debugging
1 parent 38cdacf commit 510a89d

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

mypy/expandtype.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,14 @@ def visit_type_var(self, t: TypeVarType) -> Type:
246246
if (tvar_id := repl.id) in self.recursive_tvar_guard:
247247
return self.recursive_tvar_guard[tvar_id] or repl
248248
self.recursive_tvar_guard[tvar_id] = None
249-
repl = repl.accept(self)
250-
if isinstance(repl, TypeVarType):
251-
repl.default = repl.default.accept(self)
252-
self.recursive_tvar_guard[tvar_id] = repl
249+
expanded = repl.accept(self)
250+
251+
if isinstance(expanded, TypeVarType):
252+
expanded.default = expanded.default.accept(self)
253+
else:
254+
repl = expanded
255+
256+
self.recursive_tvar_guard[tvar_id] = expanded
253257
return repl
254258

255259
def visit_param_spec(self, t: ParamSpecType) -> Type:

test-data/unit/check-typevar-defaults.test

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,24 @@ def func_c4(
416416
reveal_type(m) # N: Revealed type is "__main__.ClassC4[builtins.int, builtins.float]"
417417
[builtins fixtures/tuple.pyi]
418418

419+
[case testTypeVarDefaultsSwap]
420+
from typing import TypeVar, Generic
421+
422+
T = TypeVar("T")
423+
X = TypeVar("X", default=object)
424+
Y = TypeVar("Y", default=object)
425+
426+
427+
class Foo(Generic[T, Y]):
428+
def test(self) -> None:
429+
reveal_type( Foo[Y, T]() ) # N: Revealed type is "__main__.Foo[Y`2 = builtins.object, T`1]"
430+
431+
432+
class Bar(Generic[X, Y]):
433+
def test(self) -> None:
434+
reveal_type( Bar[Y, X]() ) # N: Revealed type is "__main__.Bar[Y`2 = builtins.object, Y`2 = builtins.object]"
435+
436+
419437
[case testTypeVarDefaultsClassRecursive1]
420438
# flags: --disallow-any-generics
421439
from typing import Generic, TypeVar, List

0 commit comments

Comments
 (0)