1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum ZigElementType {
7 Root,
9 Whitespace,
11 Newline,
13 Comment,
15 DocComment,
17 Error,
19 Eof,
21
22 Identifier,
24 StringLiteral,
26 CharLiteral,
28 IntegerLiteral,
30 FloatLiteral,
32 BooleanLiteral,
34 Literal,
36
37 Const,
39 Var,
41 Fn,
43 Struct,
45 Union,
47 Enum,
49 Opaque,
51 Type,
53 Comptime,
55 Inline,
57 NoInline,
59 Pub,
61 Export,
63 Extern,
65 Packed,
67 Align,
69 CallConv,
71 LinkSection,
73
74 If,
76 Else,
78 Switch,
80 While,
82 For,
84 Break,
86 Continue,
88 Return,
90 Defer,
92 ErrDefer,
94 Unreachable,
96 NoReturn,
98
99 ErrorKeyword,
101
102 Test,
104 Async,
106 Await,
108 Suspend,
110 Resume,
112 Cancel,
114
115 Undefined,
117 Null,
119 Volatile,
121 AllowZero,
123 NoAlias,
125
126 And,
128 Or,
130 AnyFrame,
132 AnyType,
134 ThreadLocal,
136
137 Bool,
139 I8,
141 I16,
143 I32,
145 I64,
147 I128,
149 Isize,
151 U8,
153 U16,
155 U32,
157 U64,
159 U128,
161 Usize,
163 F16,
165 F32,
167 F64,
169 F80,
171 F128,
173 CShort,
175 CUshort,
177 CInt,
179 CUint,
181 CLong,
183 CUlong,
185 CLongLong,
187 CUlongLong,
189 CLongDouble,
191 CVoid,
193 Void,
195 ComptimeInt,
197 ComptimeFloat,
199
200 Plus,
202 Minus,
204 Star,
206 Slash,
208 Percent,
210 StarStar,
212 PlusPercent,
214 MinusPercent,
216 StarPercent,
218 PlusPlus,
220 MinusMinus,
222
223 Ampersand,
225 Pipe,
227 Caret,
229 Tilde,
231 LessLess,
233 GreaterGreater,
235
236 Equal,
238 NotEqual,
240 Less,
242 Greater,
244 LessEqual,
246 GreaterEqual,
248
249 AndAnd,
251 OrOr,
253
254 Assign,
256 PlusAssign,
258 MinusAssign,
260 StarAssign,
262 SlashAssign,
264 PercentAssign,
266 AmpersandAssign,
268 PipeAssign,
270 CaretAssign,
272 LessLessAssign,
274 GreaterGreaterAssign,
276
277 LeftParen,
279 RightParen,
281 LeftBrace,
283 RightBrace,
285 LeftBracket,
287 RightBracket,
289 Semicolon,
291 Comma,
293 Dot,
295 DotDot,
297 DotDotDot,
299 DotQuestion,
301 DotStar,
303 Colon,
305 Question,
307 Exclamation,
309 Arrow,
311 FatArrow,
313
314 OrElse,
316 CatchKeyword,
318 TryKeyword,
320 AwaitKeyword,
322
323 At,
325 BuiltinIdentifier,
327
328 StringStart,
330 StringEnd,
332 StringContent,
334 InterpolationStart,
336 InterpolationEnd,
338
339 MultilineStringStart,
341 MultilineStringEnd,
343 MultilineStringContent,
345
346 CompileDirective,
348
349 Text,
351
352 FnDeclaration,
354 VarDeclaration,
356 StructDeclaration,
358 EnumDeclaration,
360 UnionDeclaration,
362 IfStatement,
364 WhileStatement,
366 ForStatement,
368 ReturnStatement,
370 Block,
372 BinaryExpr,
374 UnaryExpr,
376
377 ContainerField,
379 BreakStatement,
381 ContinueStatement,
383 DeferStatement,
385}
386
387impl ElementType for ZigElementType {
388 type Role = UniversalElementRole;
389
390 fn role(&self) -> Self::Role {
391 match self {
392 _ => UniversalElementRole::None,
393 }
394 }
395}
396
397impl From<crate::lexer::token_type::ZigTokenType> for ZigElementType {
398 fn from(token: crate::lexer::token_type::ZigTokenType) -> Self {
399 use crate::lexer::token_type::ZigTokenType as T;
400 match token {
401 T::Root => ZigElementType::Root,
402 T::Whitespace => ZigElementType::Whitespace,
403 T::Newline => ZigElementType::Newline,
404 T::Comment => ZigElementType::Comment,
405 T::DocComment => ZigElementType::DocComment,
406 T::Error => ZigElementType::Error,
407 T::Eof => ZigElementType::Eof,
408 T::Identifier => ZigElementType::Identifier,
409 T::StringLiteral => ZigElementType::StringLiteral,
410 T::CharLiteral => ZigElementType::CharLiteral,
411 T::IntegerLiteral => ZigElementType::IntegerLiteral,
412 T::FloatLiteral => ZigElementType::FloatLiteral,
413 T::BooleanLiteral => ZigElementType::BooleanLiteral,
414 T::Const => ZigElementType::Const,
415 T::Var => ZigElementType::Var,
416 T::Fn => ZigElementType::Fn,
417 T::Struct => ZigElementType::Struct,
418 T::Union => ZigElementType::Union,
419 T::Enum => ZigElementType::Enum,
420 T::Opaque => ZigElementType::Opaque,
421 T::Type => ZigElementType::Type,
422 T::Comptime => ZigElementType::Comptime,
423 T::Inline => ZigElementType::Inline,
424 T::NoInline => ZigElementType::NoInline,
425 T::Pub => ZigElementType::Pub,
426 T::Export => ZigElementType::Export,
427 T::Extern => ZigElementType::Extern,
428 T::Packed => ZigElementType::Packed,
429 T::Align => ZigElementType::Align,
430 T::CallConv => ZigElementType::CallConv,
431 T::LinkSection => ZigElementType::LinkSection,
432 T::If => ZigElementType::If,
433 T::Else => ZigElementType::Else,
434 T::Switch => ZigElementType::Switch,
435 T::While => ZigElementType::While,
436 T::For => ZigElementType::For,
437 T::Break => ZigElementType::Break,
438 T::Continue => ZigElementType::Continue,
439 T::Return => ZigElementType::Return,
440 T::Defer => ZigElementType::Defer,
441 T::ErrDefer => ZigElementType::ErrDefer,
442 T::Unreachable => ZigElementType::Unreachable,
443 T::NoReturn => ZigElementType::NoReturn,
444 T::ErrorKeyword => ZigElementType::ErrorKeyword,
445 T::Test => ZigElementType::Test,
446 T::Async => ZigElementType::Async,
447 T::Await => ZigElementType::Await,
448 T::Suspend => ZigElementType::Suspend,
449 T::Resume => ZigElementType::Resume,
450 T::Cancel => ZigElementType::Cancel,
451 T::Undefined => ZigElementType::Undefined,
452 T::Null => ZigElementType::Null,
453 T::Volatile => ZigElementType::Volatile,
454 T::AllowZero => ZigElementType::AllowZero,
455 T::NoAlias => ZigElementType::NoAlias,
456 T::And => ZigElementType::And,
457 T::Or => ZigElementType::Or,
458 T::AnyFrame => ZigElementType::AnyFrame,
459 T::AnyType => ZigElementType::AnyType,
460 T::ThreadLocal => ZigElementType::ThreadLocal,
461 T::Bool => ZigElementType::Bool,
462 T::I8 => ZigElementType::I8,
463 T::I16 => ZigElementType::I16,
464 T::I32 => ZigElementType::I32,
465 T::I64 => ZigElementType::I64,
466 T::I128 => ZigElementType::I128,
467 T::Isize => ZigElementType::Isize,
468 T::U8 => ZigElementType::U8,
469 T::U16 => ZigElementType::U16,
470 T::U32 => ZigElementType::U32,
471 T::U64 => ZigElementType::U64,
472 T::U128 => ZigElementType::U128,
473 T::Usize => ZigElementType::Usize,
474 T::F16 => ZigElementType::F16,
475 T::F32 => ZigElementType::F32,
476 T::F64 => ZigElementType::F64,
477 T::F80 => ZigElementType::F80,
478 T::F128 => ZigElementType::F128,
479 T::CShort => ZigElementType::CShort,
480 T::CUshort => ZigElementType::CUshort,
481 T::CInt => ZigElementType::CInt,
482 T::CUint => ZigElementType::CUint,
483 T::CLong => ZigElementType::CLong,
484 T::CUlong => ZigElementType::CUlong,
485 T::CLongLong => ZigElementType::CLongLong,
486 T::CUlongLong => ZigElementType::CUlongLong,
487 T::CLongDouble => ZigElementType::CLongDouble,
488 T::CVoid => ZigElementType::CVoid,
489 T::Void => ZigElementType::Void,
490 T::ComptimeInt => ZigElementType::ComptimeInt,
491 T::ComptimeFloat => ZigElementType::ComptimeFloat,
492 T::Plus => ZigElementType::Plus,
493 T::Minus => ZigElementType::Minus,
494 T::Star => ZigElementType::Star,
495 T::Slash => ZigElementType::Slash,
496 T::Percent => ZigElementType::Percent,
497 T::StarStar => ZigElementType::StarStar,
498 T::PlusPercent => ZigElementType::PlusPercent,
499 T::MinusPercent => ZigElementType::MinusPercent,
500 T::StarPercent => ZigElementType::StarPercent,
501 T::PlusPlus => ZigElementType::PlusPlus,
502 T::MinusMinus => ZigElementType::MinusMinus,
503 T::Ampersand => ZigElementType::Ampersand,
504 T::Pipe => ZigElementType::Pipe,
505 T::Caret => ZigElementType::Caret,
506 T::Tilde => ZigElementType::Tilde,
507 T::LessLess => ZigElementType::LessLess,
508 T::GreaterGreater => ZigElementType::GreaterGreater,
509 T::Equal => ZigElementType::Equal,
510 T::NotEqual => ZigElementType::NotEqual,
511 T::Less => ZigElementType::Less,
512 T::Greater => ZigElementType::Greater,
513 T::LessEqual => ZigElementType::LessEqual,
514 T::GreaterEqual => ZigElementType::GreaterEqual,
515 T::AndAnd => ZigElementType::AndAnd,
516 T::OrOr => ZigElementType::OrOr,
517 T::Assign => ZigElementType::Assign,
518 T::PlusAssign => ZigElementType::PlusAssign,
519 T::MinusAssign => ZigElementType::MinusAssign,
520 T::StarAssign => ZigElementType::StarAssign,
521 T::SlashAssign => ZigElementType::SlashAssign,
522 T::PercentAssign => ZigElementType::PercentAssign,
523 T::AmpersandAssign => ZigElementType::AmpersandAssign,
524 T::PipeAssign => ZigElementType::PipeAssign,
525 T::CaretAssign => ZigElementType::CaretAssign,
526 T::LessLessAssign => ZigElementType::LessLessAssign,
527 T::GreaterGreaterAssign => ZigElementType::GreaterGreaterAssign,
528 T::LeftParen => ZigElementType::LeftParen,
529 T::RightParen => ZigElementType::RightParen,
530 T::LeftBrace => ZigElementType::LeftBrace,
531 T::RightBrace => ZigElementType::RightBrace,
532 T::LeftBracket => ZigElementType::LeftBracket,
533 T::RightBracket => ZigElementType::RightBracket,
534 T::Semicolon => ZigElementType::Semicolon,
535 T::Comma => ZigElementType::Comma,
536 T::Dot => ZigElementType::Dot,
537 T::DotDot => ZigElementType::DotDot,
538 T::DotDotDot => ZigElementType::DotDotDot,
539 T::DotQuestion => ZigElementType::DotQuestion,
540 T::DotStar => ZigElementType::DotStar,
541 T::Colon => ZigElementType::Colon,
542 T::Question => ZigElementType::Question,
543 T::Exclamation => ZigElementType::Exclamation,
544 T::Arrow => ZigElementType::Arrow,
545 T::FatArrow => ZigElementType::FatArrow,
546 T::OrElse => ZigElementType::OrElse,
547 T::CatchKeyword => ZigElementType::CatchKeyword,
548 T::TryKeyword => ZigElementType::TryKeyword,
549 T::AwaitKeyword => ZigElementType::AwaitKeyword,
550 T::At => ZigElementType::At,
551 T::BuiltinIdentifier => ZigElementType::BuiltinIdentifier,
552 T::StringStart => ZigElementType::StringStart,
553 T::StringEnd => ZigElementType::StringEnd,
554 T::StringContent => ZigElementType::StringContent,
555 T::InterpolationStart => ZigElementType::InterpolationStart,
556 T::InterpolationEnd => ZigElementType::InterpolationEnd,
557 T::MultilineStringStart => ZigElementType::MultilineStringStart,
558 T::MultilineStringEnd => ZigElementType::MultilineStringEnd,
559 T::MultilineStringContent => ZigElementType::MultilineStringContent,
560 T::CompileDirective => ZigElementType::CompileDirective,
561 T::Text => ZigElementType::Text,
562 T::FnDeclaration => ZigElementType::FnDeclaration,
563 T::VarDeclaration => ZigElementType::VarDeclaration,
564 T::StructDeclaration => ZigElementType::StructDeclaration,
565 T::EnumDeclaration => ZigElementType::EnumDeclaration,
566 T::UnionDeclaration => ZigElementType::UnionDeclaration,
567 T::Block => ZigElementType::Block,
568 T::IfStatement => ZigElementType::IfStatement,
569 T::WhileStatement => ZigElementType::WhileStatement,
570 T::ForStatement => ZigElementType::ForStatement,
571 T::ReturnStatement => ZigElementType::ReturnStatement,
572 }
573 }
574}