1use core::fmt;
3
4use serde::{Deserialize, Serialize};
5#[derive(
6 Copy,
7 Clone,
8 Debug,
9 Hash,
10 PartialEq,
11 Eq,
12 Serialize,
13 Deserialize,
14 salsa::Update,
15 cairo_lang_proc_macros::HeapSize,
16)]
17pub enum SyntaxKind {
18 Trivia,
19 ExprMissing,
20 ExprList,
21 Arg,
22 ArgClauseNamed,
23 ArgClauseUnnamed,
24 ArgClauseFieldInitShorthand,
25 ExprFieldInitShorthand,
26 ArgList,
27 PathSegmentSimple,
28 OptionTerminalColonColonEmpty,
29 PathSegmentWithGenericArgs,
30 ExprPath,
31 OptionTerminalDollarEmpty,
32 ExprPathInner,
33 ExprParenthesized,
34 ExprUnary,
35 ExprBinary,
36 ExprListParenthesized,
37 ExprFunctionCall,
38 ArgListParenthesized,
39 OptionArgListParenthesizedEmpty,
40 ExprStructCtorCall,
41 StructArgListBraced,
42 ExprBlock,
43 ExprMatch,
44 MatchArms,
45 MatchArm,
46 ExprIf,
47 ConditionListAnd,
48 ConditionLet,
49 ConditionExpr,
50 ExprLoop,
51 ExprWhile,
52 ExprFor,
53 ElseClause,
54 OptionElseClauseEmpty,
55 ExprErrorPropagate,
56 ExprIndexed,
57 ExprFixedSizeArray,
58 FixedSizeArraySize,
59 OptionFixedSizeArraySizeEmpty,
60 ExprClosure,
61 ClosureParams,
62 StructArgExpr,
63 OptionStructArgExprEmpty,
64 StructArgSingle,
65 StructArgTail,
66 StructArgList,
67 ArgListBraced,
68 ArgListBracketed,
69 WrappedArgListMissing,
70 PatternIdentifier,
71 PatternStruct,
72 PatternStructParamList,
73 PatternTuple,
74 PatternFixedSizeArray,
75 PatternList,
76 PatternListOr,
77 PatternStructParamWithExpr,
78 PatternEnum,
79 PatternEnumInnerPattern,
80 OptionPatternEnumInnerPatternEmpty,
81 TypeClause,
82 OptionTypeClauseEmpty,
83 ReturnTypeClause,
84 OptionReturnTypeClauseEmpty,
85 StatementMissing,
86 StatementList,
87 StatementLet,
88 LetElseClause,
89 OptionLetElseClauseEmpty,
90 OptionTerminalSemicolonEmpty,
91 StatementExpr,
92 StatementContinue,
93 ExprClause,
94 OptionExprClauseEmpty,
95 StatementReturn,
96 StatementBreak,
97 StatementItem,
98 Param,
99 ModifierList,
100 ParamList,
101 ImplicitsClause,
102 ImplicitsList,
103 OptionImplicitsClauseEmpty,
104 OptionTerminalNoPanicEmpty,
105 OptionTerminalConstEmpty,
106 FunctionSignature,
107 Member,
108 MemberList,
109 Variant,
110 VariantList,
111 ModuleItemMissing,
112 ModuleItemList,
113 Attribute,
114 AttributeList,
115 VisibilityDefault,
116 VisibilityPubArgumentClause,
117 OptionVisibilityPubArgumentClauseEmpty,
118 VisibilityPub,
119 ItemModule,
120 ModuleBody,
121 FunctionDeclaration,
122 ItemConstant,
123 FunctionWithBody,
124 ItemExternFunction,
125 ItemExternType,
126 ItemTrait,
127 TraitBody,
128 TraitItemList,
129 TraitItemMissing,
130 TraitItemFunction,
131 TraitItemType,
132 TraitItemConstant,
133 TraitItemImpl,
134 ItemImpl,
135 ItemHeaderDoc,
136 ImplBody,
137 ImplItemList,
138 ImplItemMissing,
139 ItemImplAlias,
140 ItemStruct,
141 ItemEnum,
142 ItemTypeAlias,
143 ItemUse,
144 UsePathLeaf,
145 UsePathSingle,
146 UsePathMulti,
147 UsePathStar,
148 UsePathList,
149 AliasClause,
150 OptionAliasClauseEmpty,
151 GenericArgNamed,
152 GenericArgUnnamed,
153 GenericArgs,
154 GenericArgList,
155 AssociatedItemConstraint,
156 AssociatedItemConstraints,
157 AssociatedItemConstraintList,
158 OptionAssociatedItemConstraintsEmpty,
159 OptionWrappedGenericParamListEmpty,
160 WrappedGenericParamList,
161 GenericParamList,
162 GenericParamType,
163 GenericParamConst,
164 GenericParamImplNamed,
165 GenericParamImplAnonymous,
166 GenericParamNegativeImpl,
167 TokenList,
168 TokenTreeLeaf,
169 TokenTreeNode,
170 TokenTreeRepetition,
171 TokenTreeParam,
172 TokenTreeMissing,
173 WrappedTokenTreeMissing,
174 ParenthesizedTokenTree,
175 BracedTokenTree,
176 BracketedTokenTree,
177 ExprInlineMacro,
178 ItemInlineMacro,
179 ItemMacroDeclaration,
180 MacroRulesList,
181 MacroRule,
182 ParamKind,
183 OptionParamKindEmpty,
184 MacroParam,
185 MacroRepetition,
186 OptionTerminalCommaEmpty,
187 MacroRepetitionOperatorMissing,
188 ParamIdent,
189 ParamExpr,
190 MacroParamKindMissing,
191 MacroElements,
192 MacroWrapper,
193 ParenthesizedMacro,
194 BracedMacro,
195 BracketedMacro,
196 LegacyExprInlineMacro,
197 LegacyItemInlineMacro,
198 TriviumSkippedNode,
199 TokenIdentifier,
200 TerminalIdentifier,
201 TokenLiteralNumber,
202 TerminalLiteralNumber,
203 TokenShortString,
204 TerminalShortString,
205 TokenString,
206 TerminalString,
207 TokenAs,
208 TerminalAs,
209 TokenConst,
210 TerminalConst,
211 TokenElse,
212 TerminalElse,
213 TokenEnum,
214 TerminalEnum,
215 TokenExtern,
216 TerminalExtern,
217 TokenFalse,
218 TerminalFalse,
219 TokenFunction,
220 TerminalFunction,
221 TokenIf,
222 TerminalIf,
223 TokenWhile,
224 TerminalWhile,
225 TokenFor,
226 TerminalFor,
227 TokenLoop,
228 TerminalLoop,
229 TokenImpl,
230 TerminalImpl,
231 TokenImplicits,
232 TerminalImplicits,
233 TokenLet,
234 TerminalLet,
235 TokenMacro,
236 TerminalMacro,
237 TokenMatch,
238 TerminalMatch,
239 TokenModule,
240 TerminalModule,
241 TokenMut,
242 TerminalMut,
243 TokenNoPanic,
244 TerminalNoPanic,
245 TokenOf,
246 TerminalOf,
247 TokenRef,
248 TerminalRef,
249 TokenContinue,
250 TerminalContinue,
251 TokenReturn,
252 TerminalReturn,
253 TokenBreak,
254 TerminalBreak,
255 TokenStruct,
256 TerminalStruct,
257 TokenTrait,
258 TerminalTrait,
259 TokenTrue,
260 TerminalTrue,
261 TokenType,
262 TerminalType,
263 TokenUse,
264 TerminalUse,
265 TokenPub,
266 TerminalPub,
267 TokenAnd,
268 TerminalAnd,
269 TokenAndAnd,
270 TerminalAndAnd,
271 TokenArrow,
272 TerminalArrow,
273 TokenAt,
274 TerminalAt,
275 TokenBadCharacters,
276 TerminalBadCharacters,
277 TokenColon,
278 TerminalColon,
279 TokenColonColon,
280 TerminalColonColon,
281 TokenComma,
282 TerminalComma,
283 TokenDiv,
284 TerminalDiv,
285 TokenDivEq,
286 TerminalDivEq,
287 TokenDollar,
288 TerminalDollar,
289 TokenDot,
290 TerminalDot,
291 TokenDotDot,
292 TerminalDotDot,
293 TokenDotDotEq,
294 TerminalDotDotEq,
295 TokenEndOfFile,
296 TerminalEndOfFile,
297 TokenEq,
298 TerminalEq,
299 TokenEqEq,
300 TerminalEqEq,
301 TokenGE,
302 TerminalGE,
303 TokenGT,
304 TerminalGT,
305 TokenHash,
306 TerminalHash,
307 TokenLBrace,
308 TerminalLBrace,
309 TokenLBrack,
310 TerminalLBrack,
311 TokenLE,
312 TerminalLE,
313 TokenLParen,
314 TerminalLParen,
315 TokenLT,
316 TerminalLT,
317 TokenMatchArrow,
318 TerminalMatchArrow,
319 TokenMinus,
320 TerminalMinus,
321 TokenMinusEq,
322 TerminalMinusEq,
323 TokenMod,
324 TerminalMod,
325 TokenModEq,
326 TerminalModEq,
327 TokenMul,
328 TerminalMul,
329 TokenMulEq,
330 TerminalMulEq,
331 TokenNeq,
332 TerminalNeq,
333 TokenNot,
334 TerminalNot,
335 TokenBitNot,
336 TerminalBitNot,
337 TokenOr,
338 TerminalOr,
339 TokenOrOr,
340 TerminalOrOr,
341 TokenPlus,
342 TerminalPlus,
343 TokenPlusEq,
344 TerminalPlusEq,
345 TokenQuestionMark,
346 TerminalQuestionMark,
347 TokenRBrace,
348 TerminalRBrace,
349 TokenRBrack,
350 TerminalRBrack,
351 TokenRParen,
352 TerminalRParen,
353 TokenSemicolon,
354 TerminalSemicolon,
355 TokenUnderscore,
356 TerminalUnderscore,
357 TokenXor,
358 TerminalXor,
359 SyntaxFile,
360 TokenEmpty,
361 TerminalEmpty,
362 TokenSingleLineComment,
363 TokenSingleLineInnerComment,
364 TokenSingleLineDocComment,
365 TokenWhitespace,
366 TokenNewline,
367 TokenMissing,
368 TokenSkipped,
369}
370impl SyntaxKind {
371 pub fn is_token(&self) -> bool {
372 matches!(
373 *self,
374 SyntaxKind::TokenIdentifier
375 | SyntaxKind::TokenLiteralNumber
376 | SyntaxKind::TokenShortString
377 | SyntaxKind::TokenString
378 | SyntaxKind::TokenAs
379 | SyntaxKind::TokenConst
380 | SyntaxKind::TokenElse
381 | SyntaxKind::TokenEnum
382 | SyntaxKind::TokenExtern
383 | SyntaxKind::TokenFalse
384 | SyntaxKind::TokenFunction
385 | SyntaxKind::TokenIf
386 | SyntaxKind::TokenWhile
387 | SyntaxKind::TokenFor
388 | SyntaxKind::TokenLoop
389 | SyntaxKind::TokenImpl
390 | SyntaxKind::TokenImplicits
391 | SyntaxKind::TokenLet
392 | SyntaxKind::TokenMacro
393 | SyntaxKind::TokenMatch
394 | SyntaxKind::TokenModule
395 | SyntaxKind::TokenMut
396 | SyntaxKind::TokenNoPanic
397 | SyntaxKind::TokenOf
398 | SyntaxKind::TokenRef
399 | SyntaxKind::TokenContinue
400 | SyntaxKind::TokenReturn
401 | SyntaxKind::TokenBreak
402 | SyntaxKind::TokenStruct
403 | SyntaxKind::TokenTrait
404 | SyntaxKind::TokenTrue
405 | SyntaxKind::TokenType
406 | SyntaxKind::TokenUse
407 | SyntaxKind::TokenPub
408 | SyntaxKind::TokenAnd
409 | SyntaxKind::TokenAndAnd
410 | SyntaxKind::TokenArrow
411 | SyntaxKind::TokenAt
412 | SyntaxKind::TokenBadCharacters
413 | SyntaxKind::TokenColon
414 | SyntaxKind::TokenColonColon
415 | SyntaxKind::TokenComma
416 | SyntaxKind::TokenDiv
417 | SyntaxKind::TokenDivEq
418 | SyntaxKind::TokenDollar
419 | SyntaxKind::TokenDot
420 | SyntaxKind::TokenDotDot
421 | SyntaxKind::TokenDotDotEq
422 | SyntaxKind::TokenEndOfFile
423 | SyntaxKind::TokenEq
424 | SyntaxKind::TokenEqEq
425 | SyntaxKind::TokenGE
426 | SyntaxKind::TokenGT
427 | SyntaxKind::TokenHash
428 | SyntaxKind::TokenLBrace
429 | SyntaxKind::TokenLBrack
430 | SyntaxKind::TokenLE
431 | SyntaxKind::TokenLParen
432 | SyntaxKind::TokenLT
433 | SyntaxKind::TokenMatchArrow
434 | SyntaxKind::TokenMinus
435 | SyntaxKind::TokenMinusEq
436 | SyntaxKind::TokenMod
437 | SyntaxKind::TokenModEq
438 | SyntaxKind::TokenMul
439 | SyntaxKind::TokenMulEq
440 | SyntaxKind::TokenNeq
441 | SyntaxKind::TokenNot
442 | SyntaxKind::TokenBitNot
443 | SyntaxKind::TokenOr
444 | SyntaxKind::TokenOrOr
445 | SyntaxKind::TokenPlus
446 | SyntaxKind::TokenPlusEq
447 | SyntaxKind::TokenQuestionMark
448 | SyntaxKind::TokenRBrace
449 | SyntaxKind::TokenRBrack
450 | SyntaxKind::TokenRParen
451 | SyntaxKind::TokenSemicolon
452 | SyntaxKind::TokenUnderscore
453 | SyntaxKind::TokenXor
454 | SyntaxKind::TokenEmpty
455 | SyntaxKind::TokenSingleLineComment
456 | SyntaxKind::TokenSingleLineInnerComment
457 | SyntaxKind::TokenSingleLineDocComment
458 | SyntaxKind::TokenWhitespace
459 | SyntaxKind::TokenNewline
460 | SyntaxKind::TokenMissing
461 | SyntaxKind::TokenSkipped
462 )
463 }
464 pub fn is_terminal(&self) -> bool {
465 matches!(
466 *self,
467 SyntaxKind::TerminalIdentifier
468 | SyntaxKind::TerminalLiteralNumber
469 | SyntaxKind::TerminalShortString
470 | SyntaxKind::TerminalString
471 | SyntaxKind::TerminalAs
472 | SyntaxKind::TerminalConst
473 | SyntaxKind::TerminalElse
474 | SyntaxKind::TerminalEnum
475 | SyntaxKind::TerminalExtern
476 | SyntaxKind::TerminalFalse
477 | SyntaxKind::TerminalFunction
478 | SyntaxKind::TerminalIf
479 | SyntaxKind::TerminalWhile
480 | SyntaxKind::TerminalFor
481 | SyntaxKind::TerminalLoop
482 | SyntaxKind::TerminalImpl
483 | SyntaxKind::TerminalImplicits
484 | SyntaxKind::TerminalLet
485 | SyntaxKind::TerminalMacro
486 | SyntaxKind::TerminalMatch
487 | SyntaxKind::TerminalModule
488 | SyntaxKind::TerminalMut
489 | SyntaxKind::TerminalNoPanic
490 | SyntaxKind::TerminalOf
491 | SyntaxKind::TerminalRef
492 | SyntaxKind::TerminalContinue
493 | SyntaxKind::TerminalReturn
494 | SyntaxKind::TerminalBreak
495 | SyntaxKind::TerminalStruct
496 | SyntaxKind::TerminalTrait
497 | SyntaxKind::TerminalTrue
498 | SyntaxKind::TerminalType
499 | SyntaxKind::TerminalUse
500 | SyntaxKind::TerminalPub
501 | SyntaxKind::TerminalAnd
502 | SyntaxKind::TerminalAndAnd
503 | SyntaxKind::TerminalArrow
504 | SyntaxKind::TerminalAt
505 | SyntaxKind::TerminalBadCharacters
506 | SyntaxKind::TerminalColon
507 | SyntaxKind::TerminalColonColon
508 | SyntaxKind::TerminalComma
509 | SyntaxKind::TerminalDiv
510 | SyntaxKind::TerminalDivEq
511 | SyntaxKind::TerminalDollar
512 | SyntaxKind::TerminalDot
513 | SyntaxKind::TerminalDotDot
514 | SyntaxKind::TerminalDotDotEq
515 | SyntaxKind::TerminalEndOfFile
516 | SyntaxKind::TerminalEq
517 | SyntaxKind::TerminalEqEq
518 | SyntaxKind::TerminalGE
519 | SyntaxKind::TerminalGT
520 | SyntaxKind::TerminalHash
521 | SyntaxKind::TerminalLBrace
522 | SyntaxKind::TerminalLBrack
523 | SyntaxKind::TerminalLE
524 | SyntaxKind::TerminalLParen
525 | SyntaxKind::TerminalLT
526 | SyntaxKind::TerminalMatchArrow
527 | SyntaxKind::TerminalMinus
528 | SyntaxKind::TerminalMinusEq
529 | SyntaxKind::TerminalMod
530 | SyntaxKind::TerminalModEq
531 | SyntaxKind::TerminalMul
532 | SyntaxKind::TerminalMulEq
533 | SyntaxKind::TerminalNeq
534 | SyntaxKind::TerminalNot
535 | SyntaxKind::TerminalBitNot
536 | SyntaxKind::TerminalOr
537 | SyntaxKind::TerminalOrOr
538 | SyntaxKind::TerminalPlus
539 | SyntaxKind::TerminalPlusEq
540 | SyntaxKind::TerminalQuestionMark
541 | SyntaxKind::TerminalRBrace
542 | SyntaxKind::TerminalRBrack
543 | SyntaxKind::TerminalRParen
544 | SyntaxKind::TerminalSemicolon
545 | SyntaxKind::TerminalUnderscore
546 | SyntaxKind::TerminalXor
547 | SyntaxKind::TerminalEmpty
548 )
549 }
550 pub fn is_keyword_token(&self) -> bool {
551 matches!(
552 *self,
553 SyntaxKind::TokenAs
554 | SyntaxKind::TokenConst
555 | SyntaxKind::TokenElse
556 | SyntaxKind::TokenEnum
557 | SyntaxKind::TokenExtern
558 | SyntaxKind::TokenFalse
559 | SyntaxKind::TokenFunction
560 | SyntaxKind::TokenIf
561 | SyntaxKind::TokenWhile
562 | SyntaxKind::TokenFor
563 | SyntaxKind::TokenLoop
564 | SyntaxKind::TokenImpl
565 | SyntaxKind::TokenImplicits
566 | SyntaxKind::TokenLet
567 | SyntaxKind::TokenMacro
568 | SyntaxKind::TokenMatch
569 | SyntaxKind::TokenModule
570 | SyntaxKind::TokenMut
571 | SyntaxKind::TokenNoPanic
572 | SyntaxKind::TokenOf
573 | SyntaxKind::TokenRef
574 | SyntaxKind::TokenContinue
575 | SyntaxKind::TokenReturn
576 | SyntaxKind::TokenBreak
577 | SyntaxKind::TokenStruct
578 | SyntaxKind::TokenTrait
579 | SyntaxKind::TokenTrue
580 | SyntaxKind::TokenType
581 | SyntaxKind::TokenUse
582 | SyntaxKind::TokenPub
583 )
584 }
585 pub fn is_keyword_terminal(&self) -> bool {
586 matches!(
587 *self,
588 SyntaxKind::TerminalAs
589 | SyntaxKind::TerminalConst
590 | SyntaxKind::TerminalElse
591 | SyntaxKind::TerminalEnum
592 | SyntaxKind::TerminalExtern
593 | SyntaxKind::TerminalFalse
594 | SyntaxKind::TerminalFunction
595 | SyntaxKind::TerminalIf
596 | SyntaxKind::TerminalWhile
597 | SyntaxKind::TerminalFor
598 | SyntaxKind::TerminalLoop
599 | SyntaxKind::TerminalImpl
600 | SyntaxKind::TerminalImplicits
601 | SyntaxKind::TerminalLet
602 | SyntaxKind::TerminalMacro
603 | SyntaxKind::TerminalMatch
604 | SyntaxKind::TerminalModule
605 | SyntaxKind::TerminalMut
606 | SyntaxKind::TerminalNoPanic
607 | SyntaxKind::TerminalOf
608 | SyntaxKind::TerminalRef
609 | SyntaxKind::TerminalContinue
610 | SyntaxKind::TerminalReturn
611 | SyntaxKind::TerminalBreak
612 | SyntaxKind::TerminalStruct
613 | SyntaxKind::TerminalTrait
614 | SyntaxKind::TerminalTrue
615 | SyntaxKind::TerminalType
616 | SyntaxKind::TerminalUse
617 | SyntaxKind::TerminalPub
618 )
619 }
620 pub fn is_missing(&self) -> bool {
621 matches!(
622 *self,
623 SyntaxKind::ExprMissing
624 | SyntaxKind::WrappedArgListMissing
625 | SyntaxKind::StatementMissing
626 | SyntaxKind::ModuleItemMissing
627 | SyntaxKind::TraitItemMissing
628 | SyntaxKind::ImplItemMissing
629 | SyntaxKind::TokenTreeMissing
630 | SyntaxKind::WrappedTokenTreeMissing
631 | SyntaxKind::MacroRepetitionOperatorMissing
632 | SyntaxKind::MacroParamKindMissing
633 | SyntaxKind::TokenMissing
634 )
635 }
636}
637impl fmt::Display for SyntaxKind {
638 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
639 write!(f, "{self:?}")
640 }
641}