1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum ZigElementType {
8 Root,
9 Whitespace,
11 Newline,
12 Comment,
13 DocComment,
14 Error,
15 Eof,
16
17 Identifier,
19 StringLiteral,
20 CharLiteral,
21 IntegerLiteral,
22 FloatLiteral,
23 BooleanLiteral,
24 Literal, Const,
28 Var,
29 Fn,
30 Struct,
31 Union,
32 Enum,
33 Opaque,
34 Type,
35 Comptime,
36 Inline,
37 NoInline,
38 Pub,
39 Export,
40 Extern,
41 Packed,
42 Align,
43 CallConv,
44 LinkSection,
45
46 If,
48 Else,
49 Switch,
50 While,
51 For,
52 Break,
53 Continue,
54 Return,
55 Defer,
56 ErrDefer,
57 Unreachable,
58 NoReturn,
59
60 ErrorKeyword,
62
63 Test,
65 Async,
66 Await,
67 Suspend,
68 Resume,
69 Cancel,
70
71 Undefined,
73 Null,
74 Volatile,
75 AllowZero,
76 NoAlias,
77
78 And,
80 Or,
81 AnyFrame,
82 AnyType,
83 ThreadLocal,
84
85 Bool,
87 I8,
88 I16,
89 I32,
90 I64,
91 I128,
92 Isize,
93 U8,
94 U16,
95 U32,
96 U64,
97 U128,
98 Usize,
99 F16,
100 F32,
101 F64,
102 F80,
103 F128,
104 CShort,
105 CUshort,
106 CInt,
107 CUint,
108 CLong,
109 CUlong,
110 CLongLong,
111 CUlongLong,
112 CLongDouble,
113 CVoid,
114 Void,
115 ComptimeInt,
116 ComptimeFloat,
117
118 Plus,
120 Minus,
121 Star,
122 Slash,
123 Percent,
124 StarStar,
125 PlusPercent,
126 MinusPercent,
127 StarPercent,
128 PlusPlus,
129 MinusMinus,
130
131 Ampersand,
133 Pipe,
134 Caret,
135 Tilde,
136 LessLess,
137 GreaterGreater,
138
139 Equal,
141 NotEqual,
142 Less,
143 Greater,
144 LessEqual,
145 GreaterEqual,
146
147 AndAnd,
149 OrOr,
150
151 Assign,
153 PlusAssign,
154 MinusAssign,
155 StarAssign,
156 SlashAssign,
157 PercentAssign,
158 AmpersandAssign,
159 PipeAssign,
160 CaretAssign,
161 LessLessAssign,
162 GreaterGreaterAssign,
163
164 LeftParen,
166 RightParen,
167 LeftBrace,
168 RightBrace,
169 LeftBracket,
170 RightBracket,
171 Semicolon,
172 Comma,
173 Dot,
174 DotDot,
175 DotDotDot,
176 DotQuestion,
177 DotStar,
178 Colon,
179 Question,
180 Exclamation,
181 Arrow,
182 FatArrow,
183 OrElse,
184 CatchKeyword,
185 TryKeyword,
186 AwaitKeyword,
187 At,
188 BuiltinIdentifier,
189 StringStart,
190 StringEnd,
191 StringContent,
192 InterpolationStart,
193 InterpolationEnd,
194 MultilineStringStart,
195 MultilineStringEnd,
196 MultilineStringContent,
197 CompileDirective,
198 Text,
199
200 FnDeclaration,
202 VarDeclaration,
203 StructDeclaration,
204 EnumDeclaration,
205 UnionDeclaration,
206 IfStatement,
207 WhileStatement,
208 ForStatement,
209 ReturnStatement,
210 Block,
211 BinaryExpr,
212 UnaryExpr,
213}
214
215impl ElementType for ZigElementType {
216 type Role = UniversalElementRole;
217
218 fn role(&self) -> Self::Role {
219 match self {
220 _ => UniversalElementRole::None,
221 }
222 }
223}
224
225impl From<crate::lexer::token_type::ZigTokenType> for ZigElementType {
226 fn from(token: crate::lexer::token_type::ZigTokenType) -> Self {
227 use crate::lexer::token_type::ZigTokenType as T;
228 match token {
229 T::Root => ZigElementType::Root,
230 T::Whitespace => ZigElementType::Whitespace,
231 T::Newline => ZigElementType::Newline,
232 T::Comment => ZigElementType::Comment,
233 T::DocComment => ZigElementType::DocComment,
234 T::Error => ZigElementType::Error,
235 T::Eof => ZigElementType::Eof,
236 T::Identifier => ZigElementType::Identifier,
237 T::StringLiteral => ZigElementType::StringLiteral,
238 T::CharLiteral => ZigElementType::CharLiteral,
239 T::IntegerLiteral => ZigElementType::IntegerLiteral,
240 T::FloatLiteral => ZigElementType::FloatLiteral,
241 T::BooleanLiteral => ZigElementType::BooleanLiteral,
242 T::Const => ZigElementType::Const,
243 T::Var => ZigElementType::Var,
244 T::Fn => ZigElementType::Fn,
245 T::Struct => ZigElementType::Struct,
246 T::Union => ZigElementType::Union,
247 T::Enum => ZigElementType::Enum,
248 T::Opaque => ZigElementType::Opaque,
249 T::Type => ZigElementType::Type,
250 T::Comptime => ZigElementType::Comptime,
251 T::Inline => ZigElementType::Inline,
252 T::NoInline => ZigElementType::NoInline,
253 T::Pub => ZigElementType::Pub,
254 T::Export => ZigElementType::Export,
255 T::Extern => ZigElementType::Extern,
256 T::Packed => ZigElementType::Packed,
257 T::Align => ZigElementType::Align,
258 T::CallConv => ZigElementType::CallConv,
259 T::LinkSection => ZigElementType::LinkSection,
260 T::If => ZigElementType::If,
261 T::Else => ZigElementType::Else,
262 T::Switch => ZigElementType::Switch,
263 T::While => ZigElementType::While,
264 T::For => ZigElementType::For,
265 T::Break => ZigElementType::Break,
266 T::Continue => ZigElementType::Continue,
267 T::Return => ZigElementType::Return,
268 T::Defer => ZigElementType::Defer,
269 T::ErrDefer => ZigElementType::ErrDefer,
270 T::Unreachable => ZigElementType::Unreachable,
271 T::NoReturn => ZigElementType::NoReturn,
272 T::ErrorKeyword => ZigElementType::ErrorKeyword,
273 T::Test => ZigElementType::Test,
274 T::Async => ZigElementType::Async,
275 T::Await => ZigElementType::Await,
276 T::Suspend => ZigElementType::Suspend,
277 T::Resume => ZigElementType::Resume,
278 T::Cancel => ZigElementType::Cancel,
279 T::Undefined => ZigElementType::Undefined,
280 T::Null => ZigElementType::Null,
281 T::Volatile => ZigElementType::Volatile,
282 T::AllowZero => ZigElementType::AllowZero,
283 T::NoAlias => ZigElementType::NoAlias,
284 T::And => ZigElementType::And,
285 T::Or => ZigElementType::Or,
286 T::AnyFrame => ZigElementType::AnyFrame,
287 T::AnyType => ZigElementType::AnyType,
288 T::ThreadLocal => ZigElementType::ThreadLocal,
289 T::Bool => ZigElementType::Bool,
290 T::I8 => ZigElementType::I8,
291 T::I16 => ZigElementType::I16,
292 T::I32 => ZigElementType::I32,
293 T::I64 => ZigElementType::I64,
294 T::I128 => ZigElementType::I128,
295 T::Isize => ZigElementType::Isize,
296 T::U8 => ZigElementType::U8,
297 T::U16 => ZigElementType::U16,
298 T::U32 => ZigElementType::U32,
299 T::U64 => ZigElementType::U64,
300 T::U128 => ZigElementType::U128,
301 T::Usize => ZigElementType::Usize,
302 T::F16 => ZigElementType::F16,
303 T::F32 => ZigElementType::F32,
304 T::F64 => ZigElementType::F64,
305 T::F80 => ZigElementType::F80,
306 T::F128 => ZigElementType::F128,
307 T::CShort => ZigElementType::CShort,
308 T::CUshort => ZigElementType::CUshort,
309 T::CInt => ZigElementType::CInt,
310 T::CUint => ZigElementType::CUint,
311 T::CLong => ZigElementType::CLong,
312 T::CUlong => ZigElementType::CUlong,
313 T::CLongLong => ZigElementType::CLongLong,
314 T::CUlongLong => ZigElementType::CUlongLong,
315 T::CLongDouble => ZigElementType::CLongDouble,
316 T::CVoid => ZigElementType::CVoid,
317 T::Void => ZigElementType::Void,
318 T::ComptimeInt => ZigElementType::ComptimeInt,
319 T::ComptimeFloat => ZigElementType::ComptimeFloat,
320 T::Plus => ZigElementType::Plus,
321 T::Minus => ZigElementType::Minus,
322 T::Star => ZigElementType::Star,
323 T::Slash => ZigElementType::Slash,
324 T::Percent => ZigElementType::Percent,
325 T::StarStar => ZigElementType::StarStar,
326 T::PlusPercent => ZigElementType::PlusPercent,
327 T::MinusPercent => ZigElementType::MinusPercent,
328 T::StarPercent => ZigElementType::StarPercent,
329 T::PlusPlus => ZigElementType::PlusPlus,
330 T::MinusMinus => ZigElementType::MinusMinus,
331 T::Ampersand => ZigElementType::Ampersand,
332 T::Pipe => ZigElementType::Pipe,
333 T::Caret => ZigElementType::Caret,
334 T::Tilde => ZigElementType::Tilde,
335 T::LessLess => ZigElementType::LessLess,
336 T::GreaterGreater => ZigElementType::GreaterGreater,
337 T::Equal => ZigElementType::Equal,
338 T::NotEqual => ZigElementType::NotEqual,
339 T::Less => ZigElementType::Less,
340 T::Greater => ZigElementType::Greater,
341 T::LessEqual => ZigElementType::LessEqual,
342 T::GreaterEqual => ZigElementType::GreaterEqual,
343 T::AndAnd => ZigElementType::AndAnd,
344 T::OrOr => ZigElementType::OrOr,
345 T::Assign => ZigElementType::Assign,
346 T::PlusAssign => ZigElementType::PlusAssign,
347 T::MinusAssign => ZigElementType::MinusAssign,
348 T::StarAssign => ZigElementType::StarAssign,
349 T::SlashAssign => ZigElementType::SlashAssign,
350 T::PercentAssign => ZigElementType::PercentAssign,
351 T::AmpersandAssign => ZigElementType::AmpersandAssign,
352 T::PipeAssign => ZigElementType::PipeAssign,
353 T::CaretAssign => ZigElementType::CaretAssign,
354 T::LessLessAssign => ZigElementType::LessLessAssign,
355 T::GreaterGreaterAssign => ZigElementType::GreaterGreaterAssign,
356 T::LeftParen => ZigElementType::LeftParen,
357 T::RightParen => ZigElementType::RightParen,
358 T::LeftBrace => ZigElementType::LeftBrace,
359 T::RightBrace => ZigElementType::RightBrace,
360 T::LeftBracket => ZigElementType::LeftBracket,
361 T::RightBracket => ZigElementType::RightBracket,
362 T::Semicolon => ZigElementType::Semicolon,
363 T::Comma => ZigElementType::Comma,
364 T::Dot => ZigElementType::Dot,
365 T::DotDot => ZigElementType::DotDot,
366 T::DotDotDot => ZigElementType::DotDotDot,
367 T::DotQuestion => ZigElementType::DotQuestion,
368 T::DotStar => ZigElementType::DotStar,
369 T::Colon => ZigElementType::Colon,
370 T::Question => ZigElementType::Question,
371 T::Exclamation => ZigElementType::Exclamation,
372 T::Arrow => ZigElementType::Arrow,
373 T::FatArrow => ZigElementType::FatArrow,
374 T::OrElse => ZigElementType::OrElse,
375 T::CatchKeyword => ZigElementType::CatchKeyword,
376 T::TryKeyword => ZigElementType::TryKeyword,
377 T::AwaitKeyword => ZigElementType::AwaitKeyword,
378 T::At => ZigElementType::At,
379 T::BuiltinIdentifier => ZigElementType::BuiltinIdentifier,
380 T::StringStart => ZigElementType::StringStart,
381 T::StringEnd => ZigElementType::StringEnd,
382 T::StringContent => ZigElementType::StringContent,
383 T::InterpolationStart => ZigElementType::InterpolationStart,
384 T::InterpolationEnd => ZigElementType::InterpolationEnd,
385 T::MultilineStringStart => ZigElementType::MultilineStringStart,
386 T::MultilineStringEnd => ZigElementType::MultilineStringEnd,
387 T::MultilineStringContent => ZigElementType::MultilineStringContent,
388 T::CompileDirective => ZigElementType::CompileDirective,
389 T::Text => ZigElementType::Text,
390 T::FnDeclaration => ZigElementType::FnDeclaration,
391 T::VarDeclaration => ZigElementType::VarDeclaration,
392 T::StructDeclaration => ZigElementType::StructDeclaration,
393 T::EnumDeclaration => ZigElementType::EnumDeclaration,
394 T::UnionDeclaration => ZigElementType::UnionDeclaration,
395 T::Block => ZigElementType::Block,
396 T::IfStatement => ZigElementType::IfStatement,
397 T::WhileStatement => ZigElementType::WhileStatement,
398 T::ForStatement => ZigElementType::ForStatement,
399 T::ReturnStatement => ZigElementType::ReturnStatement,
400 }
401 }
402}