Skip to content

Commit dbe1c63

Browse files
committed
Add more tests, fix new style classes
1 parent cddf39f commit dbe1c63

2 files changed

Lines changed: 47 additions & 1 deletion

File tree

mypy/semanal.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1992,7 +1992,7 @@ def analyze_class(self, defn: ClassDef) -> None:
19921992
if any(has_placeholder(tvd) for tvd in tvar_defs):
19931993
# Some type variable bounds or values are not ready, we need
19941994
# to re-analyze this class.
1995-
self.defer()
1995+
self.defer(force_progress=tvar_defs != defn.type_vars)
19961996

19971997
self.analyze_class_keywords(defn)
19981998
bases_result = self.analyze_base_classes(bases)

test-data/unit/check-python313.test

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,52 @@ class Bar[U]:
338338
def foo(data: U, cond: bool) -> Result[U, str]:
339339
return Ok(data) if cond else Err("Error")
340340

341+
[case testRecursiveTypeVarDefaultBasicNewStyle]
342+
class C[T: C = C]:
343+
pass
344+
345+
c: C
346+
reveal_type(c) # N: Revealed type is "__main__.C[__main__.C[Any]]"
347+
348+
[case testRecursiveTypeVarDefaultMutualNewStyle]
349+
class C[T = D]:
350+
pass
351+
352+
class D[S = C]:
353+
pass
354+
355+
c: C
356+
d: D
357+
reveal_type(c) # N: Revealed type is "__main__.C[__main__.D[Any]]"
358+
reveal_type(d) # N: Revealed type is "__main__.D[__main__.C[Any]]"
359+
360+
[case testNonRecursiveSimpleTypeVarDefaultNewStyle]
361+
class Child[S = Parent]: ...
362+
363+
class Parent[T = int]: ...
364+
365+
reveal_type(Child()) # N: Revealed type is "__main__.Child[__main__.Parent[builtins.int]]"
366+
367+
[case testRecursiveTypeVarDefaultClassAndAliasNewStyle]
368+
class Trait[T = Pattern]:
369+
pass
370+
371+
class Pattern1(Trait):
372+
pass
373+
class Pattern2(Trait):
374+
pass
375+
376+
type Pattern = Pattern1 | Pattern2
377+
378+
reveal_type(Trait()) # N: Revealed type is "__main__.Trait[__main__.Pattern1 | __main__.Pattern2]"
379+
[builtins fixtures/tuple.pyi]
380+
381+
[case testRecursiveTypeVarDefaultOnlyAliasNewStyle]
382+
type A[T = A] = list[T]
383+
a: A
384+
reveal_type(a) # N: Revealed type is "builtins.list[builtins.list[Any]]"
385+
[builtins fixtures/tuple.pyi]
386+
341387
[case testRecursiveAliasTypeVarDefaultNewStyle]
342388
type A[T = A] = int
343389
a: A

0 commit comments

Comments
 (0)