Skip to content

Commit dbb7622

Browse files
committed
[ty] functional enum syntax
astral-sh/ty#876
1 parent 13b983c commit dbb7622

7 files changed

Lines changed: 460 additions & 32 deletions

File tree

crates/ty_python_semantic/resources/mdtest/dataclasses/dataclasses.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1936,16 +1936,16 @@ from enum import Enum
19361936

19371937
E = Enum("E", "A B C")
19381938

1939-
# TODO: should emit `invalid-dataclass`
1939+
# error: [invalid-dataclass] "Cannot use `dataclass()` on an enum class"
19401940
dataclass(E)
19411941

1942-
# TODO: should emit `invalid-dataclass`
1942+
# error: [invalid-dataclass] "Cannot use `dataclass()` on an enum class"
19431943
dataclass()(E)
19441944

1945-
# TODO: should emit `invalid-dataclass`
1945+
# error: [invalid-dataclass] "Cannot use `dataclass()` on an enum class"
19461946
dataclass(Enum("Inline1", "X Y"))
19471947

1948-
# TODO: should emit `invalid-dataclass`
1948+
# error: [invalid-dataclass] "Cannot use `dataclass()` on an enum class"
19491949
dataclass()(Enum("Inline2", "X Y"))
19501950
```
19511951

crates/ty_python_semantic/resources/mdtest/enums.md

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,35 @@ EnumWithSubclassOfEnumMetaMetaclass.NO.value
10921092

10931093
## Function syntax
10941094

1095-
To do: <https://typing.python.org/en/latest/spec/enums.html#enum-definition>
1095+
```py
1096+
from enum import Enum
1097+
from ty_extensions import enum_members
1098+
1099+
Color = Enum("Color", "RED", "GREEN", "BLUE")
1100+
1101+
# revealed: tuple[Literal["RED"], Literal["GREEN"], Literal["BLUE"]]
1102+
reveal_type(enum_members(Color))
1103+
1104+
Color = Enum("Color", "RED GREEN BLUE")
1105+
1106+
# revealed: tuple[Literal["RED"], Literal["GREEN"], Literal["BLUE"]]
1107+
reveal_type(enum_members(Color))
1108+
1109+
Color = Enum("Color", "RED, GREEN, BLUE")
1110+
1111+
# revealed: tuple[Literal["RED"], Literal["GREEN"], Literal["BLUE"]]
1112+
reveal_type(enum_members(Color))
1113+
1114+
Color = Enum("Color", [("RED", 1), ("GREEN", 2), ("BLUE", 3)])
1115+
1116+
# TODO: This should be supported
1117+
reveal_type(enum_members(Color)) # revealed: Unknown
1118+
1119+
Color = Enum("Color", (("RED", 1), ("GREEN", 2), ("BLUE", 3)))
1120+
1121+
# TODO: This should be supported
1122+
reveal_type(enum_members(Color)) # revealed: Unknown
1123+
```
10961124

10971125
## Exhaustiveness checking
10981126

0 commit comments

Comments
 (0)