@@ -8,10 +8,7 @@ def f(x: 'A') -> 'B': ...
88def f(x: 'B') -> 'A': ...
99
1010def f(x: Any) -> Any:
11- if isinstance(x, A):
12- return B()
13- else:
14- return A()
11+ pass
1512
1613reveal_type(f(A())) # E: Revealed type is '__main__.B'
1714reveal_type(f(B())) # E: Revealed type is '__main__.A'
@@ -20,6 +17,30 @@ class A: pass
2017class B: pass
2118[builtins fixtures/isinstance.pyi]
2219
20+ [case testTypeCheckOverloadWithImplementationPy2]
21+ # flags: --python-version 2.7
22+
23+ from typing import overload
24+ @overload
25+ def f(x):
26+ # type: (A) -> B
27+ pass
28+
29+ @overload
30+ def f(x):
31+ # type: (B) -> A
32+ pass
33+
34+ def f(x):
35+ pass
36+
37+ reveal_type(f(A())) # E: Revealed type is '__main__.B'
38+ reveal_type(f(B())) # E: Revealed type is '__main__.A'
39+
40+ class A: pass
41+ class B: pass
42+ [builtins fixtures/isinstance.pyi]
43+
2344[case testTypeCheckOverloadWithImplementationError]
2445from typing import overload, Any
2546
@@ -29,15 +50,20 @@ def f(x: 'A') -> 'B': ...
2950def f(x: 'B') -> 'A': ...
3051
3152def f(x: Any) -> Any:
32- if isinstance(x, A):
33- y = x
34- y = B() # E: Incompatible types in assignment (expression has type "B", variable has type "A")
35- return y
36- else:
37- return A()
53+ foo = 1
54+ foo = "bar" # E: Incompatible types in assignment (expression has type "str", variable has type "int")
3855
39- reveal_type(f(A())) # E: Revealed type is '__main__.B'
40- reveal_type(f(B())) # E: Revealed type is '__main__.A'
56+ @overload
57+ def g(x: 'A') -> 'B': ...
58+ @overload
59+ def g(x: 'B') -> 'A': ...
60+
61+ def g(x):
62+ foo = 1
63+ foo = "bar"
64+
65+ reveal_type(f(A())) # E: Revealed type is '__main__.B'
66+ reveal_type(f(B())) # E: Revealed type is '__main__.A'
4167
4268class A: pass
4369class B: pass
@@ -57,10 +83,7 @@ def f(x: 'A') -> 'B': ...
5783def f(x: 'B') -> 'A': ...
5884
5985def f(x: 'A') -> Any: # E: Overloaded function implementation cannot accept all possible arguments of signature 2
60- if x is a:
61- return B()
62- else:
63- return A()
86+ pass
6487
6588reveal_type(f(A())) # E: Revealed type is '__main__.B'
6689reveal_type(f(B())) # E: Revealed type is '__main__.A'
0 commit comments