1#![allow(bad_style, missing_docs, unreachable_pub)]
4use crate::Edition;
5#[doc = r" The kind of syntax node, e.g. `IDENT`, `USE_KW`, or `STRUCT`."]
6#[derive(Debug)]
7#[repr(u16)]
8pub enum SyntaxKind {
9 #[doc(hidden)]
10 TOMBSTONE,
11 #[doc(hidden)]
12 EOF,
13 DOLLAR,
14 SEMICOLON,
15 COMMA,
16 L_PAREN,
17 R_PAREN,
18 L_CURLY,
19 R_CURLY,
20 L_BRACK,
21 R_BRACK,
22 L_ANGLE,
23 R_ANGLE,
24 AT,
25 POUND,
26 TILDE,
27 QUESTION,
28 AMP,
29 PIPE,
30 PLUS,
31 STAR,
32 SLASH,
33 CARET,
34 PERCENT,
35 UNDERSCORE,
36 DOT,
37 DOT2,
38 DOT3,
39 DOT2EQ,
40 COLON,
41 COLON2,
42 EQ,
43 EQ2,
44 FAT_ARROW,
45 BANG,
46 NEQ,
47 MINUS,
48 THIN_ARROW,
49 LTEQ,
50 GTEQ,
51 PLUSEQ,
52 MINUSEQ,
53 PIPEEQ,
54 AMPEQ,
55 CARETEQ,
56 SLASHEQ,
57 STAREQ,
58 PERCENTEQ,
59 AMP2,
60 PIPE2,
61 SHL,
62 SHR,
63 SHLEQ,
64 SHREQ,
65 SELF_TYPE_KW,
66 ABSTRACT_KW,
67 AS_KW,
68 BECOME_KW,
69 BOX_KW,
70 BREAK_KW,
71 CONST_KW,
72 CONTINUE_KW,
73 CRATE_KW,
74 DO_KW,
75 ELSE_KW,
76 ENUM_KW,
77 EXTERN_KW,
78 FALSE_KW,
79 FINAL_KW,
80 FN_KW,
81 FOR_KW,
82 IF_KW,
83 IMPL_KW,
84 IN_KW,
85 LET_KW,
86 LOOP_KW,
87 MACRO_KW,
88 MATCH_KW,
89 MOD_KW,
90 MOVE_KW,
91 MUT_KW,
92 OVERRIDE_KW,
93 PRIV_KW,
94 PUB_KW,
95 REF_KW,
96 RETURN_KW,
97 SELF_KW,
98 STATIC_KW,
99 STRUCT_KW,
100 SUPER_KW,
101 TRAIT_KW,
102 TRUE_KW,
103 TYPE_KW,
104 TYPEOF_KW,
105 UNSAFE_KW,
106 UNSIZED_KW,
107 USE_KW,
108 VIRTUAL_KW,
109 WHERE_KW,
110 WHILE_KW,
111 YIELD_KW,
112 ASM_KW,
113 ASYNC_KW,
114 ATT_SYNTAX_KW,
115 AUTO_KW,
116 AWAIT_KW,
117 BIKESHED_KW,
118 BUILTIN_KW,
119 CLOBBER_ABI_KW,
120 DEFAULT_KW,
121 DYN_KW,
122 FORMAT_ARGS_KW,
123 GEN_KW,
124 GLOBAL_ASM_KW,
125 INLATEOUT_KW,
126 INOUT_KW,
127 LABEL_KW,
128 LATEOUT_KW,
129 MACRO_RULES_KW,
130 MAY_UNWIND_KW,
131 NAKED_ASM_KW,
132 NOMEM_KW,
133 NORETURN_KW,
134 NOSTACK_KW,
135 OFFSET_OF_KW,
136 OPTIONS_KW,
137 OUT_KW,
138 PRESERVES_FLAGS_KW,
139 PURE_KW,
140 RAW_KW,
141 READONLY_KW,
142 SAFE_KW,
143 SYM_KW,
144 TRY_KW,
145 UNION_KW,
146 YEET_KW,
147 BYTE,
148 BYTE_STRING,
149 CHAR,
150 C_STRING,
151 FLOAT_NUMBER,
152 INT_NUMBER,
153 STRING,
154 COMMENT,
155 ERROR,
156 FRONTMATTER,
157 IDENT,
158 LIFETIME_IDENT,
159 NEWLINE,
160 SHEBANG,
161 WHITESPACE,
162 ABI,
163 ARG_LIST,
164 ARRAY_EXPR,
165 ARRAY_TYPE,
166 ASM_CLOBBER_ABI,
167 ASM_CONST,
168 ASM_DIR_SPEC,
169 ASM_EXPR,
170 ASM_LABEL,
171 ASM_OPERAND_EXPR,
172 ASM_OPERAND_NAMED,
173 ASM_OPTION,
174 ASM_OPTIONS,
175 ASM_REG_OPERAND,
176 ASM_REG_SPEC,
177 ASM_SYM,
178 ASSOC_ITEM_LIST,
179 ASSOC_TYPE_ARG,
180 ATTR,
181 AWAIT_EXPR,
182 BECOME_EXPR,
183 BIN_EXPR,
184 BLOCK_EXPR,
185 BOX_PAT,
186 BREAK_EXPR,
187 CALL_EXPR,
188 CAST_EXPR,
189 CLOSURE_EXPR,
190 CONST,
191 CONST_ARG,
192 CONST_BLOCK_PAT,
193 CONST_PARAM,
194 CONTINUE_EXPR,
195 DYN_TRAIT_TYPE,
196 ENUM,
197 EXPR_STMT,
198 EXTERN_BLOCK,
199 EXTERN_CRATE,
200 EXTERN_ITEM_LIST,
201 FIELD_EXPR,
202 FN,
203 FN_PTR_TYPE,
204 FORMAT_ARGS_ARG,
205 FORMAT_ARGS_ARG_NAME,
206 FORMAT_ARGS_EXPR,
207 FOR_BINDER,
208 FOR_EXPR,
209 FOR_TYPE,
210 GENERIC_ARG_LIST,
211 GENERIC_PARAM_LIST,
212 IDENT_PAT,
213 IF_EXPR,
214 IMPL,
215 IMPL_TRAIT_TYPE,
216 INDEX_EXPR,
217 INFER_TYPE,
218 ITEM_LIST,
219 LABEL,
220 LET_ELSE,
221 LET_EXPR,
222 LET_STMT,
223 LIFETIME,
224 LIFETIME_ARG,
225 LIFETIME_PARAM,
226 LITERAL,
227 LITERAL_PAT,
228 LOOP_EXPR,
229 MACRO_CALL,
230 MACRO_DEF,
231 MACRO_EXPR,
232 MACRO_ITEMS,
233 MACRO_PAT,
234 MACRO_RULES,
235 MACRO_STMTS,
236 MACRO_TYPE,
237 MATCH_ARM,
238 MATCH_ARM_LIST,
239 MATCH_EXPR,
240 MATCH_GUARD,
241 META,
242 METHOD_CALL_EXPR,
243 MODULE,
244 NAME,
245 NAME_REF,
246 NEVER_TYPE,
247 OFFSET_OF_EXPR,
248 OR_PAT,
249 PARAM,
250 PARAM_LIST,
251 PARENTHESIZED_ARG_LIST,
252 PAREN_EXPR,
253 PAREN_PAT,
254 PAREN_TYPE,
255 PATH,
256 PATH_EXPR,
257 PATH_PAT,
258 PATH_SEGMENT,
259 PATH_TYPE,
260 PREFIX_EXPR,
261 PTR_TYPE,
262 RANGE_EXPR,
263 RANGE_PAT,
264 RECORD_EXPR,
265 RECORD_EXPR_FIELD,
266 RECORD_EXPR_FIELD_LIST,
267 RECORD_FIELD,
268 RECORD_FIELD_LIST,
269 RECORD_PAT,
270 RECORD_PAT_FIELD,
271 RECORD_PAT_FIELD_LIST,
272 REF_EXPR,
273 REF_PAT,
274 REF_TYPE,
275 RENAME,
276 REST_PAT,
277 RETURN_EXPR,
278 RETURN_TYPE_SYNTAX,
279 RET_TYPE,
280 SELF_PARAM,
281 SLICE_PAT,
282 SLICE_TYPE,
283 SOURCE_FILE,
284 STATIC,
285 STMT_LIST,
286 STRUCT,
287 TOKEN_TREE,
288 TRAIT,
289 TRY_BLOCK_MODIFIER,
290 TRY_EXPR,
291 TUPLE_EXPR,
292 TUPLE_FIELD,
293 TUPLE_FIELD_LIST,
294 TUPLE_PAT,
295 TUPLE_STRUCT_PAT,
296 TUPLE_TYPE,
297 TYPE_ALIAS,
298 TYPE_ANCHOR,
299 TYPE_ARG,
300 TYPE_BOUND,
301 TYPE_BOUND_LIST,
302 TYPE_PARAM,
303 UNDERSCORE_EXPR,
304 UNION,
305 USE,
306 USE_BOUND_GENERIC_ARGS,
307 USE_TREE,
308 USE_TREE_LIST,
309 VARIANT,
310 VARIANT_LIST,
311 VISIBILITY,
312 WHERE_CLAUSE,
313 WHERE_PRED,
314 WHILE_EXPR,
315 WILDCARD_PAT,
316 YEET_EXPR,
317 YIELD_EXPR,
318 #[doc(hidden)]
319 __LAST,
320}
321use self::SyntaxKind::*;
322impl SyntaxKind {
323 #[allow(unreachable_patterns)]
324 pub const fn text(self) -> &'static str {
325 match self {
326 TOMBSTONE
327 | EOF
328 | __LAST
329 | BYTE
330 | BYTE_STRING
331 | CHAR
332 | C_STRING
333 | FLOAT_NUMBER
334 | INT_NUMBER
335 | STRING
336 | ABI
337 | ARG_LIST
338 | ARRAY_EXPR
339 | ARRAY_TYPE
340 | ASM_CLOBBER_ABI
341 | ASM_CONST
342 | ASM_DIR_SPEC
343 | ASM_EXPR
344 | ASM_LABEL
345 | ASM_OPERAND_EXPR
346 | ASM_OPERAND_NAMED
347 | ASM_OPTION
348 | ASM_OPTIONS
349 | ASM_REG_OPERAND
350 | ASM_REG_SPEC
351 | ASM_SYM
352 | ASSOC_ITEM_LIST
353 | ASSOC_TYPE_ARG
354 | ATTR
355 | AWAIT_EXPR
356 | BECOME_EXPR
357 | BIN_EXPR
358 | BLOCK_EXPR
359 | BOX_PAT
360 | BREAK_EXPR
361 | CALL_EXPR
362 | CAST_EXPR
363 | CLOSURE_EXPR
364 | CONST
365 | CONST_ARG
366 | CONST_BLOCK_PAT
367 | CONST_PARAM
368 | CONTINUE_EXPR
369 | DYN_TRAIT_TYPE
370 | ENUM
371 | EXPR_STMT
372 | EXTERN_BLOCK
373 | EXTERN_CRATE
374 | EXTERN_ITEM_LIST
375 | FIELD_EXPR
376 | FN
377 | FN_PTR_TYPE
378 | FORMAT_ARGS_ARG
379 | FORMAT_ARGS_ARG_NAME
380 | FORMAT_ARGS_EXPR
381 | FOR_BINDER
382 | FOR_EXPR
383 | FOR_TYPE
384 | GENERIC_ARG_LIST
385 | GENERIC_PARAM_LIST
386 | IDENT_PAT
387 | IF_EXPR
388 | IMPL
389 | IMPL_TRAIT_TYPE
390 | INDEX_EXPR
391 | INFER_TYPE
392 | ITEM_LIST
393 | LABEL
394 | LET_ELSE
395 | LET_EXPR
396 | LET_STMT
397 | LIFETIME
398 | LIFETIME_ARG
399 | LIFETIME_PARAM
400 | LITERAL
401 | LITERAL_PAT
402 | LOOP_EXPR
403 | MACRO_CALL
404 | MACRO_DEF
405 | MACRO_EXPR
406 | MACRO_ITEMS
407 | MACRO_PAT
408 | MACRO_RULES
409 | MACRO_STMTS
410 | MACRO_TYPE
411 | MATCH_ARM
412 | MATCH_ARM_LIST
413 | MATCH_EXPR
414 | MATCH_GUARD
415 | META
416 | METHOD_CALL_EXPR
417 | MODULE
418 | NAME
419 | NAME_REF
420 | NEVER_TYPE
421 | OFFSET_OF_EXPR
422 | OR_PAT
423 | PARAM
424 | PARAM_LIST
425 | PARENTHESIZED_ARG_LIST
426 | PAREN_EXPR
427 | PAREN_PAT
428 | PAREN_TYPE
429 | PATH
430 | PATH_EXPR
431 | PATH_PAT
432 | PATH_SEGMENT
433 | PATH_TYPE
434 | PREFIX_EXPR
435 | PTR_TYPE
436 | RANGE_EXPR
437 | RANGE_PAT
438 | RECORD_EXPR
439 | RECORD_EXPR_FIELD
440 | RECORD_EXPR_FIELD_LIST
441 | RECORD_FIELD
442 | RECORD_FIELD_LIST
443 | RECORD_PAT
444 | RECORD_PAT_FIELD
445 | RECORD_PAT_FIELD_LIST
446 | REF_EXPR
447 | REF_PAT
448 | REF_TYPE
449 | RENAME
450 | REST_PAT
451 | RETURN_EXPR
452 | RETURN_TYPE_SYNTAX
453 | RET_TYPE
454 | SELF_PARAM
455 | SLICE_PAT
456 | SLICE_TYPE
457 | SOURCE_FILE
458 | STATIC
459 | STMT_LIST
460 | STRUCT
461 | TOKEN_TREE
462 | TRAIT
463 | TRY_BLOCK_MODIFIER
464 | TRY_EXPR
465 | TUPLE_EXPR
466 | TUPLE_FIELD
467 | TUPLE_FIELD_LIST
468 | TUPLE_PAT
469 | TUPLE_STRUCT_PAT
470 | TUPLE_TYPE
471 | TYPE_ALIAS
472 | TYPE_ANCHOR
473 | TYPE_ARG
474 | TYPE_BOUND
475 | TYPE_BOUND_LIST
476 | TYPE_PARAM
477 | UNDERSCORE_EXPR
478 | UNION
479 | USE
480 | USE_BOUND_GENERIC_ARGS
481 | USE_TREE
482 | USE_TREE_LIST
483 | VARIANT
484 | VARIANT_LIST
485 | VISIBILITY
486 | WHERE_CLAUSE
487 | WHERE_PRED
488 | WHILE_EXPR
489 | WILDCARD_PAT
490 | YEET_EXPR
491 | YIELD_EXPR
492 | COMMENT
493 | ERROR
494 | FRONTMATTER
495 | IDENT
496 | LIFETIME_IDENT
497 | NEWLINE
498 | SHEBANG
499 | WHITESPACE => panic!("no text for these `SyntaxKind`s"),
500 DOLLAR => "$",
501 SEMICOLON => ";",
502 COMMA => ",",
503 L_PAREN => "(",
504 R_PAREN => ")",
505 L_CURLY => "{",
506 R_CURLY => "}",
507 L_BRACK => "[",
508 R_BRACK => "]",
509 L_ANGLE => "<",
510 R_ANGLE => ">",
511 AT => "@",
512 POUND => "#",
513 TILDE => "~",
514 QUESTION => "?",
515 AMP => "&",
516 PIPE => "|",
517 PLUS => "+",
518 STAR => "*",
519 SLASH => "/",
520 CARET => "^",
521 PERCENT => "%",
522 UNDERSCORE => "_",
523 DOT => ".",
524 DOT2 => "..",
525 DOT3 => "...",
526 DOT2EQ => "..=",
527 COLON => ":",
528 COLON2 => "::",
529 EQ => "=",
530 EQ2 => "==",
531 FAT_ARROW => "=>",
532 BANG => "!",
533 NEQ => "!=",
534 MINUS => "-",
535 THIN_ARROW => "->",
536 LTEQ => "<=",
537 GTEQ => ">=",
538 PLUSEQ => "+=",
539 MINUSEQ => "-=",
540 PIPEEQ => "|=",
541 AMPEQ => "&=",
542 CARETEQ => "^=",
543 SLASHEQ => "/=",
544 STAREQ => "*=",
545 PERCENTEQ => "%=",
546 AMP2 => "&&",
547 PIPE2 => "||",
548 SHL => "<<",
549 SHR => ">>",
550 SHLEQ => "<<=",
551 SHREQ => ">>=",
552 SELF_TYPE_KW => "Self",
553 ABSTRACT_KW => "abstract",
554 AS_KW => "as",
555 BECOME_KW => "become",
556 BOX_KW => "box",
557 BREAK_KW => "break",
558 CONST_KW => "const",
559 CONTINUE_KW => "continue",
560 CRATE_KW => "crate",
561 DO_KW => "do",
562 ELSE_KW => "else",
563 ENUM_KW => "enum",
564 EXTERN_KW => "extern",
565 FALSE_KW => "false",
566 FINAL_KW => "final",
567 FN_KW => "fn",
568 FOR_KW => "for",
569 IF_KW => "if",
570 IMPL_KW => "impl",
571 IN_KW => "in",
572 LET_KW => "let",
573 LOOP_KW => "loop",
574 MACRO_KW => "macro",
575 MATCH_KW => "match",
576 MOD_KW => "mod",
577 MOVE_KW => "move",
578 MUT_KW => "mut",
579 OVERRIDE_KW => "override",
580 PRIV_KW => "priv",
581 PUB_KW => "pub",
582 REF_KW => "ref",
583 RETURN_KW => "return",
584 SELF_KW => "self",
585 STATIC_KW => "static",
586 STRUCT_KW => "struct",
587 SUPER_KW => "super",
588 TRAIT_KW => "trait",
589 TRUE_KW => "true",
590 TYPE_KW => "type",
591 TYPEOF_KW => "typeof",
592 UNSAFE_KW => "unsafe",
593 UNSIZED_KW => "unsized",
594 USE_KW => "use",
595 VIRTUAL_KW => "virtual",
596 WHERE_KW => "where",
597 WHILE_KW => "while",
598 YIELD_KW => "yield",
599 ASM_KW => "asm",
600 ATT_SYNTAX_KW => "att_syntax",
601 AUTO_KW => "auto",
602 BIKESHED_KW => "bikeshed",
603 BUILTIN_KW => "builtin",
604 CLOBBER_ABI_KW => "clobber_abi",
605 DEFAULT_KW => "default",
606 DYN_KW => "dyn",
607 FORMAT_ARGS_KW => "format_args",
608 GLOBAL_ASM_KW => "global_asm",
609 INLATEOUT_KW => "inlateout",
610 INOUT_KW => "inout",
611 LABEL_KW => "label",
612 LATEOUT_KW => "lateout",
613 MACRO_RULES_KW => "macro_rules",
614 MAY_UNWIND_KW => "may_unwind",
615 NAKED_ASM_KW => "naked_asm",
616 NOMEM_KW => "nomem",
617 NORETURN_KW => "noreturn",
618 NOSTACK_KW => "nostack",
619 OFFSET_OF_KW => "offset_of",
620 OPTIONS_KW => "options",
621 OUT_KW => "out",
622 PRESERVES_FLAGS_KW => "preserves_flags",
623 PURE_KW => "pure",
624 RAW_KW => "raw",
625 READONLY_KW => "readonly",
626 SAFE_KW => "safe",
627 SYM_KW => "sym",
628 UNION_KW => "union",
629 YEET_KW => "yeet",
630 ASYNC_KW => "async",
631 AWAIT_KW => "await",
632 DYN_KW => "dyn",
633 GEN_KW => "gen",
634 TRY_KW => "try",
635 }
636 }
637 #[doc = r" Checks whether this syntax kind is a strict keyword for the given edition."]
638 #[doc = r" Strict keywords are identifiers that are always considered keywords."]
639 pub fn is_strict_keyword(self, edition: Edition) -> bool {
640 matches!(
641 self,
642 SELF_TYPE_KW
643 | ABSTRACT_KW
644 | AS_KW
645 | BECOME_KW
646 | BOX_KW
647 | BREAK_KW
648 | CONST_KW
649 | CONTINUE_KW
650 | CRATE_KW
651 | DO_KW
652 | ELSE_KW
653 | ENUM_KW
654 | EXTERN_KW
655 | FALSE_KW
656 | FINAL_KW
657 | FN_KW
658 | FOR_KW
659 | IF_KW
660 | IMPL_KW
661 | IN_KW
662 | LET_KW
663 | LOOP_KW
664 | MACRO_KW
665 | MATCH_KW
666 | MOD_KW
667 | MOVE_KW
668 | MUT_KW
669 | OVERRIDE_KW
670 | PRIV_KW
671 | PUB_KW
672 | REF_KW
673 | RETURN_KW
674 | SELF_KW
675 | STATIC_KW
676 | STRUCT_KW
677 | SUPER_KW
678 | TRAIT_KW
679 | TRUE_KW
680 | TYPE_KW
681 | TYPEOF_KW
682 | UNSAFE_KW
683 | UNSIZED_KW
684 | USE_KW
685 | VIRTUAL_KW
686 | WHERE_KW
687 | WHILE_KW
688 | YIELD_KW
689 ) || match self {
690 ASYNC_KW if Edition::Edition2018 <= edition => true,
691 AWAIT_KW if Edition::Edition2018 <= edition => true,
692 DYN_KW if Edition::Edition2018 <= edition => true,
693 GEN_KW if Edition::Edition2024 <= edition => true,
694 TRY_KW if Edition::Edition2018 <= edition => true,
695 _ => false,
696 }
697 }
698 #[doc = r" Checks whether this syntax kind is a weak keyword for the given edition."]
699 #[doc = r" Weak keywords are identifiers that are considered keywords only in certain contexts."]
700 pub fn is_contextual_keyword(self, edition: Edition) -> bool {
701 match self {
702 ASM_KW => true,
703 ATT_SYNTAX_KW => true,
704 AUTO_KW => true,
705 BIKESHED_KW => true,
706 BUILTIN_KW => true,
707 CLOBBER_ABI_KW => true,
708 DEFAULT_KW => true,
709 DYN_KW if edition < Edition::Edition2018 => true,
710 FORMAT_ARGS_KW => true,
711 GLOBAL_ASM_KW => true,
712 INLATEOUT_KW => true,
713 INOUT_KW => true,
714 LABEL_KW => true,
715 LATEOUT_KW => true,
716 MACRO_RULES_KW => true,
717 MAY_UNWIND_KW => true,
718 NAKED_ASM_KW => true,
719 NOMEM_KW => true,
720 NORETURN_KW => true,
721 NOSTACK_KW => true,
722 OFFSET_OF_KW => true,
723 OPTIONS_KW => true,
724 OUT_KW => true,
725 PRESERVES_FLAGS_KW => true,
726 PURE_KW => true,
727 RAW_KW => true,
728 READONLY_KW => true,
729 SAFE_KW => true,
730 SYM_KW => true,
731 UNION_KW => true,
732 YEET_KW => true,
733 _ => false,
734 }
735 }
736 #[doc = r" Checks whether this syntax kind is a strict or weak keyword for the given edition."]
737 pub fn is_keyword(self, edition: Edition) -> bool {
738 matches!(
739 self,
740 SELF_TYPE_KW
741 | ABSTRACT_KW
742 | AS_KW
743 | BECOME_KW
744 | BOX_KW
745 | BREAK_KW
746 | CONST_KW
747 | CONTINUE_KW
748 | CRATE_KW
749 | DO_KW
750 | ELSE_KW
751 | ENUM_KW
752 | EXTERN_KW
753 | FALSE_KW
754 | FINAL_KW
755 | FN_KW
756 | FOR_KW
757 | IF_KW
758 | IMPL_KW
759 | IN_KW
760 | LET_KW
761 | LOOP_KW
762 | MACRO_KW
763 | MATCH_KW
764 | MOD_KW
765 | MOVE_KW
766 | MUT_KW
767 | OVERRIDE_KW
768 | PRIV_KW
769 | PUB_KW
770 | REF_KW
771 | RETURN_KW
772 | SELF_KW
773 | STATIC_KW
774 | STRUCT_KW
775 | SUPER_KW
776 | TRAIT_KW
777 | TRUE_KW
778 | TYPE_KW
779 | TYPEOF_KW
780 | UNSAFE_KW
781 | UNSIZED_KW
782 | USE_KW
783 | VIRTUAL_KW
784 | WHERE_KW
785 | WHILE_KW
786 | YIELD_KW
787 ) || match self {
788 ASYNC_KW if Edition::Edition2018 <= edition => true,
789 AWAIT_KW if Edition::Edition2018 <= edition => true,
790 DYN_KW if Edition::Edition2018 <= edition => true,
791 GEN_KW if Edition::Edition2024 <= edition => true,
792 TRY_KW if Edition::Edition2018 <= edition => true,
793 ASM_KW => true,
794 ATT_SYNTAX_KW => true,
795 AUTO_KW => true,
796 BIKESHED_KW => true,
797 BUILTIN_KW => true,
798 CLOBBER_ABI_KW => true,
799 DEFAULT_KW => true,
800 DYN_KW if edition < Edition::Edition2018 => true,
801 FORMAT_ARGS_KW => true,
802 GLOBAL_ASM_KW => true,
803 INLATEOUT_KW => true,
804 INOUT_KW => true,
805 LABEL_KW => true,
806 LATEOUT_KW => true,
807 MACRO_RULES_KW => true,
808 MAY_UNWIND_KW => true,
809 NAKED_ASM_KW => true,
810 NOMEM_KW => true,
811 NORETURN_KW => true,
812 NOSTACK_KW => true,
813 OFFSET_OF_KW => true,
814 OPTIONS_KW => true,
815 OUT_KW => true,
816 PRESERVES_FLAGS_KW => true,
817 PURE_KW => true,
818 RAW_KW => true,
819 READONLY_KW => true,
820 SAFE_KW => true,
821 SYM_KW => true,
822 UNION_KW => true,
823 YEET_KW => true,
824 _ => false,
825 }
826 }
827 pub fn is_punct(self) -> bool {
828 matches!(
829 self,
830 DOLLAR
831 | SEMICOLON
832 | COMMA
833 | L_PAREN
834 | R_PAREN
835 | L_CURLY
836 | R_CURLY
837 | L_BRACK
838 | R_BRACK
839 | L_ANGLE
840 | R_ANGLE
841 | AT
842 | POUND
843 | TILDE
844 | QUESTION
845 | AMP
846 | PIPE
847 | PLUS
848 | STAR
849 | SLASH
850 | CARET
851 | PERCENT
852 | UNDERSCORE
853 | DOT
854 | DOT2
855 | DOT3
856 | DOT2EQ
857 | COLON
858 | COLON2
859 | EQ
860 | EQ2
861 | FAT_ARROW
862 | BANG
863 | NEQ
864 | MINUS
865 | THIN_ARROW
866 | LTEQ
867 | GTEQ
868 | PLUSEQ
869 | MINUSEQ
870 | PIPEEQ
871 | AMPEQ
872 | CARETEQ
873 | SLASHEQ
874 | STAREQ
875 | PERCENTEQ
876 | AMP2
877 | PIPE2
878 | SHL
879 | SHR
880 | SHLEQ
881 | SHREQ
882 )
883 }
884 pub fn is_literal(self) -> bool {
885 matches!(self, BYTE | BYTE_STRING | CHAR | C_STRING | FLOAT_NUMBER | INT_NUMBER | STRING)
886 }
887 pub fn from_keyword(ident: &str, edition: Edition) -> Option<SyntaxKind> {
888 let kw = match ident {
889 "Self" => SELF_TYPE_KW,
890 "abstract" => ABSTRACT_KW,
891 "as" => AS_KW,
892 "become" => BECOME_KW,
893 "box" => BOX_KW,
894 "break" => BREAK_KW,
895 "const" => CONST_KW,
896 "continue" => CONTINUE_KW,
897 "crate" => CRATE_KW,
898 "do" => DO_KW,
899 "else" => ELSE_KW,
900 "enum" => ENUM_KW,
901 "extern" => EXTERN_KW,
902 "false" => FALSE_KW,
903 "final" => FINAL_KW,
904 "fn" => FN_KW,
905 "for" => FOR_KW,
906 "if" => IF_KW,
907 "impl" => IMPL_KW,
908 "in" => IN_KW,
909 "let" => LET_KW,
910 "loop" => LOOP_KW,
911 "macro" => MACRO_KW,
912 "match" => MATCH_KW,
913 "mod" => MOD_KW,
914 "move" => MOVE_KW,
915 "mut" => MUT_KW,
916 "override" => OVERRIDE_KW,
917 "priv" => PRIV_KW,
918 "pub" => PUB_KW,
919 "ref" => REF_KW,
920 "return" => RETURN_KW,
921 "self" => SELF_KW,
922 "static" => STATIC_KW,
923 "struct" => STRUCT_KW,
924 "super" => SUPER_KW,
925 "trait" => TRAIT_KW,
926 "true" => TRUE_KW,
927 "type" => TYPE_KW,
928 "typeof" => TYPEOF_KW,
929 "unsafe" => UNSAFE_KW,
930 "unsized" => UNSIZED_KW,
931 "use" => USE_KW,
932 "virtual" => VIRTUAL_KW,
933 "where" => WHERE_KW,
934 "while" => WHILE_KW,
935 "yield" => YIELD_KW,
936 "async" if Edition::Edition2018 <= edition => ASYNC_KW,
937 "await" if Edition::Edition2018 <= edition => AWAIT_KW,
938 "dyn" if Edition::Edition2018 <= edition => DYN_KW,
939 "gen" if Edition::Edition2024 <= edition => GEN_KW,
940 "try" if Edition::Edition2018 <= edition => TRY_KW,
941 _ => return None,
942 };
943 Some(kw)
944 }
945 pub fn from_contextual_keyword(ident: &str, edition: Edition) -> Option<SyntaxKind> {
946 let kw = match ident {
947 "asm" => ASM_KW,
948 "att_syntax" => ATT_SYNTAX_KW,
949 "auto" => AUTO_KW,
950 "bikeshed" => BIKESHED_KW,
951 "builtin" => BUILTIN_KW,
952 "clobber_abi" => CLOBBER_ABI_KW,
953 "default" => DEFAULT_KW,
954 "dyn" if edition < Edition::Edition2018 => DYN_KW,
955 "format_args" => FORMAT_ARGS_KW,
956 "global_asm" => GLOBAL_ASM_KW,
957 "inlateout" => INLATEOUT_KW,
958 "inout" => INOUT_KW,
959 "label" => LABEL_KW,
960 "lateout" => LATEOUT_KW,
961 "macro_rules" => MACRO_RULES_KW,
962 "may_unwind" => MAY_UNWIND_KW,
963 "naked_asm" => NAKED_ASM_KW,
964 "nomem" => NOMEM_KW,
965 "noreturn" => NORETURN_KW,
966 "nostack" => NOSTACK_KW,
967 "offset_of" => OFFSET_OF_KW,
968 "options" => OPTIONS_KW,
969 "out" => OUT_KW,
970 "preserves_flags" => PRESERVES_FLAGS_KW,
971 "pure" => PURE_KW,
972 "raw" => RAW_KW,
973 "readonly" => READONLY_KW,
974 "safe" => SAFE_KW,
975 "sym" => SYM_KW,
976 "union" => UNION_KW,
977 "yeet" => YEET_KW,
978 _ => return None,
979 };
980 Some(kw)
981 }
982 pub fn from_char(c: char) -> Option<SyntaxKind> {
983 let tok = match c {
984 '$' => DOLLAR,
985 ';' => SEMICOLON,
986 ',' => COMMA,
987 '(' => L_PAREN,
988 ')' => R_PAREN,
989 '{' => L_CURLY,
990 '}' => R_CURLY,
991 '[' => L_BRACK,
992 ']' => R_BRACK,
993 '<' => L_ANGLE,
994 '>' => R_ANGLE,
995 '@' => AT,
996 '#' => POUND,
997 '~' => TILDE,
998 '?' => QUESTION,
999 '&' => AMP,
1000 '|' => PIPE,
1001 '+' => PLUS,
1002 '*' => STAR,
1003 '/' => SLASH,
1004 '^' => CARET,
1005 '%' => PERCENT,
1006 '_' => UNDERSCORE,
1007 '.' => DOT,
1008 ':' => COLON,
1009 '=' => EQ,
1010 '!' => BANG,
1011 '-' => MINUS,
1012 _ => return None,
1013 };
1014 Some(tok)
1015 }
1016}
1017#[doc = r" `T![]`"]
1018#[macro_export]
1019macro_rules ! T_ {
1020 [$] => { $ crate :: SyntaxKind :: DOLLAR };
1021 [;] => { $ crate :: SyntaxKind :: SEMICOLON };
1022 [,] => { $ crate :: SyntaxKind :: COMMA };
1023 ['('] => { $ crate :: SyntaxKind :: L_PAREN };
1024 [')'] => { $ crate :: SyntaxKind :: R_PAREN };
1025 ['{'] => { $ crate :: SyntaxKind :: L_CURLY };
1026 ['}'] => { $ crate :: SyntaxKind :: R_CURLY };
1027 ['['] => { $ crate :: SyntaxKind :: L_BRACK };
1028 [']'] => { $ crate :: SyntaxKind :: R_BRACK };
1029 [<] => { $ crate :: SyntaxKind :: L_ANGLE };
1030 [>] => { $ crate :: SyntaxKind :: R_ANGLE };
1031 [@] => { $ crate :: SyntaxKind :: AT };
1032 [#] => { $ crate :: SyntaxKind :: POUND };
1033 [~] => { $ crate :: SyntaxKind :: TILDE };
1034 [?] => { $ crate :: SyntaxKind :: QUESTION };
1035 [&] => { $ crate :: SyntaxKind :: AMP };
1036 [|] => { $ crate :: SyntaxKind :: PIPE };
1037 [+] => { $ crate :: SyntaxKind :: PLUS };
1038 [*] => { $ crate :: SyntaxKind :: STAR };
1039 [/] => { $ crate :: SyntaxKind :: SLASH };
1040 [^] => { $ crate :: SyntaxKind :: CARET };
1041 [%] => { $ crate :: SyntaxKind :: PERCENT };
1042 [_] => { $ crate :: SyntaxKind :: UNDERSCORE };
1043 [.] => { $ crate :: SyntaxKind :: DOT };
1044 [..] => { $ crate :: SyntaxKind :: DOT2 };
1045 [...] => { $ crate :: SyntaxKind :: DOT3 };
1046 [..=] => { $ crate :: SyntaxKind :: DOT2EQ };
1047 [:] => { $ crate :: SyntaxKind :: COLON };
1048 [::] => { $ crate :: SyntaxKind :: COLON2 };
1049 [=] => { $ crate :: SyntaxKind :: EQ };
1050 [==] => { $ crate :: SyntaxKind :: EQ2 };
1051 [=>] => { $ crate :: SyntaxKind :: FAT_ARROW };
1052 [!] => { $ crate :: SyntaxKind :: BANG };
1053 [!=] => { $ crate :: SyntaxKind :: NEQ };
1054 [-] => { $ crate :: SyntaxKind :: MINUS };
1055 [->] => { $ crate :: SyntaxKind :: THIN_ARROW };
1056 [<=] => { $ crate :: SyntaxKind :: LTEQ };
1057 [>=] => { $ crate :: SyntaxKind :: GTEQ };
1058 [+=] => { $ crate :: SyntaxKind :: PLUSEQ };
1059 [-=] => { $ crate :: SyntaxKind :: MINUSEQ };
1060 [|=] => { $ crate :: SyntaxKind :: PIPEEQ };
1061 [&=] => { $ crate :: SyntaxKind :: AMPEQ };
1062 [^=] => { $ crate :: SyntaxKind :: CARETEQ };
1063 [/=] => { $ crate :: SyntaxKind :: SLASHEQ };
1064 [*=] => { $ crate :: SyntaxKind :: STAREQ };
1065 [%=] => { $ crate :: SyntaxKind :: PERCENTEQ };
1066 [&&] => { $ crate :: SyntaxKind :: AMP2 };
1067 [||] => { $ crate :: SyntaxKind :: PIPE2 };
1068 [<<] => { $ crate :: SyntaxKind :: SHL };
1069 [>>] => { $ crate :: SyntaxKind :: SHR };
1070 [<<=] => { $ crate :: SyntaxKind :: SHLEQ };
1071 [>>=] => { $ crate :: SyntaxKind :: SHREQ };
1072 [Self] => { $ crate :: SyntaxKind :: SELF_TYPE_KW };
1073 [abstract] => { $ crate :: SyntaxKind :: ABSTRACT_KW };
1074 [as] => { $ crate :: SyntaxKind :: AS_KW };
1075 [become] => { $ crate :: SyntaxKind :: BECOME_KW };
1076 [box] => { $ crate :: SyntaxKind :: BOX_KW };
1077 [break] => { $ crate :: SyntaxKind :: BREAK_KW };
1078 [const] => { $ crate :: SyntaxKind :: CONST_KW };
1079 [continue] => { $ crate :: SyntaxKind :: CONTINUE_KW };
1080 [crate] => { $ crate :: SyntaxKind :: CRATE_KW };
1081 [do] => { $ crate :: SyntaxKind :: DO_KW };
1082 [else] => { $ crate :: SyntaxKind :: ELSE_KW };
1083 [enum] => { $ crate :: SyntaxKind :: ENUM_KW };
1084 [extern] => { $ crate :: SyntaxKind :: EXTERN_KW };
1085 [false] => { $ crate :: SyntaxKind :: FALSE_KW };
1086 [final] => { $ crate :: SyntaxKind :: FINAL_KW };
1087 [fn] => { $ crate :: SyntaxKind :: FN_KW };
1088 [for] => { $ crate :: SyntaxKind :: FOR_KW };
1089 [if] => { $ crate :: SyntaxKind :: IF_KW };
1090 [impl] => { $ crate :: SyntaxKind :: IMPL_KW };
1091 [in] => { $ crate :: SyntaxKind :: IN_KW };
1092 [let] => { $ crate :: SyntaxKind :: LET_KW };
1093 [loop] => { $ crate :: SyntaxKind :: LOOP_KW };
1094 [macro] => { $ crate :: SyntaxKind :: MACRO_KW };
1095 [match] => { $ crate :: SyntaxKind :: MATCH_KW };
1096 [mod] => { $ crate :: SyntaxKind :: MOD_KW };
1097 [move] => { $ crate :: SyntaxKind :: MOVE_KW };
1098 [mut] => { $ crate :: SyntaxKind :: MUT_KW };
1099 [override] => { $ crate :: SyntaxKind :: OVERRIDE_KW };
1100 [priv] => { $ crate :: SyntaxKind :: PRIV_KW };
1101 [pub] => { $ crate :: SyntaxKind :: PUB_KW };
1102 [ref] => { $ crate :: SyntaxKind :: REF_KW };
1103 [return] => { $ crate :: SyntaxKind :: RETURN_KW };
1104 [self] => { $ crate :: SyntaxKind :: SELF_KW };
1105 [static] => { $ crate :: SyntaxKind :: STATIC_KW };
1106 [struct] => { $ crate :: SyntaxKind :: STRUCT_KW };
1107 [super] => { $ crate :: SyntaxKind :: SUPER_KW };
1108 [trait] => { $ crate :: SyntaxKind :: TRAIT_KW };
1109 [true] => { $ crate :: SyntaxKind :: TRUE_KW };
1110 [type] => { $ crate :: SyntaxKind :: TYPE_KW };
1111 [typeof] => { $ crate :: SyntaxKind :: TYPEOF_KW };
1112 [unsafe] => { $ crate :: SyntaxKind :: UNSAFE_KW };
1113 [unsized] => { $ crate :: SyntaxKind :: UNSIZED_KW };
1114 [use] => { $ crate :: SyntaxKind :: USE_KW };
1115 [virtual] => { $ crate :: SyntaxKind :: VIRTUAL_KW };
1116 [where] => { $ crate :: SyntaxKind :: WHERE_KW };
1117 [while] => { $ crate :: SyntaxKind :: WHILE_KW };
1118 [yield] => { $ crate :: SyntaxKind :: YIELD_KW };
1119 [asm] => { $ crate :: SyntaxKind :: ASM_KW };
1120 [att_syntax] => { $ crate :: SyntaxKind :: ATT_SYNTAX_KW };
1121 [auto] => { $ crate :: SyntaxKind :: AUTO_KW };
1122 [bikeshed] => { $ crate :: SyntaxKind :: BIKESHED_KW };
1123 [builtin] => { $ crate :: SyntaxKind :: BUILTIN_KW };
1124 [clobber_abi] => { $ crate :: SyntaxKind :: CLOBBER_ABI_KW };
1125 [default] => { $ crate :: SyntaxKind :: DEFAULT_KW };
1126 [dyn] => { $ crate :: SyntaxKind :: DYN_KW };
1127 [format_args] => { $ crate :: SyntaxKind :: FORMAT_ARGS_KW };
1128 [global_asm] => { $ crate :: SyntaxKind :: GLOBAL_ASM_KW };
1129 [inlateout] => { $ crate :: SyntaxKind :: INLATEOUT_KW };
1130 [inout] => { $ crate :: SyntaxKind :: INOUT_KW };
1131 [label] => { $ crate :: SyntaxKind :: LABEL_KW };
1132 [lateout] => { $ crate :: SyntaxKind :: LATEOUT_KW };
1133 [macro_rules] => { $ crate :: SyntaxKind :: MACRO_RULES_KW };
1134 [may_unwind] => { $ crate :: SyntaxKind :: MAY_UNWIND_KW };
1135 [naked_asm] => { $ crate :: SyntaxKind :: NAKED_ASM_KW };
1136 [nomem] => { $ crate :: SyntaxKind :: NOMEM_KW };
1137 [noreturn] => { $ crate :: SyntaxKind :: NORETURN_KW };
1138 [nostack] => { $ crate :: SyntaxKind :: NOSTACK_KW };
1139 [offset_of] => { $ crate :: SyntaxKind :: OFFSET_OF_KW };
1140 [options] => { $ crate :: SyntaxKind :: OPTIONS_KW };
1141 [out] => { $ crate :: SyntaxKind :: OUT_KW };
1142 [preserves_flags] => { $ crate :: SyntaxKind :: PRESERVES_FLAGS_KW };
1143 [pure] => { $ crate :: SyntaxKind :: PURE_KW };
1144 [raw] => { $ crate :: SyntaxKind :: RAW_KW };
1145 [readonly] => { $ crate :: SyntaxKind :: READONLY_KW };
1146 [safe] => { $ crate :: SyntaxKind :: SAFE_KW };
1147 [sym] => { $ crate :: SyntaxKind :: SYM_KW };
1148 [union] => { $ crate :: SyntaxKind :: UNION_KW };
1149 [yeet] => { $ crate :: SyntaxKind :: YEET_KW };
1150 [async] => { $ crate :: SyntaxKind :: ASYNC_KW };
1151 [await] => { $ crate :: SyntaxKind :: AWAIT_KW };
1152 [dyn] => { $ crate :: SyntaxKind :: DYN_KW };
1153 [gen] => { $ crate :: SyntaxKind :: GEN_KW };
1154 [try] => { $ crate :: SyntaxKind :: TRY_KW };
1155 [lifetime_ident] => { $ crate :: SyntaxKind :: LIFETIME_IDENT };
1156 [int_number] => { $ crate :: SyntaxKind :: INT_NUMBER };
1157 [ident] => { $ crate :: SyntaxKind :: IDENT };
1158 [string] => { $ crate :: SyntaxKind :: STRING };
1159 [shebang] => { $ crate :: SyntaxKind :: SHEBANG };
1160 [frontmatter] => { $ crate :: SyntaxKind :: FRONTMATTER };
1161}
1162
1163impl ::core::marker::Copy for SyntaxKind {}
1164impl ::core::clone::Clone for SyntaxKind {
1165 #[inline]
1166 fn clone(&self) -> Self { *self }
1167}
1168impl ::core::cmp::PartialEq for SyntaxKind {
1169 #[inline]
1170 fn eq(&self, other: &Self) -> bool { (*self as u16) == (*other as u16) }
1171}
1172impl ::core::cmp::Eq for SyntaxKind {}
1173impl ::core::cmp::PartialOrd for SyntaxKind {
1174 #[inline]
1175 fn partial_cmp(&self, other: &Self) -> core::option::Option<core::cmp::Ordering> {
1176 Some(self.cmp(other))
1177 }
1178}
1179impl ::core::cmp::Ord for SyntaxKind {
1180 #[inline]
1181 fn cmp(&self, other: &Self) -> core::cmp::Ordering { (*self as u16).cmp(&(*other as u16)) }
1182}
1183impl ::core::hash::Hash for SyntaxKind {
1184 fn hash<H: ::core::hash::Hasher>(&self, state: &mut H) {
1185 ::core::mem::discriminant(self).hash(state);
1186 }
1187}