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