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