oak_d/lexer/token_type.rs
1//! Token types for the D lexer.
2
3use oak_core::{Token, TokenType, UniversalTokenRole};
4
5/// A token for the D programming language.
6pub type DToken = Token<DTokenType>;
7
8/// Token types for the D programming language.
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub enum DTokenType {
12 /// The root of the parse tree.
13 Root,
14 /// A module declaration.
15 Module,
16 /// A declaration.
17 Declaration,
18 /// A statement.
19 Statement,
20 /// An expression.
21 Expression,
22 /// A type.
23 Type,
24 /// An aggregate (class, struct, etc.).
25 Aggregate,
26 /// An import declaration.
27 Import,
28 /// The `module` keyword.
29 ModuleKeyword,
30 /// The `import` keyword.
31 ImportKeyword,
32 /// The `public` keyword.
33 PublicKeyword,
34 /// The `private` keyword.
35 PrivateKeyword,
36 /// The `protected` keyword.
37 ProtectedKeyword,
38 /// The `package` keyword.
39 PackageKeyword,
40 /// The `export` keyword.
41 ExportKeyword,
42 /// The `static` keyword.
43 StaticKeyword,
44 /// The `final` keyword.
45 FinalKeyword,
46 /// The `abstract` keyword.
47 AbstractKeyword,
48 /// The `override` keyword.
49 OverrideKeyword,
50 /// The `synchronized` keyword.
51 SynchronizedKeyword,
52 /// The `const` keyword.
53 ConstKeyword,
54 /// The `immutable` keyword.
55 ImmutableKeyword,
56 /// The `inout` keyword.
57 InoutKeyword,
58 /// The `shared` keyword.
59 SharedKeyword,
60 /// The `class` keyword.
61 ClassKeyword,
62 /// The `struct` keyword.
63 StructKeyword,
64 /// The `interface` keyword.
65 InterfaceKeyword,
66 /// The `union` keyword.
67 UnionKeyword,
68 /// The `enum` keyword.
69 EnumKeyword,
70 /// The `function` keyword.
71 FunctionKeyword,
72 /// The `delegate` keyword.
73 DelegateKeyword,
74 /// The `if` keyword.
75 IfKeyword,
76 /// The `else` keyword.
77 ElseKeyword,
78 /// The `while` keyword.
79 WhileKeyword,
80 /// The `for` keyword.
81 ForKeyword,
82 /// The `foreach` keyword.
83 ForeachKeyword,
84 /// The `do` keyword.
85 DoKeyword,
86 /// The `switch` keyword.
87 SwitchKeyword,
88 /// The `case` keyword.
89 CaseKeyword,
90 /// The `default` keyword.
91 DefaultKeyword,
92 /// The `break` keyword.
93 BreakKeyword,
94 /// The `continue` keyword.
95 ContinueKeyword,
96 /// The `return` keyword.
97 ReturnKeyword,
98 /// The `goto` keyword.
99 GotoKeyword,
100 /// The `try` keyword.
101 TryKeyword,
102 /// The `catch` keyword.
103 CatchKeyword,
104 /// The `finally` keyword.
105 FinallyKeyword,
106 /// The `throw` keyword.
107 ThrowKeyword,
108 /// The `scope` keyword.
109 ScopeKeyword,
110 /// The `with` keyword.
111 WithKeyword,
112 /// Another `synchronized` keyword variant.
113 SynchronizedKeyword2,
114 /// The `asm` keyword.
115 AsmKeyword,
116 /// The `mixin` keyword.
117 MixinKeyword,
118 /// The `template` keyword.
119 TemplateKeyword,
120 /// The `this` keyword.
121 ThisKeyword,
122 /// The `super` keyword.
123 SuperKeyword,
124 /// The `null` keyword.
125 NullKeyword,
126 /// The `true` keyword.
127 TrueKeyword,
128 /// The `false` keyword.
129 FalseKeyword,
130 /// The `cast` keyword.
131 CastKeyword,
132 /// The `new` keyword.
133 NewKeyword,
134 /// The `delete` keyword.
135 DeleteKeyword,
136 /// The `typeof` keyword.
137 TypeofKeyword,
138 /// The `typeid` keyword.
139 TypeidKeyword,
140 /// The `is` keyword.
141 IsKeyword,
142 /// The `in` keyword.
143 InKeyword,
144 /// The `out` keyword.
145 OutKeyword,
146 /// The `ref` keyword.
147 RefKeyword,
148 /// The `lazy` keyword.
149 LazyKeyword,
150 /// The `auto` keyword.
151 AutoKeyword,
152 /// The `alias` keyword.
153 AliasKeyword,
154 /// The `typedef` keyword.
155 TypedefKeyword,
156 /// The `extern` keyword.
157 ExternKeyword,
158 /// The `pure` keyword.
159 PureKeyword,
160 /// The `nothrow` keyword.
161 NothrowKeyword,
162 /// The `safe` keyword.
163 SafeKeyword,
164 /// The `trusted` keyword.
165 TrustedKeyword,
166 /// The `system` keyword.
167 SystemKeyword,
168 /// The `nogc` keyword.
169 NogcKeyword,
170 /// The `property` keyword.
171 PropertyKeyword,
172 /// The `disable` keyword.
173 DisableKeyword,
174 /// The `deprecated` keyword.
175 DeprecatedKeyword,
176 /// The `version` keyword.
177 VersionKeyword,
178 /// The `debug` keyword.
179 DebugKeyword,
180 /// The `unittest` keyword.
181 UnitTestKeyword,
182 /// The `invariant` keyword.
183 InvariantKeyword,
184 /// The `body` keyword.
185 BodyKeyword,
186 /// The `pragma` keyword.
187 PragmaKeyword,
188 /// The `align` keyword.
189 AlignKeyword,
190 /// The `void` type.
191 VoidType,
192 /// The `bool` type.
193 BoolType,
194 /// The `byte` type.
195 ByteType,
196 /// The `ubyte` type.
197 UbyteType,
198 /// The `short` type.
199 ShortType,
200 /// The `ushort` type.
201 UshortType,
202 /// The `int` type.
203 IntType,
204 /// The `uint` type.
205 UintType,
206 /// The `long` type.
207 LongType,
208 /// The `ulong` type.
209 UlongType,
210 /// The `cent` type.
211 CentType,
212 /// The `ucent` type.
213 UcentType,
214 /// The `float` type.
215 FloatType,
216 /// The `double` type.
217 DoubleType,
218 /// The `real` type.
219 RealType,
220 /// The `ifloat` type.
221 IfloatType,
222 /// The `idouble` type.
223 IdoubleType,
224 /// The `ireal` type.
225 IrealType,
226 /// The `cfloat` type.
227 CfloatType,
228 /// The `cdouble` type.
229 CdoubleType,
230 /// The `creal` type.
231 CrealType,
232 /// The `char` type.
233 CharType,
234 /// The `wchar` type.
235 WcharType,
236 /// The `dchar` type.
237 DcharType,
238 /// The `string` type.
239 StringType,
240 /// The `wstring` type.
241 WstringType,
242 /// The `dstring` type.
243 DstringType,
244 /// The `+` operator.
245 Plus,
246 /// The `-` operator.
247 Minus,
248 /// The `*` operator.
249 Multiply,
250 /// The `/` operator.
251 Divide,
252 /// The `%` operator.
253 Modulo,
254 /// The `&` operator.
255 BitwiseAnd,
256 /// The `|` operator.
257 BitwiseOr,
258 /// The `^` operator.
259 BitwiseXor,
260 /// The `~` operator.
261 BitwiseNot,
262 /// The `<<` operator.
263 LeftShift,
264 /// The `>>` operator.
265 RightShift,
266 /// The `>>>` operator.
267 UnsignedRightShift,
268 /// The `==` operator.
269 Equal,
270 /// The `!=` operator.
271 NotEqual,
272 /// The `<` operator.
273 Less,
274 /// The `<=` operator.
275 LessEqual,
276 /// The `>` operator.
277 Greater,
278 /// The `>=` operator.
279 GreaterEqual,
280 /// The `is` operator.
281 Identity,
282 /// The `!is` operator.
283 NotIdentity,
284 /// The `=` operator.
285 Assign,
286 /// The `+=` operator.
287 PlusAssign,
288 /// The `-=` operator.
289 MinusAssign,
290 /// The `*=` operator.
291 MultiplyAssign,
292 /// The `/=` operator.
293 DivideAssign,
294 /// The `%=` operator.
295 ModuloAssign,
296 /// The `&=` operator.
297 BitwiseAndAssign,
298 /// The `|=` operator.
299 BitwiseOrAssign,
300 /// The `^=` operator.
301 BitwiseXorAssign,
302 /// The `<<=` operator.
303 LeftShiftAssign,
304 /// The `>>=` operator.
305 RightShiftAssign,
306 /// The `>>>=` operator.
307 UnsignedRightShiftAssign,
308 /// The `~=` operator.
309 ConcatenateAssign,
310 /// The `&&` operator.
311 LogicalAnd,
312 /// The `||` operator.
313 LogicalOr,
314 /// The `++` operator.
315 Increment,
316 /// The `--` operator.
317 Decrement,
318 /// The `!` operator.
319 Not,
320 /// The `?` operator.
321 Question,
322 /// The `$` operator.
323 Dollar,
324 /// The `@` operator.
325 At,
326 /// Opening parenthesis (`(`).
327 LeftParen,
328 /// Closing parenthesis (`)`).
329 RightParen,
330 /// Opening bracket (`[`).
331 LeftBracket,
332 /// Closing bracket (`]`).
333 RightBracket,
334 /// Opening brace (`{`).
335 LeftBrace,
336 /// Closing brace (`}`).
337 RightBrace,
338 /// Semicolon (`;`).
339 Semicolon,
340 /// Comma (`,`).
341 Comma,
342 /// Dot (`.`).
343 Dot,
344 /// Double dot (`..`).
345 DotDot,
346 /// Triple dot (`...`).
347 DotDotDot,
348 /// Colon (`:`).
349 Colon,
350 /// Arrow (`->`).
351 Arrow,
352 /// Hash (`#`).
353 Hash,
354 /// An integer literal.
355 IntegerLiteral,
356 /// A floating-point literal.
357 FloatLiteral,
358 /// A string literal.
359 StringLiteral,
360 /// A character literal.
361 CharLiteral,
362 /// An identifier.
363 Identifier,
364 /// A line comment.
365 LineComment,
366 /// A block comment.
367 BlockComment,
368 /// A nested comment.
369 NestedComment,
370 /// Whitespace.
371 Whitespace,
372 /// A newline.
373 Newline,
374 /// End of stream.
375 Eof,
376 /// An error.
377 Error,
378}
379
380impl TokenType for DTokenType {
381 type Role = UniversalTokenRole;
382 const END_OF_STREAM: Self = Self::Eof;
383
384 fn is_ignored(&self) -> bool {
385 matches!(self, Self::Whitespace | Self::Newline | Self::LineComment | Self::BlockComment)
386 }
387
388 fn role(&self) -> Self::Role {
389 match self {
390 Self::Whitespace => UniversalTokenRole::Whitespace,
391 Self::Newline => UniversalTokenRole::Whitespace,
392 Self::LineComment => UniversalTokenRole::Comment,
393 Self::BlockComment => UniversalTokenRole::Comment,
394 Self::Eof => UniversalTokenRole::Eof,
395 Self::Error => UniversalTokenRole::Error,
396 _ => UniversalTokenRole::None,
397 }
398 }
399}