1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2
3#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
4pub enum WitSyntaxKind {
5 Root,
7 Whitespace,
8 Newline,
9 Comment,
10 Error,
11 Eof,
12 Text,
13
14 IntegerLiteral,
16 FloatLiteral,
17 StringLiteral,
18 Identifier,
19
20 WorldKw,
22 InterfaceKw,
23 PackageKw,
24 ComponentKw,
25 InstanceKw,
26 ModuleKw,
27 CoreKw,
28 FuncKw,
29 TypeKw,
30 RecordKw,
31 VariantKw,
32 EnumKw,
33 FlagsKw,
34 UnionKw,
35 TupleKw,
36 ListKw,
37 OptionKw,
38 ResultKw,
39 ResourceKw,
40
41 ImportKw,
43 ExportKw,
44 UseKw,
45 IncludeKw,
46 WithKw,
47
48 StaticKw,
50 ConstructorKw,
51 MethodKw,
52
53 BoolKw,
55 U8Kw,
56 U16Kw,
57 U32Kw,
58 U64Kw,
59 S8Kw,
60 S16Kw,
61 S32Kw,
62 S64Kw,
63 F32Kw,
64 F64Kw,
65 CharKw,
66 StringKw,
67
68 Arrow, FatArrow, Assign, Colon, Semicolon, Comma, Dot, Question, At, Hash, Dollar, Percent, Ampersand, Star, Plus, Minus, Slash, Lt, Gt, Pipe, Caret, Tilde, Bang, LeftParen, RightParen, LeftBrace, RightBrace, LeftBracket, RightBracket, }
101
102impl std::fmt::Display for WitSyntaxKind {
103 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
104 write!(f, "{:?}", self)
105 }
106}
107
108impl TokenType for WitSyntaxKind {
109 const END_OF_STREAM: Self = Self::Eof;
110 type Role = UniversalTokenRole;
111
112 fn role(&self) -> Self::Role {
113 match self {
114 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
115 Self::Comment => UniversalTokenRole::Comment,
116 Self::Eof => UniversalTokenRole::Eof,
117 _ => UniversalTokenRole::None,
118 }
119 }
120}
121
122impl ElementType for WitSyntaxKind {
123 type Role = UniversalElementRole;
124
125 fn is_root(&self) -> bool {
126 matches!(self, Self::Root)
127 }
128
129 fn role(&self) -> Self::Role {
130 match self {
131 Self::Root => UniversalElementRole::Root,
132 Self::Error => UniversalElementRole::Error,
133 _ => UniversalElementRole::None,
134 }
135 }
136}