File tree Expand file tree Collapse file tree 2 files changed +17
-1
lines changed Expand file tree Collapse file tree 2 files changed +17
-1
lines changed Original file line number Diff line number Diff line change @@ -346,7 +346,7 @@ def is_overlapping_types(
346346 seen_types = set ()
347347 elif (left , right ) in seen_types :
348348 return True
349- if isinstance (left , TypeAliasType ) and isinstance ( right , TypeAliasType ):
349+ if is_recursive_pair (left , right ):
350350 seen_types .add ((left , right ))
351351
352352 left , right = get_proper_types ((left , right ))
Original file line number Diff line number Diff line change @@ -1024,3 +1024,19 @@ L = list[T]
10241024
10251025A = L[A]
10261026a: A = 1 # E: Incompatible types in assignment (expression has type "int", variable has type "A")
1027+
1028+ [case testRecursiveAliasInstanceOverlapCheck]
1029+ # flags: --warn-unreachable
1030+ from typing_extensions import TypeAlias
1031+
1032+ OneClass: TypeAlias = 'list[OneClass]'
1033+
1034+ class TwoClass(list['TwoClass']):
1035+ pass
1036+
1037+ def f(obj: OneClass) -> None:
1038+ if isinstance(obj, TwoClass):
1039+ reveal_type(obj) # N: Revealed type is "__main__.TwoClass"
1040+ else:
1041+ reveal_type(obj) # N: Revealed type is "builtins.list[...]"
1042+ [builtins fixtures/isinstancelist.pyi]
You can’t perform that action at this time.
0 commit comments