@@ -457,7 +457,8 @@ class F(Generic[T], Enum): # E: Enum class cannot be generic
457457 x: T
458458 y: T
459459
460- reveal_type(F[int].x) # N: Revealed type is "__main__.F[builtins.int]"
460+ reveal_type(F[int].x) # E: Access to generic instance variables via class is ambiguous \
461+ # N: Revealed type is "builtins.int"
461462[builtins fixtures/enum.pyi]
462463
463464[case testEnumFlag]
@@ -1421,6 +1422,53 @@ class Comparator(enum.Enum):
14211422reveal_type(Comparator.__foo__) # N: Revealed type is "builtins.dict[builtins.str, builtins.int]"
14221423[builtins fixtures/dict.pyi]
14231424
1425+ [case testEnumClassAttributeUnannotated]
1426+ import enum
1427+ from typing import ClassVar, Literal
1428+
1429+ class MyEnum(enum.Enum):
1430+ foo: ClassVar[str]
1431+ bar: str
1432+
1433+ VALUE_A = 1
1434+ VALUE_B = 2
1435+
1436+ reveal_type(MyEnum.foo) # N: Revealed type is "builtins.str"
1437+ reveal_type(MyEnum.bar) # N: Revealed type is "builtins.str"
1438+ x: Literal[MyEnum.foo] # E: Parameter 1 of Literal[...] is invalid
1439+ y: Literal[MyEnum.bar] # E: Parameter 1 of Literal[...] is invalid
1440+ [builtins fixtures/enum.pyi]
1441+
1442+ [case testEnumAttributesInheritedFromMixin]
1443+ from enum import Enum
1444+ from typing import TYPE_CHECKING, ClassVar, Final, Literal
1445+
1446+ class A:
1447+ var1 = 1
1448+ var2: ClassVar[str]
1449+ var3: Final[int] = 3
1450+ var4: str
1451+
1452+ class E(A, Enum):
1453+ mem = 1
1454+
1455+ reveal_type(E.var1) # N: Revealed type is "builtins.int"
1456+ reveal_type(E.var2) # N: Revealed type is "builtins.str"
1457+ reveal_type(E.var3) # N: Revealed type is "builtins.int"
1458+ reveal_type(E.var4) # N: Revealed type is "builtins.str"
1459+ reveal_type(E.mem) # N: Revealed type is "Literal[__main__.E.mem]?"
1460+
1461+ E.var1.value # E: "int" has no attribute "value"
1462+ E.var2.name # E: "str" has no attribute "name"
1463+ E.mem.name
1464+
1465+ x1: Literal[E.var1] # E: Parameter 1 of Literal[...] is invalid
1466+ x2: Literal[E.var2] # E: Parameter 1 of Literal[...] is invalid
1467+ x3: Literal[E.var3] # E: Parameter 1 of Literal[...] is invalid
1468+ x4: Literal[E.var4] # E: Parameter 1 of Literal[...] is invalid
1469+ m: Literal[E.mem]
1470+ [builtins fixtures/enum.pyi]
1471+
14241472[case testEnumWithInstanceAttributes]
14251473from enum import Enum
14261474class Foo(Enum):
0 commit comments