@@ -861,7 +861,7 @@ def f2(x: Union[Default, Literal[1], Literal[2]]):
861861
862862[case testNarrowingEqualityCustomEqualityEnum]
863863# flags: --strict-equality --warn-unreachable
864- from typing import Literal, Union
864+ from typing import Literal
865865from enum import Enum
866866
867867class CustomEnum(Enum):
@@ -870,18 +870,24 @@ class CustomEnum(Enum):
870870
871871 def __eq__(self, other: object) -> bool: return True
872872
873- x3: CustomEnum
874- key: Literal[CustomEnum.A]
875- if x3 == key:
876- reveal_type(x3) # N: Revealed type is "__main__.CustomEnum"
877- else:
878- reveal_type(x3) # N: Revealed type is "Literal[__main__.CustomEnum.B]"
873+ def check_equality(x: CustomEnum, key: Literal[CustomEnum.A]) -> None:
874+ if x == key:
875+ reveal_type(x) # N: Revealed type is "__main__.CustomEnum"
876+ else:
877+ reveal_type(x) # N: Revealed type is "Literal[__main__.CustomEnum.B]"
879878
880879# For comparison, this narrows since we bypass __eq__
881- if x3 is key:
882- reveal_type(x3) # N: Revealed type is "Literal[__main__.CustomEnum.A]"
883- else:
884- reveal_type(x3) # N: Revealed type is "Literal[__main__.CustomEnum.B]"
880+ def check_identity(x: CustomEnum, key: Literal[CustomEnum.A]) -> None:
881+ if x is key:
882+ reveal_type(x) # N: Revealed type is "Literal[__main__.CustomEnum.A]"
883+ else:
884+ reveal_type(x) # N: Revealed type is "Literal[__main__.CustomEnum.B]"
885+
886+ def check_optional_equality(x: CustomEnum | None, key: Literal[CustomEnum.A]) -> None:
887+ if x == key:
888+ reveal_type(x) # N: Revealed type is "__main__.CustomEnum"
889+ else:
890+ reveal_type(x) # N: Revealed type is "Literal[__main__.CustomEnum.B] | None"
885891[builtins fixtures/primitives.pyi]
886892
887893[case testNarrowingEqualityCustomEqualityChainedComparison]
0 commit comments