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