1use oak_core::{ElementType, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2
3pub type DToken = Token<DSyntaxKind>;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
8pub enum DSyntaxKind {
9 Root,
11 Module,
13 Declaration,
15 Statement,
17 Expression,
19 Type,
21 Aggregate,
23 Import,
25 ModuleKeyword,
27 ImportKeyword,
29 PublicKeyword,
31 PrivateKeyword,
33 ProtectedKeyword,
35 PackageKeyword,
37 ExportKeyword,
39 StaticKeyword,
41 FinalKeyword,
43 AbstractKeyword,
45 OverrideKeyword,
47 SynchronizedKeyword,
49 ConstKeyword,
51 ImmutableKeyword,
53 InoutKeyword,
55 SharedKeyword,
57 ClassKeyword,
59 StructKeyword,
61 InterfaceKeyword,
63 UnionKeyword,
65 EnumKeyword,
67 FunctionKeyword,
69 DelegateKeyword,
71 IfKeyword,
73 ElseKeyword,
75 WhileKeyword,
77 ForKeyword,
79 ForeachKeyword,
81 DoKeyword,
83 SwitchKeyword,
85 CaseKeyword,
87 DefaultKeyword,
89 BreakKeyword,
91 ContinueKeyword,
93 ReturnKeyword,
95 GotoKeyword,
97 TryKeyword,
99 CatchKeyword,
101 FinallyKeyword,
103 ThrowKeyword,
105 ScopeKeyword,
107 WithKeyword,
109 SynchronizedKeyword2,
111 AsmKeyword,
113 MixinKeyword,
115 TemplateKeyword,
117 ThisKeyword,
119 SuperKeyword,
121 NullKeyword,
123 TrueKeyword,
125 FalseKeyword,
127 CastKeyword,
129 NewKeyword,
131 DeleteKeyword,
133 TypeofKeyword,
135 TypeidKeyword,
137 IsKeyword,
139 InKeyword,
141 OutKeyword,
143 RefKeyword,
145 LazyKeyword,
147 AutoKeyword,
149 AliasKeyword,
151 TypedefKeyword,
153 ExternKeyword,
155 PureKeyword,
157 NothrowKeyword,
159 SafeKeyword,
161 TrustedKeyword,
163 SystemKeyword,
165 NogcKeyword,
167 PropertyKeyword,
169 DisableKeyword,
171 DeprecatedKeyword,
173 VersionKeyword,
175 DebugKeyword,
177 UnitTestKeyword,
179 InvariantKeyword,
181 BodyKeyword,
183 PragmaKeyword,
185 AlignKeyword,
187
188 VoidType,
191 BoolType,
193 ByteType,
195 UbyteType,
197 ShortType,
199 UshortType,
201 IntType,
203 UintType,
205 LongType,
207 UlongType,
209 CentType,
211 UcentType,
213 FloatType,
215 DoubleType,
217 RealType,
219 IfloatType,
221 IdoubleType,
223 IrealType,
225 CfloatType,
227 CdoubleType,
229 CrealType,
231 CharType,
233 WcharType,
235 DcharType,
237 StringType,
239 WstringType,
241 DstringType,
243
244 Plus,
247 Minus,
249 Multiply,
251 Divide,
253 Modulo,
255 BitwiseAnd,
257 BitwiseOr,
259 BitwiseXor,
261 BitwiseNot,
263 LeftShift,
265 RightShift,
267 UnsignedRightShift,
269 Equal,
271 NotEqual,
273 Less,
275 LessEqual,
277 Greater,
279 GreaterEqual,
281 Identity,
283 NotIdentity,
285 Assign,
287 PlusAssign,
289 MinusAssign,
291 MultiplyAssign,
293 DivideAssign,
295 ModuloAssign,
297 BitwiseAndAssign,
299 BitwiseOrAssign,
301 BitwiseXorAssign,
303 LeftShiftAssign,
305 RightShiftAssign,
307 UnsignedRightShiftAssign,
309 ConcatenateAssign,
311 LogicalAnd,
313 LogicalOr,
315 Increment,
317 Decrement,
319 Not,
321 Question,
323 Dollar,
325 At,
327
328 LeftParen,
331 RightParen,
333 LeftBracket,
335 RightBracket,
337 LeftBrace,
339 RightBrace,
341 Semicolon,
343 Comma,
345 Dot,
347 DotDot,
349 DotDotDot,
351 Colon,
353 Arrow,
355 Hash,
357
358 IntegerLiteral,
361 FloatLiteral,
363 StringLiteral,
365 CharLiteral,
367
368 Identifier,
371 LineComment,
373 BlockComment,
375 NestedComment,
377
378 Whitespace,
381 Newline,
383 Eof,
385 Error,
387}
388
389impl TokenType for DSyntaxKind {
390 const END_OF_STREAM: Self = Self::Eof;
391 type Role = UniversalTokenRole;
392
393 fn role(&self) -> Self::Role {
394 match self {
395 Self::ModuleKeyword
396 | Self::ImportKeyword
397 | Self::PublicKeyword
398 | Self::PrivateKeyword
399 | Self::ProtectedKeyword
400 | Self::PackageKeyword
401 | Self::ExportKeyword
402 | Self::StaticKeyword
403 | Self::FinalKeyword
404 | Self::AbstractKeyword
405 | Self::OverrideKeyword
406 | Self::SynchronizedKeyword
407 | Self::ConstKeyword
408 | Self::ImmutableKeyword
409 | Self::InoutKeyword
410 | Self::SharedKeyword
411 | Self::ClassKeyword
412 | Self::StructKeyword
413 | Self::InterfaceKeyword
414 | Self::UnionKeyword
415 | Self::EnumKeyword
416 | Self::FunctionKeyword
417 | Self::DelegateKeyword
418 | Self::IfKeyword
419 | Self::ElseKeyword
420 | Self::WhileKeyword
421 | Self::ForKeyword
422 | Self::ForeachKeyword
423 | Self::DoKeyword
424 | Self::SwitchKeyword
425 | Self::CaseKeyword
426 | Self::DefaultKeyword
427 | Self::BreakKeyword
428 | Self::ContinueKeyword
429 | Self::ReturnKeyword
430 | Self::GotoKeyword
431 | Self::TryKeyword
432 | Self::CatchKeyword
433 | Self::FinallyKeyword
434 | Self::ThrowKeyword
435 | Self::ScopeKeyword
436 | Self::WithKeyword
437 | Self::SynchronizedKeyword2
438 | Self::AsmKeyword
439 | Self::MixinKeyword
440 | Self::TemplateKeyword
441 | Self::ThisKeyword
442 | Self::SuperKeyword
443 | Self::NullKeyword
444 | Self::TrueKeyword
445 | Self::FalseKeyword
446 | Self::CastKeyword
447 | Self::NewKeyword
448 | Self::DeleteKeyword
449 | Self::TypeofKeyword
450 | Self::TypeidKeyword
451 | Self::IsKeyword
452 | Self::InKeyword
453 | Self::OutKeyword
454 | Self::RefKeyword
455 | Self::LazyKeyword
456 | Self::AutoKeyword
457 | Self::AliasKeyword
458 | Self::TypedefKeyword
459 | Self::ExternKeyword
460 | Self::PureKeyword
461 | Self::NothrowKeyword
462 | Self::SafeKeyword
463 | Self::TrustedKeyword
464 | Self::SystemKeyword
465 | Self::NogcKeyword
466 | Self::PropertyKeyword
467 | Self::DisableKeyword
468 | Self::DeprecatedKeyword
469 | Self::VersionKeyword
470 | Self::DebugKeyword
471 | Self::UnitTestKeyword
472 | Self::InvariantKeyword
473 | Self::BodyKeyword
474 | Self::PragmaKeyword
475 | Self::AlignKeyword
476 | Self::VoidType
477 | Self::BoolType
478 | Self::ByteType
479 | Self::UbyteType
480 | Self::ShortType
481 | Self::UshortType
482 | Self::IntType
483 | Self::UintType
484 | Self::LongType
485 | Self::UlongType
486 | Self::CentType
487 | Self::UcentType
488 | Self::FloatType
489 | Self::DoubleType
490 | Self::RealType
491 | Self::IfloatType
492 | Self::IdoubleType
493 | Self::IrealType
494 | Self::CfloatType
495 | Self::CdoubleType
496 | Self::CrealType
497 | Self::CharType
498 | Self::WcharType
499 | Self::DcharType
500 | Self::StringType
501 | Self::WstringType
502 | Self::DstringType => UniversalTokenRole::Keyword,
503
504 Self::Plus
505 | Self::Minus
506 | Self::Multiply
507 | Self::Divide
508 | Self::Modulo
509 | Self::BitwiseAnd
510 | Self::BitwiseOr
511 | Self::BitwiseXor
512 | Self::BitwiseNot
513 | Self::LeftShift
514 | Self::RightShift
515 | Self::UnsignedRightShift
516 | Self::Equal
517 | Self::NotEqual
518 | Self::Less
519 | Self::LessEqual
520 | Self::Greater
521 | Self::GreaterEqual
522 | Self::Identity
523 | Self::NotIdentity
524 | Self::Assign
525 | Self::PlusAssign
526 | Self::MinusAssign
527 | Self::MultiplyAssign
528 | Self::DivideAssign
529 | Self::ModuloAssign
530 | Self::BitwiseAndAssign
531 | Self::BitwiseOrAssign
532 | Self::BitwiseXorAssign
533 | Self::LeftShiftAssign
534 | Self::RightShiftAssign
535 | Self::UnsignedRightShiftAssign
536 | Self::ConcatenateAssign
537 | Self::LogicalAnd
538 | Self::LogicalOr
539 | Self::Increment
540 | Self::Decrement
541 | Self::Not
542 | Self::Question
543 | Self::Dollar
544 | Self::At
545 | Self::Arrow => UniversalTokenRole::Operator,
546
547 Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace | Self::Semicolon | Self::Comma | Self::Dot | Self::DotDot | Self::DotDotDot | Self::Colon | Self::Hash => {
548 UniversalTokenRole::Punctuation
549 }
550
551 Self::IntegerLiteral | Self::FloatLiteral | Self::StringLiteral | Self::CharLiteral => UniversalTokenRole::Literal,
552
553 Self::Identifier => UniversalTokenRole::Name,
554
555 Self::LineComment | Self::BlockComment | Self::NestedComment => UniversalTokenRole::Comment,
556
557 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
558
559 Self::Error => UniversalTokenRole::Error,
560
561 _ => UniversalTokenRole::None,
562 }
563 }
564
565 fn is_ignored(&self) -> bool {
567 matches!(self, Self::Whitespace | Self::Newline | Self::LineComment | Self::BlockComment | Self::NestedComment)
568 }
569
570 fn is_comment(&self) -> bool {
572 matches!(self, Self::LineComment | Self::BlockComment | Self::NestedComment)
573 }
574
575 fn is_whitespace(&self) -> bool {
577 matches!(self, Self::Whitespace | Self::Newline)
578 }
579}
580
581impl ElementType for DSyntaxKind {
582 type Role = UniversalElementRole;
583
584 fn role(&self) -> Self::Role {
585 match self {
586 Self::Root => UniversalElementRole::Root,
587 Self::Module => UniversalElementRole::Container,
588 Self::Declaration => UniversalElementRole::Definition,
589 Self::Statement => UniversalElementRole::Container,
590 Self::Expression => UniversalElementRole::Container,
591 Self::Type => UniversalElementRole::Typing,
592 _ => UniversalElementRole::Container,
593 }
594 }
595}