File tree 2 files changed +36
-1
lines changed 2 files changed +36
-1
lines changed Original file line number Diff line number Diff line change @@ -1129,7 +1129,8 @@ def check_overload_call(self,
1129
1129
erased_targets = None # type: Optional[List[CallableType]]
1130
1130
unioned_result = None # type: Optional[Tuple[Type, Type]]
1131
1131
unioned_errors = None # type: Optional[MessageBuilder]
1132
- if any (isinstance (arg , UnionType ) for arg in arg_types ):
1132
+ if any (isinstance (arg , UnionType ) and len (arg .relevant_items ()) > 1 # "real" union
1133
+ for arg in arg_types ):
1133
1134
erased_targets = self .overload_erased_call_targets (plausible_targets , arg_types ,
1134
1135
arg_kinds , arg_names , context )
1135
1136
unioned_callable = self .union_overload_matches (erased_targets )
Original file line number Diff line number Diff line change @@ -3669,3 +3669,37 @@ reveal_type(Child.foo("...")) # E: Revealed type is 'builtins.str'
3669
3669
reveal_type(Child.foo(x)) # E: Revealed type is 'Union[Type[__main__.Child*], builtins.str]'
3670
3670
reveal_type(Child.foo(3)().child_only()) # E: Revealed type is 'builtins.int'
3671
3671
[builtins fixtures/classmethod.pyi]
3672
+
3673
+ [case testOptionalIsNotAUnionIfNoStrictOverload]
3674
+ # flags: --no-strict-optional
3675
+ from typing import Optional, overload
3676
+
3677
+ class B: pass
3678
+ class C(B): pass
3679
+
3680
+ @overload
3681
+ def rp(x: C) -> C: ...
3682
+ @overload
3683
+ def rp(x: B) -> B: ...
3684
+ def rp(x):
3685
+ pass
3686
+
3687
+ x: Optional[C]
3688
+ reveal_type(rp(x)) # E: Revealed type is '__main__.C'
3689
+ [out]
3690
+
3691
+ [case testOptionalIsNotAUnionIfNoStrictOverloadStr]
3692
+ # flags: -2 --no-strict-optional
3693
+
3694
+ from typing import Optional
3695
+ from m import relpath
3696
+ a = '' # type: Optional[str]
3697
+ reveal_type(relpath(a)) # E: Revealed type is 'builtins.str'
3698
+
3699
+ [file m.pyi]
3700
+ from typing import overload
3701
+ @overload
3702
+ def relpath(path: str) -> str: ...
3703
+ @overload
3704
+ def relpath(path: unicode) -> unicode: ...
3705
+ [out]
You can’t perform that action at this time.
0 commit comments