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