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}