File tree 2 files changed +13
-0
lines changed 2 files changed +13
-0
lines changed Original file line number Diff line number Diff line change @@ -1699,6 +1699,10 @@ def true_or_false(t: Type) -> Type:
1699
1699
"""
1700
1700
Unrestricted version of t with both True-ish and False-ish values
1701
1701
"""
1702
+ if isinstance (t , UnionType ):
1703
+ new_items = [true_or_false (item ) for item in t .items ]
1704
+ return UnionType .make_simplified_union (new_items , line = t .line , column = t .column )
1705
+
1702
1706
new_t = copy_type (t )
1703
1707
new_t .can_be_true = type (new_t ).can_be_true
1704
1708
new_t .can_be_false = type (new_t ).can_be_false
Original file line number Diff line number Diff line change @@ -594,3 +594,12 @@ x: Optional[Union[int, str]]
594
594
reveal_type(x) # E: Revealed type is 'Union[builtins.int, builtins.str, builtins.None]'
595
595
y: Optional[Union[int, None]]
596
596
reveal_type(y) # E: Revealed type is 'Union[builtins.int, builtins.None]'
597
+
598
+ [case testUnionTruthinessTracking]
599
+ from typing import Optional, Any
600
+ def test_or_shortcut(value: Optional[Any]) -> None:
601
+ if not value:
602
+ pass
603
+ if not value or value.get('foo') == 'hello':
604
+ pass
605
+ [builtins fixtures/bool.pyi]
You can’t perform that action at this time.
0 commit comments