Skip to main content

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}