Skip to main content

oak_groovy/parser/
element_type.rs

1//! Element types for the Groovy language.
2
3use oak_core::{ElementType, UniversalElementRole};
4
5/// Element types for the Groovy AST.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[repr(u16)]
9pub enum GroovyElementType {
10    /// Root node.
11    Root,
12    /// Source file.
13    SourceFile,
14    // --- Literals ---
15    /// Integer literal.
16    IntLiteral,
17    /// Floating point literal.
18    FloatLiteral,
19    /// String literal.
20    StringLiteral,
21    /// Character literal.
22    CharLiteral,
23    /// Boolean literal.
24    BooleanLiteral,
25    /// Null literal.
26    NullLiteral,
27
28    // --- Identifiers ---
29    /// Identifier.
30    Identifier,
31
32    // --- Keywords ---
33    /// `abstract` keyword.
34    AbstractKeyword,
35    /// `as` keyword.
36    AsKeyword,
37    /// `assert` keyword.
38    AssertKeyword,
39    /// `break` keyword.
40    BreakKeyword,
41    /// `case` keyword.
42    CaseKeyword,
43    /// `catch` keyword.
44    CatchKeyword,
45    /// `class` keyword.
46    ClassKeyword,
47    /// `const` keyword.
48    ConstKeyword,
49    /// `continue` keyword.
50    ContinueKeyword,
51    /// `def` keyword.
52    DefKeyword,
53    /// `default` keyword.
54    DefaultKeyword,
55    /// `do` keyword.
56    DoKeyword,
57    /// `else` keyword.
58    ElseKeyword,
59    /// `enum` keyword.
60    EnumKeyword,
61    /// `extends` keyword.
62    ExtendsKeyword,
63    /// `final` keyword.
64    FinalKeyword,
65    /// `finally` keyword.
66    FinallyKeyword,
67    /// `for` keyword.
68    ForKeyword,
69    /// `goto` keyword.
70    GotoKeyword,
71    /// `if` keyword.
72    IfKeyword,
73    /// `implements` keyword.
74    ImplementsKeyword,
75    /// `import` keyword.
76    ImportKeyword,
77    /// `in` keyword.
78    InKeyword,
79    /// `instanceof` keyword.
80    InstanceofKeyword,
81    /// `interface` keyword.
82    InterfaceKeyword,
83    /// `native` keyword.
84    NativeKeyword,
85    /// `new` keyword.
86    NewKeyword,
87    /// `package` keyword.
88    PackageKeyword,
89    /// `private` keyword.
90    PrivateKeyword,
91    /// `protected` keyword.
92    ProtectedKeyword,
93    /// `public` keyword.
94    PublicKeyword,
95    /// `return` keyword.
96    ReturnKeyword,
97    /// `static` keyword.
98    StaticKeyword,
99    /// `strictfp` keyword.
100    StrictfpKeyword,
101    /// `super` keyword.
102    SuperKeyword,
103    /// `switch` keyword.
104    SwitchKeyword,
105    /// `synchronized` keyword.
106    SynchronizedKeyword,
107    /// `this` keyword.
108    ThisKeyword,
109    /// `throw` keyword.
110    ThrowKeyword,
111    /// `throws` keyword.
112    ThrowsKeyword,
113    /// `trait` keyword.
114    TraitKeyword,
115    /// `transient` keyword.
116    TransientKeyword,
117    /// `try` keyword.
118    TryKeyword,
119    /// `void` keyword.
120    VoidKeyword,
121    /// `volatile` keyword.
122    VolatileKeyword,
123    /// `while` keyword.
124    WhileKeyword,
125
126    // --- Operators ---
127    /// Plus `+`.
128    Plus,
129    /// Minus `-`.
130    Minus,
131    /// Star `*`.
132    Star,
133    /// Slash `/`.
134    Slash,
135    /// Percent `%`.
136    Percent,
137    /// Power `**`.
138    Power,
139
140    /// Assign `=`.
141    Assign,
142    /// Plus assign `+=`.
143    PlusAssign,
144    /// Minus assign `-=`.
145    MinusAssign,
146    /// Star assign `*=`.
147    StarAssign,
148    /// Slash assign `/=`.
149    SlashAssign,
150    /// Percent assign `%=`.
151    PercentAssign,
152    /// Power assign `**=`.
153    PowerAssign,
154
155    /// Equal `==`.
156    Equal,
157    /// Not equal `!=`.
158    NotEqual,
159    /// Less than `<`.
160    Less,
161    /// Greater than `>`.
162    Greater,
163    /// Less than or equal `<=`.
164    LessEqual,
165    /// Greater than or equal `>=`.
166    GreaterEqual,
167    /// Spaceship operator `<=>`.
168    Spaceship,
169
170    /// Logical AND `&&`.
171    LogicalAnd,
172    /// Logical OR `||`.
173    LogicalOr,
174    /// Logical NOT `!`.
175    LogicalNot,
176
177    /// Bitwise AND `&`.
178    BitAnd,
179    /// Bitwise OR `|`.
180    BitOr,
181    /// Bitwise XOR `^`.
182    BitXor,
183    /// Bitwise NOT `~`.
184    BitNot,
185    /// Left shift `<<`.
186    LeftShift,
187    /// Right shift `>>`.
188    RightShift,
189    /// Unsigned right shift `>>>`.
190    UnsignedRightShift,
191
192    /// Increment `++`.
193    Increment,
194    /// Decrement `--`.
195    Decrement,
196
197    /// Question mark `?`.
198    Question,
199    /// Colon `:`.
200    Colon,
201    /// Elvis operator `?:`.
202    Elvis,
203    /// Safe navigation operator `?.`.
204    SafeNavigation,
205
206    // --- Delimiters ---
207    /// Left parenthesis `(`.
208    LeftParen,
209    /// Right parenthesis `)`.
210    RightParen,
211    /// Left bracket `[`.
212    LeftBracket,
213    /// Right bracket `]`.
214    RightBracket,
215    /// Left brace `{`.
216    LeftBrace,
217    /// Right brace `}`.
218    RightBrace,
219    /// Comma `,`.
220    Comma,
221    /// Period `.`.
222    Period,
223    /// Semicolon `;`.
224    Semicolon,
225    /// At symbol `@`.
226    At,
227
228    // --- Whitespace and Comments ---
229    /// Whitespace.
230    Whitespace,
231    /// Comment.
232    Comment,
233
234    // --- Special ---
235    /// Newline.
236    Newline,
237    /// End of file.
238    Eof,
239    /// Error token.
240    Error,
241}
242
243impl ElementType for GroovyElementType {
244    type Role = UniversalElementRole;
245
246    fn role(&self) -> Self::Role {
247        match self {
248            Self::Root => UniversalElementRole::Root,
249            _ => UniversalElementRole::None,
250        }
251    }
252}
253
254impl From<crate::lexer::token_type::GroovyTokenType> for GroovyElementType {
255    fn from(token: crate::lexer::token_type::GroovyTokenType) -> Self {
256        unsafe { std::mem::transmute(token) }
257    }
258}