Skip to content

Commit 4b34af1

Browse files
added second test
1 parent 510a89d commit 4b34af1

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

mypy/expandtype.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,10 @@ 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-
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
249+
repl.default = repl.default.accept(self)
250+
expanded = repl.accept(self) # Note: `expanded is repl` may be true.
251+
repl = repl if isinstance(expanded, TypeVarType) else expanded
252+
self.recursive_tvar_guard[tvar_id] = repl
257253
return repl
258254

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

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,9 +431,23 @@ class Foo(Generic[T, Y]):
431431

432432
class Bar(Generic[X, Y]):
433433
def test(self) -> None:
434-
reveal_type( Bar[Y, X]() ) # N: Revealed type is "__main__.Bar[Y`2 = builtins.object, Y`2 = builtins.object]"
434+
reveal_type( Bar[Y, X]() ) # N: Revealed type is "__main__.Bar[Y`2 = builtins.object, X`1 = builtins.object]"
435435

436436

437+
[case testTypeVarDefaultsSwap2]
438+
from typing import TypeVar, Generic
439+
440+
X = TypeVar("X", default=object)
441+
Y = TypeVar("Y", default=object)
442+
U = TypeVar("U", default=object)
443+
V = TypeVar("V", default=object)
444+
445+
class Transform(Generic[X, Y]):
446+
def invert(self) -> "Transform[Y, X]": ...
447+
448+
class Foo(Transform[U, V], Generic[U, V]):
449+
def invert(self) -> "Foo[V, U]": ...
450+
437451
[case testTypeVarDefaultsClassRecursive1]
438452
# flags: --disallow-any-generics
439453
from typing import Generic, TypeVar, List

0 commit comments

Comments
 (0)