@@ -618,8 +618,8 @@ reveal_type(A2.x.value) # N: Revealed type is "builtins.int"
618
618
reveal_type(A2.x._value_) # N: Revealed type is "builtins.int"
619
619
is_x(reveal_type(A3.x.name)) # N: Revealed type is "Literal['x']"
620
620
is_x(reveal_type(A3.x._name_)) # N: Revealed type is "Literal['x']"
621
- reveal_type(A3.x.value) # N: Revealed type is "builtins.int "
622
- reveal_type(A3.x._value_) # N: Revealed type is "builtins.int "
621
+ reveal_type(A3.x.value) # N: Revealed type is "Literal[1]? "
622
+ reveal_type(A3.x._value_) # N: Revealed type is "Literal[1]? "
623
623
624
624
B1 = IntEnum('B1', 'x')
625
625
class B2(IntEnum):
@@ -639,8 +639,8 @@ reveal_type(B2.x.value) # N: Revealed type is "builtins.int"
639
639
reveal_type(B2.x._value_) # N: Revealed type is "builtins.int"
640
640
is_x(reveal_type(B3.x.name)) # N: Revealed type is "Literal['x']"
641
641
is_x(reveal_type(B3.x._name_)) # N: Revealed type is "Literal['x']"
642
- reveal_type(B3.x.value) # N: Revealed type is "builtins.int "
643
- reveal_type(B3.x._value_) # N: Revealed type is "builtins.int "
642
+ reveal_type(B3.x.value) # N: Revealed type is "Literal[1]? "
643
+ reveal_type(B3.x._value_) # N: Revealed type is "Literal[1]? "
644
644
645
645
# TODO: C1.x.value and C2.x.value should also be of type 'int'
646
646
# This requires either a typeshed change or a plugin refinement
@@ -661,8 +661,8 @@ reveal_type(C2.x.value) # N: Revealed type is "builtins.int"
661
661
reveal_type(C2.x._value_) # N: Revealed type is "builtins.int"
662
662
is_x(reveal_type(C3.x.name)) # N: Revealed type is "Literal['x']"
663
663
is_x(reveal_type(C3.x._name_)) # N: Revealed type is "Literal['x']"
664
- reveal_type(C3.x.value) # N: Revealed type is "builtins.int "
665
- reveal_type(C3.x._value_) # N: Revealed type is "builtins.int "
664
+ reveal_type(C3.x.value) # N: Revealed type is "Literal[1]? "
665
+ reveal_type(C3.x._value_) # N: Revealed type is "Literal[1]? "
666
666
667
667
D1 = Flag('D1', 'x')
668
668
class D2(Flag):
@@ -680,8 +680,8 @@ reveal_type(D2.x.value) # N: Revealed type is "builtins.int"
680
680
reveal_type(D2.x._value_) # N: Revealed type is "builtins.int"
681
681
is_x(reveal_type(D3.x.name)) # N: Revealed type is "Literal['x']"
682
682
is_x(reveal_type(D3.x._name_)) # N: Revealed type is "Literal['x']"
683
- reveal_type(D3.x.value) # N: Revealed type is "builtins.int "
684
- reveal_type(D3.x._value_) # N: Revealed type is "builtins.int "
683
+ reveal_type(D3.x.value) # N: Revealed type is "Literal[1]? "
684
+ reveal_type(D3.x._value_) # N: Revealed type is "Literal[1]? "
685
685
686
686
# TODO: Generalize our enum functional API logic to work with subclasses of Enum
687
687
# See https://github.com/python/mypy/issues/6037
@@ -699,8 +699,8 @@ reveal_type(E2.x.value) # N: Revealed type is "builtins.int"
699
699
reveal_type(E2.x._value_) # N: Revealed type is "builtins.int"
700
700
is_x(reveal_type(E3.x.name)) # N: Revealed type is "Literal['x']"
701
701
is_x(reveal_type(E3.x._name_)) # N: Revealed type is "Literal['x']"
702
- reveal_type(E3.x.value) # N: Revealed type is "builtins.int "
703
- reveal_type(E3.x._value_) # N: Revealed type is "builtins.int "
702
+ reveal_type(E3.x.value) # N: Revealed type is "Literal[1]? "
703
+ reveal_type(E3.x._value_) # N: Revealed type is "Literal[1]? "
704
704
705
705
706
706
# TODO: Figure out if we can construct enums using EnumMetas using the functional API.
@@ -737,9 +737,9 @@ from enum import Enum
737
737
class SomeEnum(Enum):
738
738
a = "foo"
739
739
[out]
740
- main:2: note: Revealed type is "builtins.int "
740
+ main:2: note: Revealed type is "Literal[1]? "
741
741
[out2]
742
- main:2: note: Revealed type is "builtins.str "
742
+ main:2: note: Revealed type is "Literal['foo']? "
743
743
744
744
[case testEnumReachabilityChecksBasic]
745
745
from enum import Enum
@@ -1311,8 +1311,8 @@ class Foo(Enum):
1311
1311
B = 2
1312
1312
1313
1313
a = Foo.A
1314
- reveal_type(a.value) # N: Revealed type is "builtins.int "
1315
- reveal_type(a._value_) # N: Revealed type is "builtins.int "
1314
+ reveal_type(a.value) # N: Revealed type is "Union[Literal[1]?, Literal[2]?] "
1315
+ reveal_type(a._value_) # N: Revealed type is "Union[Literal[1]?, Literal[2]?] "
1316
1316
1317
1317
[case testNewSetsUnexpectedValueType]
1318
1318
from enum import Enum
@@ -1437,7 +1437,7 @@ class Foo(Enum):
1437
1437
A = 1
1438
1438
A = 'a' # E: Attempted to reuse member name "A" in Enum definition "Foo" \
1439
1439
# E: Incompatible types in assignment (expression has type "str", variable has type "int")
1440
- reveal_type(Foo.A.value) # N: Revealed type is "builtins.int "
1440
+ reveal_type(Foo.A.value) # N: Revealed type is "Literal[1]? "
1441
1441
1442
1442
class Bar(Enum):
1443
1443
A = 1
@@ -1788,3 +1788,18 @@ class C(Enum):
1788
1788
class D(C): # E: Cannot inherit from final class "C"
1789
1789
x: int # E: Cannot assign to final name "x"
1790
1790
[builtins fixtures/bool.pyi]
1791
+
1792
+ [case testEnumLiteralValues]
1793
+ from enum import Enum
1794
+
1795
+ class A(Enum):
1796
+ str = "foo"
1797
+ int = 1
1798
+ bool = False
1799
+ tuple = (1,)
1800
+
1801
+ reveal_type(A.str.value) # N: Revealed type is "Literal['foo']?"
1802
+ reveal_type(A.int.value) # N: Revealed type is "Literal[1]?"
1803
+ reveal_type(A.bool.value) # N: Revealed type is "Literal[False]?"
1804
+ reveal_type(A.tuple.value) # N: Revealed type is "Tuple[Literal[1]?]"
1805
+ [builtins fixtures/tuple.pyi]
0 commit comments