@@ -622,39 +622,39 @@ class Foo(Enum):
622
622
623
623
x: Literal[Foo.A, Foo.B, Foo.C]
624
624
if x is Foo.A:
625
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
625
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
626
626
elif x is Foo.B:
627
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.B]'
627
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.B]'
628
628
elif x is Foo.C:
629
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.C]'
629
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.C]'
630
630
else:
631
631
reveal_type(x) # No output here: this branch is unreachable
632
632
633
633
if Foo.A is x:
634
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
634
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
635
635
elif Foo.B is x:
636
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.B]'
636
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.B]'
637
637
elif Foo.C is x:
638
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.C]'
638
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.C]'
639
639
else:
640
640
reveal_type(x) # No output here: this branch is unreachable
641
641
642
642
y: Foo
643
643
if y is Foo.A:
644
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
644
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
645
645
elif y is Foo.B:
646
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.B]'
646
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.B]'
647
647
elif y is Foo.C:
648
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.C]'
648
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.C]'
649
649
else:
650
650
reveal_type(y) # No output here: this branch is unreachable
651
651
652
652
if Foo.A is y:
653
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
653
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
654
654
elif Foo.B is y:
655
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.B]'
655
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.B]'
656
656
elif Foo.C is y:
657
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.C]'
657
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.C]'
658
658
else:
659
659
reveal_type(y) # No output here: this branch is unreachable
660
660
[builtins fixtures/bool.pyi]
@@ -675,45 +675,45 @@ y: Literal[Foo.A]
675
675
z: Final = Foo.A
676
676
677
677
if x is y:
678
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
679
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
678
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
679
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
680
680
else:
681
- reveal_type(x) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
682
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
681
+ reveal_type(x) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
682
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
683
683
if y is x:
684
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
685
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
684
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
685
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
686
686
else:
687
- reveal_type(x) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
688
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
687
+ reveal_type(x) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
688
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
689
689
690
690
if x is z:
691
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
692
- reveal_type(z) # E : Revealed type is '__main__.Foo'
691
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
692
+ reveal_type(z) # N : Revealed type is '__main__.Foo'
693
693
accepts_foo_a(z)
694
694
else:
695
- reveal_type(x) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
696
- reveal_type(z) # E : Revealed type is '__main__.Foo'
695
+ reveal_type(x) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
696
+ reveal_type(z) # N : Revealed type is '__main__.Foo'
697
697
accepts_foo_a(z)
698
698
if z is x:
699
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
700
- reveal_type(z) # E : Revealed type is '__main__.Foo'
699
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
700
+ reveal_type(z) # N : Revealed type is '__main__.Foo'
701
701
accepts_foo_a(z)
702
702
else:
703
- reveal_type(x) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
704
- reveal_type(z) # E : Revealed type is '__main__.Foo'
703
+ reveal_type(x) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
704
+ reveal_type(z) # N : Revealed type is '__main__.Foo'
705
705
accepts_foo_a(z)
706
706
707
707
if y is z:
708
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
709
- reveal_type(z) # E : Revealed type is '__main__.Foo'
708
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
709
+ reveal_type(z) # N : Revealed type is '__main__.Foo'
710
710
accepts_foo_a(z)
711
711
else:
712
712
reveal_type(y) # No output: this branch is unreachable
713
713
reveal_type(z) # No output: this branch is unreachable
714
714
if z is y:
715
- reveal_type(y) # E : Revealed type is 'Literal[__main__.Foo.A]'
716
- reveal_type(z) # E : Revealed type is '__main__.Foo'
715
+ reveal_type(y) # N : Revealed type is 'Literal[__main__.Foo.A]'
716
+ reveal_type(z) # N : Revealed type is '__main__.Foo'
717
717
accepts_foo_a(z)
718
718
else:
719
719
reveal_type(y) # No output: this branch is unreachable
@@ -735,18 +735,18 @@ z: Literal[Foo.B, Foo.C]
735
735
736
736
# For the sake of simplicity, no narrowing is done when the narrower type is a Union.
737
737
if x is y:
738
- reveal_type(x) # E : Revealed type is '__main__.Foo'
739
- reveal_type(y) # E : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
738
+ reveal_type(x) # N : Revealed type is '__main__.Foo'
739
+ reveal_type(y) # N : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
740
740
else:
741
- reveal_type(x) # E : Revealed type is '__main__.Foo'
742
- reveal_type(y) # E : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
741
+ reveal_type(x) # N : Revealed type is '__main__.Foo'
742
+ reveal_type(y) # N : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
743
743
744
744
if y is z:
745
- reveal_type(y) # E : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
746
- reveal_type(z) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
745
+ reveal_type(y) # N : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
746
+ reveal_type(z) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
747
747
else:
748
- reveal_type(y) # E : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
749
- reveal_type(z) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
748
+ reveal_type(y) # N : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Foo.B]]'
749
+ reveal_type(z) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C]]'
750
750
[builtins fixtures/bool.pyi]
751
751
752
752
[case testEnumReachabilityWithNone]
@@ -761,19 +761,19 @@ class Foo(Enum):
761
761
762
762
x: Optional[Foo]
763
763
if x:
764
- reveal_type(x) # E : Revealed type is '__main__.Foo'
764
+ reveal_type(x) # N : Revealed type is '__main__.Foo'
765
765
else:
766
- reveal_type(x) # E : Revealed type is 'Union[__main__.Foo, None]'
766
+ reveal_type(x) # N : Revealed type is 'Union[__main__.Foo, None]'
767
767
768
768
if x is not None:
769
- reveal_type(x) # E : Revealed type is '__main__.Foo'
769
+ reveal_type(x) # N : Revealed type is '__main__.Foo'
770
770
else:
771
- reveal_type(x) # E : Revealed type is 'None'
771
+ reveal_type(x) # N : Revealed type is 'None'
772
772
773
773
if x is Foo.A:
774
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Foo.A]'
774
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Foo.A]'
775
775
else:
776
- reveal_type(x) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C], None]'
776
+ reveal_type(x) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Foo.C], None]'
777
777
[builtins fixtures/bool.pyi]
778
778
779
779
[case testEnumReachabilityWithMultipleEnums]
@@ -790,21 +790,21 @@ class Bar(Enum):
790
790
791
791
x1: Union[Foo, Bar]
792
792
if x1 is Foo.A:
793
- reveal_type(x1) # E : Revealed type is 'Literal[__main__.Foo.A]'
793
+ reveal_type(x1) # N : Revealed type is 'Literal[__main__.Foo.A]'
794
794
else:
795
- reveal_type(x1) # E : Revealed type is 'Union[Literal[__main__.Foo.B], __main__.Bar]'
795
+ reveal_type(x1) # N : Revealed type is 'Union[Literal[__main__.Foo.B], __main__.Bar]'
796
796
797
797
x2: Union[Foo, Bar]
798
798
if x2 is Bar.A:
799
- reveal_type(x2) # E : Revealed type is 'Literal[__main__.Bar.A]'
799
+ reveal_type(x2) # N : Revealed type is 'Literal[__main__.Bar.A]'
800
800
else:
801
- reveal_type(x2) # E : Revealed type is 'Union[__main__.Foo, Literal[__main__.Bar.B]]'
801
+ reveal_type(x2) # N : Revealed type is 'Union[__main__.Foo, Literal[__main__.Bar.B]]'
802
802
803
803
x3: Union[Foo, Bar]
804
804
if x3 is Foo.A or x3 is Bar.A:
805
- reveal_type(x3) # E : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Bar.A]]'
805
+ reveal_type(x3) # N : Revealed type is 'Union[Literal[__main__.Foo.A], Literal[__main__.Bar.A]]'
806
806
else:
807
- reveal_type(x3) # E : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Bar.B]]'
807
+ reveal_type(x3) # N : Revealed type is 'Union[Literal[__main__.Foo.B], Literal[__main__.Bar.B]]'
808
808
809
809
[builtins fixtures/bool.pyi]
810
810
@@ -823,13 +823,13 @@ def func(x: Union[int, None, Empty] = _empty) -> int:
823
823
# E: Unsupported left operand type for + ("Empty") \
824
824
# N: Left operand is of type "Union[int, None, Empty]"
825
825
if x is _empty:
826
- reveal_type(x) # E : Revealed type is 'Literal[__main__.Empty.token]'
826
+ reveal_type(x) # N : Revealed type is 'Literal[__main__.Empty.token]'
827
827
return 0
828
828
elif x is None:
829
- reveal_type(x) # E : Revealed type is 'None'
829
+ reveal_type(x) # N : Revealed type is 'None'
830
830
return 1
831
831
else: # At this point typechecker knows that x can only have type int
832
- reveal_type(x) # E : Revealed type is 'builtins.int'
832
+ reveal_type(x) # N : Revealed type is 'builtins.int'
833
833
return x + 2
834
834
[builtins fixtures/primitives.pyi]
835
835
@@ -843,14 +843,14 @@ class Reason(Enum):
843
843
844
844
def process(response: Union[str, Reason] = '') -> str:
845
845
if response is Reason.timeout:
846
- reveal_type(response) # E : Revealed type is 'Literal[__main__.Reason.timeout]'
846
+ reveal_type(response) # N : Revealed type is 'Literal[__main__.Reason.timeout]'
847
847
return 'TIMEOUT'
848
848
elif response is Reason.error:
849
- reveal_type(response) # E : Revealed type is 'Literal[__main__.Reason.error]'
849
+ reveal_type(response) # N : Revealed type is 'Literal[__main__.Reason.error]'
850
850
return 'ERROR'
851
851
else:
852
852
# response can be only str, all other possible values exhausted
853
- reveal_type(response) # E : Revealed type is 'builtins.str'
853
+ reveal_type(response) # N : Revealed type is 'builtins.str'
854
854
return 'PROCESSED: ' + response
855
855
856
856
[builtins fixtures/primitives.pyi]
0 commit comments