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