@@ -755,12 +755,10 @@ class B2(IntEnum):
755755class B3(IntEnum):
756756 x = 1
757757
758- # TODO: getting B1.x._value_ and B2.x._value_ to have type 'int' requires a typeshed change
759-
760758is_x(reveal_type(B1.x.name)) # N: Revealed type is "Literal['x']"
761759is_x(reveal_type(B1.x._name_)) # N: Revealed type is "Literal['x']"
762760reveal_type(B1.x.value) # N: Revealed type is "builtins.int"
763- reveal_type(B1.x._value_) # N: Revealed type is "Any "
761+ reveal_type(B1.x._value_) # N: Revealed type is "builtins.int "
764762is_x(reveal_type(B2.x.name)) # N: Revealed type is "Literal['x']"
765763is_x(reveal_type(B2.x._name_)) # N: Revealed type is "Literal['x']"
766764reveal_type(B2.x.value) # N: Revealed type is "builtins.int"
@@ -2539,3 +2537,51 @@ def check(thing: Things) -> None:
25392537 return None
25402538 return None # E: Statement is unreachable
25412539[builtins fixtures/enum.pyi]
2540+
2541+ [case testSunderValueType]
2542+ from enum import Enum, IntEnum, StrEnum, Flag, IntFlag
2543+
2544+ class Basic(Enum):
2545+ _value_: int
2546+ FOO = 1
2547+
2548+ reveal_type(Basic.FOO) # N: Revealed type is "Literal[__main__.Basic.FOO]?"
2549+ reveal_type(Basic.FOO.value) # N: Revealed type is "Literal[1]?"
2550+ reveal_type(Basic.FOO._value_) # N: Revealed type is "builtins.int"
2551+
2552+ class FromStub(Enum):
2553+ _value_: int
2554+ FOO = ...
2555+
2556+ reveal_type(FromStub.FOO) # N: Revealed type is "Literal[__main__.FromStub.FOO]?"
2557+ reveal_type(FromStub.FOO.value) # N: Revealed type is "builtins.int"
2558+ reveal_type(FromStub.FOO._value_) # N: Revealed type is "builtins.int"
2559+
2560+ class InheritedInt(IntEnum):
2561+ FOO = ...
2562+
2563+ reveal_type(InheritedInt.FOO) # N: Revealed type is "Literal[__main__.InheritedInt.FOO]?"
2564+ reveal_type(InheritedInt.FOO.value) # N: Revealed type is "builtins.int"
2565+ reveal_type(InheritedInt.FOO._value_) # N: Revealed type is "builtins.int"
2566+
2567+ class InheritedStr(StrEnum):
2568+ FOO = ...
2569+
2570+ reveal_type(InheritedStr.FOO) # N: Revealed type is "Literal[__main__.InheritedStr.FOO]?"
2571+ reveal_type(InheritedStr.FOO.value) # N: Revealed type is "builtins.str"
2572+ reveal_type(InheritedStr.FOO._value_) # N: Revealed type is "builtins.str"
2573+
2574+ class InheritedFlag(Flag):
2575+ FOO = ...
2576+
2577+ reveal_type(InheritedFlag.FOO) # N: Revealed type is "Literal[__main__.InheritedFlag.FOO]?"
2578+ reveal_type(InheritedFlag.FOO.value) # N: Revealed type is "builtins.int"
2579+ reveal_type(InheritedFlag.FOO._value_) # N: Revealed type is "builtins.int"
2580+
2581+ class InheritedIntFlag(IntFlag):
2582+ FOO = ...
2583+
2584+ reveal_type(InheritedIntFlag.FOO) # N: Revealed type is "Literal[__main__.InheritedIntFlag.FOO]?"
2585+ reveal_type(InheritedIntFlag.FOO.value) # N: Revealed type is "builtins.int"
2586+ reveal_type(InheritedIntFlag.FOO._value_) # N: Revealed type is "builtins.int"
2587+ [builtins fixtures/enum.pyi]
0 commit comments