1#![doc = include_str!("../../readme.md")]
2
3use oak_core::{ElementType, Token, TokenType, UniversalElementRole, UniversalTokenRole};
4use serde::{Deserialize, Serialize};
5
6pub type ValaToken = Token<ValaSyntaxKind>;
7
8#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum ValaSyntaxKind {
10 Text,
12 Whitespace,
13 Newline,
14
15 Error,
17
18 Eof,
20
21 LeftParen,
23 RightParen,
24 LeftBracket,
25 RightBracket,
26 LeftBrace,
27 RightBrace,
28 Colon,
29 Semicolon,
30 Dot,
31 Comma,
32 Question,
33 Bang,
34 At,
35 Hash,
36 Dollar,
37 Percent,
38 Caret,
39 Ampersand,
40 Star,
41 Plus,
42 Minus,
43 Eq,
44 LessThan,
45 GreaterThan,
46 Slash,
47 Backslash,
48 Pipe,
49 Tilde,
50
51 EqEq,
53 NotEq,
54 LessEq,
55 GreaterEq,
56 AndAnd,
57 OrOr,
58 PlusPlus,
59 MinusMinus,
60 PlusEq,
61 MinusEq,
62 StarEq,
63 SlashEq,
64 PercentEq,
65 LeftShift,
66 RightShift,
67 Arrow,
68
69 AbstractKw,
71 AsKw,
72 BaseKw,
73 BreakKw,
74 CaseKw,
75 CatchKw,
76 ClassKw,
77 ConstKw,
78 ConstructKw,
79 ContinueKw,
80 DefaultKw,
81 DelegateKw,
82 DeleteKw,
83 DoKw,
84 ElseKw,
85 EnumKw,
86 EnsuresKw,
87 ErrordomainKw,
88 ExternKw,
89 FalseKw,
90 FinallyKw,
91 ForKw,
92 ForeachKw,
93 GetKw,
94 IfKw,
95 InKw,
96 InlineKw,
97 InterfaceKw,
98 InternalKw,
99 IsKw,
100 LockKw,
101 NamespaceKw,
102 NewKw,
103 NullKw,
104 OutKw,
105 OverrideKw,
106 OwnedKw,
107 PrivateKw,
108 ProtectedKw,
109 PublicKw,
110 RefKw,
111 RequiresKw,
112 ReturnKw,
113 SetKw,
114 SizeofKw,
115 StaticKw,
116 StructKw,
117 SwitchKw,
118 ThisKw,
119 ThrowKw,
120 ThrowsKw,
121 TrueKw,
122 TryKw,
123 TypeofKw,
124 UnownedKw,
125 UsingKw,
126 VarKw,
127 VirtualKw,
128 VoidKw,
129 VolatileKw,
130 WeakKw,
131 WhileKw,
132 YieldKw,
133
134 BoolKw,
136 CharKw,
137 UcharKw,
138 IntKw,
139 UintKw,
140 ShortKw,
141 UshortKw,
142 LongKw,
143 UlongKw,
144 Int8Kw,
145 Uint8Kw,
146 Int16Kw,
147 Uint16Kw,
148 Int32Kw,
149 Uint32Kw,
150 Int64Kw,
151 Uint64Kw,
152 FloatKw,
153 DoubleKw,
154 StringKw,
155
156 IntegerLiteral,
158 FloatLiteral,
159 StringLiteral,
160 CharLiteral,
161 BoolLiteral,
162 NullLiteral,
163 Identifier,
164
165 LineComment,
167 SourceFile,
168 BlockComment,
169}
170
171impl TokenType for ValaSyntaxKind {
172 const END_OF_STREAM: Self = Self::Eof;
173 type Role = UniversalTokenRole;
174
175 fn role(&self) -> Self::Role {
176 match self {
177 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
178 Self::LineComment | Self::BlockComment => UniversalTokenRole::Comment,
179 Self::Eof => UniversalTokenRole::Eof,
180 _ => UniversalTokenRole::None,
181 }
182 }
183}
184
185impl ElementType for ValaSyntaxKind {
186 type Role = UniversalElementRole;
187
188 fn role(&self) -> Self::Role {
189 match self {
190 Self::SourceFile => UniversalElementRole::Root,
191 Self::Error => UniversalElementRole::Error,
192 _ => UniversalElementRole::None,
193 }
194 }
195}