1#[macro_export]
11macro_rules! quote {
12 (@mk_term $sb:expr, $term:expr $(,)?) => {
13 $crate::TokenTree::terminal($sb.mk_span(), $term)
14 };
15
16 (@inner $sb:expr, ( $( $tt:tt )* ) ) => {
17 $crate::TokenTree::parenthesed($sb.mk_span(), $crate::quote! { @with_sb $sb, $( $tt )* })
18 };
19
20 (@inner $sb:expr, { $( $tt:tt )* } ) => {
21 $crate::TokenTree::curly_braced($sb.mk_span(), $crate::quote! { @with_sb $sb, $( $tt )* })
22 };
23
24 (@inner $sb:expr, [ $( $tt:tt )* ] ) => {
25 $crate::TokenTree::bracketed($sb.mk_span(), $crate::quote! { @with_sb $sb, $( $tt )* })
26 };
27
28 (@inner $sb:expr, as) => {
30 $crate::quote!(@mk_term $sb, $crate::Terminal::As)
31 };
32
33 (@inner $sb:expr, async) => {
34 $crate::quote!(@mk_term $sb, $crate::Terminal::Async)
35 };
36
37 (@inner $sb:expr, break) => {
38 $crate::quote!(@mk_term $sb, $crate::Terminal::Break)
39 };
40
41 (@inner $sb:expr, const) => {
42 $crate::quote!(@mk_term $sb, $crate::Terminal::Const)
43 };
44
45 (@inner $sb:expr, continue) => {
46 $crate::quote!(@mk_term $sb, $crate::Terminal::Continue)
47 };
48
49 (@inner $sb:expr, crate) => {
50 $crate::quote!(@mk_term $sb, $crate::Terminal::Crate)
51 };
52
53 (@inner $sb:expr, else) => {
54 $crate::quote!(@mk_term $sb, $crate::Terminal::Else)
55 };
56
57 (@inner $sb:expr, enum) => {
58 $crate::quote!(@mk_term $sb, $crate::Terminal::Enum)
59 };
60
61 (@inner $sb:expr, extern) => {
62 $crate::quote!(@mk_term $sb, $crate::Terminal::Extern)
63 };
64
65 (@inner $sb:expr, false) => {
66 $crate::quote!(@mk_term $sb, $crate::Terminal::False)
67 };
68
69 (@inner $sb:expr, fn) => {
70 $crate::quote!(@mk_term $sb, $crate::Terminal::Fn)
71 };
72
73 (@inner $sb:expr, for) => {
74 $crate::quote!(@mk_term $sb, $crate::Terminal::For)
75 };
76
77 (@inner $sb:expr, if) => {
78 $crate::quote!(@mk_term $sb, $crate::Terminal::If)
79 };
80
81 (@inner $sb:expr, impl) => {
82 $crate::quote!(@mk_term $sb, $crate::Terminal::Impl)
83 };
84
85 (@inner $sb:expr, in) => {
86 $crate::quote!(@mk_term $sb, $crate::Terminal::In)
87 };
88
89 (@inner $sb:expr, let) => {
90 $crate::quote!(@mk_term $sb, $crate::Terminal::Let)
91 };
92
93 (@inner $sb:expr, loop) => {
94 $crate::quote!(@mk_term $sb, $crate::Terminal::Loop)
95 };
96
97 (@inner $sb:expr, match) => {
98 $crate::quote!(@mk_term $sb, $crate::Terminal::Match)
99 };
100
101 (@inner $sb:expr, mod) => {
102 $crate::quote!(@mk_term $sb, $crate::Terminal::Mod)
103 };
104
105 (@inner $sb:expr, move) => {
106 $crate::quote!(@mk_term $sb, $crate::Terminal::Move)
107 };
108
109 (@inner $sb:expr, mut) => {
110 $crate::quote!(@mk_term $sb, $crate::Terminal::Mut)
111 };
112
113 (@inner $sb:expr, pub) => {
114 $crate::quote!(@mk_term $sb, $crate::Terminal::Pub)
115 };
116
117 (@inner $sb:expr, ref) => {
118 $crate::quote!(@mk_term $sb, $crate::Terminal::Ref)
119 };
120
121 (@inner $sb:expr, return) => {
122 $crate::quote!(@mk_term $sb, $crate::Terminal::Return)
123 };
124
125 (@inner $sb:expr, self) => {
126 $crate::quote!(@mk_term $sb, $crate::Terminal::Self_)
127 };
128
129 (@inner $sb:expr, Self) => {
130 $crate::quote!(@mk_term $sb, $crate::Terminal::SelfUpper)
131 };
132
133 (@inner $sb:expr, static) => {
134 $crate::quote!(@mk_term $sb, $crate::Terminal::Static)
135 };
136
137 (@inner $sb:expr, struct) => {
138 $crate::quote!(@mk_term $sb, $crate::Terminal::Struct)
139 };
140
141 (@inner $sb:expr, super) => {
142 $crate::quote!(@mk_term $sb, $crate::Terminal::Super)
143 };
144
145 (@inner $sb:expr, trait) => {
146 $crate::quote!(@mk_term $sb, $crate::Terminal::Trait)
147 };
148
149 (@inner $sb:expr, true) => {
150 $crate::quote!(@mk_term $sb, $crate::Terminal::True)
151 };
152
153 (@inner $sb:expr, type) => {
154 $crate::quote!(@mk_term $sb, $crate::Terminal::Type)
155 };
156
157 (@inner $sb:expr, unsafe) => {
158 $crate::quote!(@mk_term $sb, $crate::Terminal::Unsafe)
159 };
160
161 (@inner $sb:expr, use) => {
162 $crate::quote!(@mk_term $sb, $crate::Terminal::Use)
163 };
164
165 (@inner $sb:expr, where) => {
166 $crate::quote!(@mk_term $sb, $crate::Terminal::Where)
167 };
168
169 (@inner $sb:expr, while) => {
170 $crate::quote!(@mk_term $sb, $crate::Terminal::While)
171 };
172
173 (@inner $sb:expr, abstract) => {
175 $crate::quote!(@mk_term $sb, $crate::Terminal::Abstract)
176 };
177
178 (@inner $sb:expr, become) => {
179 $crate::quote!(@mk_term $sb, $crate::Terminal::Become)
180 };
181
182 (@inner $sb:expr, box) => {
183 $crate::quote!(@mk_term $sb, $crate::Terminal::Box)
184 };
185
186 (@inner $sb:expr, do) => {
187 $crate::quote!(@mk_term $sb, $crate::Terminal::Do)
188 };
189
190 (@inner $sb:expr, final) => {
191 $crate::quote!(@mk_term $sb, $crate::Terminal::Final)
192 };
193
194 (@inner $sb:expr, macro) => {
195 $crate::quote!(@mk_term $sb, $crate::Terminal::Macro)
196 };
197
198 (@inner $sb:expr, offsetof) => {
199 $crate::quote!(@mk_term $sb, $crate::Terminal::Offsetof)
200 };
201
202 (@inner $sb:expr, override) => {
203 $crate::quote!(@mk_term $sb, $crate::Terminal::Override)
204 };
205
206 (@inner $sb:expr, priv) => {
207 $crate::quote!(@mk_term $sb, $crate::Terminal::Priv)
208 };
209
210 (@inner $sb:expr, proc) => {
211 $crate::quote!(@mk_term $sb, $crate::Terminal::Proc)
212 };
213
214 (@inner $sb:expr, sizeof) => {
215 $crate::quote!(@mk_term $sb, $crate::Terminal::Sizeof)
216 };
217
218 (@inner $sb:expr, typeof) => {
219 $crate::quote!(@mk_term $sb, $crate::Terminal::Typeof)
220 };
221
222 (@inner $sb:expr, unsized) => {
223 $crate::quote!(@mk_term $sb, $crate::Terminal::Unsized)
224 };
225
226 (@inner $sb:expr, virtual) => {
227 $crate::quote!(@mk_term $sb, $crate::Terminal::Virtual)
228 };
229
230 (@inner $sb:expr, yield) => {
231 $crate::quote!(@mk_term $sb, $crate::Terminal::Yield)
232 };
233
234 (@inner $sb:expr, await) => {
235 $crate::quote!(@mk_term $sb, $crate::Terminal::Await)
236 };
237
238 (@inner $sb:expr, dyn) => {
239 $crate::quote!(@mk_term $sb, $crate::Terminal::Dyn)
240 };
241
242 (@inner $sb:expr, abstract) => {
243 $crate::quote!(@mk_term $sb, $crate::Terminal::Abstract)
244 };
245
246 (@inner $sb:expr, catch) => {
247 $crate::quote!(@mk_term $sb, $crate::Terminal::Catch)
248 };
249
250 (@inner $sb:expr, final) => {
251 $crate::quote!(@mk_term $sb, $crate::Terminal::Final)
252 };
253
254 (@inner $sb:expr, macro) => {
255 $crate::quote!(@mk_term $sb, $crate::Terminal::Macro)
256 };
257
258 (@inner $sb:expr, override) => {
259 $crate::quote!(@mk_term $sb, $crate::Terminal::Override)
260 };
261
262 (@inner $sb:expr, priv) => {
263 $crate::quote!(@mk_term $sb, $crate::Terminal::Priv)
264 };
265
266 (@inner $sb:expr, try) => {
267 $crate::quote!(@mk_term $sb, $crate::Terminal::Try)
268 };
269
270 (@inner $sb:expr, union) => {
271 $crate::quote!(@mk_term $sb, $crate::Terminal::Union)
272 };
273
274 (@inner $sb:expr, $id:ident) => {
275 $crate::quote!(@mk_term $sb, $crate::Terminal::Ident(stringify!($id).to_string()))
276 };
277
278 (@inner $sb:expr, +) => {
280 $crate::quote!(@mk_term $sb, $crate::Terminal::Plus)
281 };
282
283 (@inner $sb:expr, -) => {
284 $crate::quote!(@mk_term $sb, $crate::Terminal::Minus)
285 };
286
287 (@inner $sb:expr, *) => {
288 $crate::quote!(@mk_term $sb, $crate::Terminal::Star)
289 };
290
291 (@inner $sb:expr, /) => {
292 $crate::quote!(@mk_term $sb, $crate::Terminal::Slash)
293 };
294
295 (@inner $sb:expr, %) => {
296 $crate::quote!(@mk_term $sb, $crate::Terminal::Percent)
297 };
298
299 (@inner $sb:expr, ^) => {
300 $crate::quote!(@mk_term $sb, $crate::Terminal::Caret)
301 };
302
303 (@inner $sb:expr, !) => {
304 $crate::quote!(@mk_term $sb, $crate::Terminal::Not)
305 };
306
307 (@inner $sb:expr, &) => {
308 $crate::quote!(@mk_term $sb, $crate::Terminal::And)
309 };
310
311 (@inner $sb:expr, |) => {
312 $crate::quote!(@mk_term $sb, $crate::Terminal::Or)
313 };
314
315 (@inner $sb:expr, &&) => {
316 $crate::quote!(@mk_term $sb, $crate::Terminal::AndAnd)
317 };
318
319 (@inner $sb:expr, ||) => {
320 $crate::quote!(@mk_term $sb, $crate::Terminal::OrOr)
321 };
322
323 (@inner $sb:expr, <<) => {
324 $crate::quote!(@mk_term $sb, $crate::Terminal::Shl)
325 };
326
327 (@inner $sb:expr, >>) => {
328 $crate::quote!(@mk_term $sb, $crate::Terminal::Shr)
329 };
330
331 (@inner $sb:expr, +=) => {
332 $crate::quote!(@mk_term $sb, $crate::Terminal::PlusEquals)
333 };
334
335 (@inner $sb:expr, -=) => {
336 $crate::quote!(@mk_term $sb, $crate::Terminal::MinusEquals)
337 };
338
339 (@inner $sb:expr, *=) => {
340 $crate::quote!(@mk_term $sb, $crate::Terminal::StarEquals)
341 };
342
343 (@inner $sb:expr, /=) => {
344 $crate::quote!(@mk_term $sb, $crate::Terminal::SlashEquals)
345 };
346
347 (@inner $sb:expr, %=) => {
348 $crate::quote!(@mk_term $sb, $crate::Terminal::PercentEquals)
349 };
350
351 (@inner $sb:expr, ^=) => {
352 $crate::quote!(@mk_term $sb, $crate::Terminal::CaretEquals)
353 };
354
355 (@inner $sb:expr, &=) => {
356 $crate::quote!(@mk_term $sb, $crate::Terminal::AndEquals)
357 };
358
359 (@inner $sb:expr, |=) => {
360 $crate::quote!(@mk_term $sb, $crate::Terminal::OrEquals)
361 };
362
363 (@inner $sb:expr, <<=) => {
364 $crate::quote!(@mk_term $sb, $crate::Terminal::ShlEquals)
365 };
366
367 (@inner $sb:expr, >>=) => {
368 $crate::quote!(@mk_term $sb, $crate::Terminal::ShrEquals)
369 };
370
371 (@inner $sb:expr, =) => {
372 $crate::quote!(@mk_term $sb, $crate::Terminal::Equals)
373 };
374
375 (@inner $sb:expr, ==) => {
376 $crate::quote!(@mk_term $sb, $crate::Terminal::EqualsEquals)
377 };
378
379 (@inner $sb:expr, !=) => {
380 $crate::quote!(@mk_term $sb, $crate::Terminal::NotEquals)
381 };
382
383 (@inner $sb:expr, >) => {
384 $crate::quote!(@mk_term $sb, $crate::Terminal::GreaterThan)
385 };
386
387 (@inner $sb:expr, <) => {
388 $crate::quote!(@mk_term $sb, $crate::Terminal::LessThan)
389 };
390
391 (@inner $sb:expr, >=) => {
392 $crate::quote!(@mk_term $sb, $crate::Terminal::GreaterThanEquals)
393 };
394
395 (@inner $sb:expr, <=) => {
396 $crate::quote!(@mk_term $sb, $crate::Terminal::LessThanEquals)
397 };
398
399 (@inner $sb:expr, @) => {
400 $crate::quote!(@mk_term $sb, $crate::Terminal::At)
401 };
402
403 (@inner $sb:expr, _) => {
404 $crate::quote!(@mk_term $sb, $crate::Terminal::Underscore)
405 };
406
407 (@inner $sb:expr, .) => {
408 $crate::quote!(@mk_term $sb, $crate::Terminal::Dot)
409 };
410
411 (@inner $sb:expr, ..) => {
412 $crate::quote!(@mk_term $sb, $crate::Terminal::DotDot)
413 };
414
415 (@inner $sb:expr, ...) => {
416 $crate::quote!(@mk_term $sb, $crate::Terminal::DotDotDot)
417 };
418
419 (@inner $sb:expr, ..=) => {
420 $crate::quote!(@mk_term $sb, $crate::Terminal::DotDotEquals)
421 };
422
423 (@inner $sb:expr, ,) => {
424 $crate::quote!(@mk_term $sb, $crate::Terminal::Comma)
425 };
426
427 (@inner $sb:expr, ; ) => {
428 $crate::quote!(@mk_term $sb, $crate::Terminal::Semicolon)
429 };
430
431 (@inner $sb:expr, : ) => {
432 $crate::quote!(@mk_term $sb, $crate::Terminal::Colon)
433 };
434
435 (@inner $sb:expr, ::) => {
436 $crate::quote!(@mk_term $sb, $crate::Terminal::ColonColon)
437 };
438
439 (@inner $sb:expr, ->) => {
440 $crate::quote!(@mk_term $sb, $crate::Terminal::RightArrow)
441 };
442
443 (@inner $sb:expr, =>) => {
444 $crate::quote!(@mk_term $sb, $crate::Terminal::FatArrow)
445 };
446
447 (@inner $sb:expr, #) => {
449 $crate::quote!(@mk_term $sb, $crate::Terminal::Dollar)
450 };
451
452 (@inner $sb:expr, ?) => {
453 $crate::quote!(@mk_term $sb, $crate::Terminal::QuestionMark)
454 };
455
456 (@inner $sb:expr, $lit:literal) => {
459 $crate::quote!(
460 @mk_term $sb,
461 $crate::Terminal::Literal(stringify!($lit).to_string()),
462 )
463 };
464
465 (@inner $sb:expr, $tt:tt) => {
466 compile_error!(concat!("Unexpected token: ", stringify!($tt)))
467 };
468
469 (@with_sb $sb:expr, ) => {
470 vec![]
471 };
472
473 (@with_sb $sb:expr, $( $tt:tt )* ) => {{
474 vec![
475 $(
476 $crate::quote!(@inner $sb, $tt)
477 ),*
478 ]
479 }};
480
481 (@inner $sb:expr, $tt:tt) => {
482 compile_error!(concat!("Unexpected token: ", stringify!($tt)))
483 };
484
485 (@with_sb $sb:expr, ) => {
486 vec![]
487 };
488
489 (@with_sb $sb:expr, $( $tt:tt )* ) => {{
490 vec![
491 $(
492 $crate::quote!(@inner $sb, $tt)
493 ),*
494 ]
495 }};
496
497 ( $( $tt:tt )* ) => {{
498 #[allow(unused_variables, unused_mut)]
499 let mut span_builder = $crate::span::DebugSpanBuilder::new();
500 $crate::quote! { @with_sb span_builder, $( $tt )* }
501 }};
502}
503
504macro_rules! impl_spannable {
505 ($in:ident $( <$span:ident> )? => $out:ident) => {
506 impl<Span> $crate::Spannable<Span> for $in$(<$span>)? {
507 type Output = $out<Span>;
508
509 fn with_span(self, span: Span) -> $out<Span> {
510 $out { kind: self.into(), span }
511 }
512 }
513 };
514}
515
516mod tests {
517 macro_rules! test_quote {
518 ($name:ident {
519 { $( $left:tt )* },
520 $right:expr $(,)?
521 }) => {
522 #[test]
523 fn $name() {
524 let left = quote! { $( $left )* };
525 let right = $right;
526
527 right.assert_debug_eq(&left);
528 }
529 }
530 }
531
532 test_quote! {
533 simple_traduction {
534 { a b c d },
535 expect_test::expect![[r#"
536 [
537 TokenTree {
538 kind: Terminal(
539 Ident(
540 "a",
541 ),
542 ),
543 span: 0,
544 },
545 TokenTree {
546 kind: Terminal(
547 Ident(
548 "b",
549 ),
550 ),
551 span: 1,
552 },
553 TokenTree {
554 kind: Terminal(
555 Ident(
556 "c",
557 ),
558 ),
559 span: 2,
560 },
561 TokenTree {
562 kind: Terminal(
563 Ident(
564 "d",
565 ),
566 ),
567 span: 3,
568 },
569 ]
570 "#]],
571 }
572 }
573
574 test_quote! {
575 handles_matcher_syntax {
576 { a + b #( #test:ident )+* },
577 expect_test::expect![[r#"
578 [
579 TokenTree {
580 kind: Terminal(
581 Ident(
582 "a",
583 ),
584 ),
585 span: 0,
586 },
587 TokenTree {
588 kind: Terminal(
589 Plus,
590 ),
591 span: 1,
592 },
593 TokenTree {
594 kind: Terminal(
595 Ident(
596 "b",
597 ),
598 ),
599 span: 2,
600 },
601 TokenTree {
602 kind: Terminal(
603 Dollar,
604 ),
605 span: 3,
606 },
607 TokenTree {
608 kind: Parenthesed(
609 [
610 TokenTree {
611 kind: Terminal(
612 Dollar,
613 ),
614 span: 5,
615 },
616 TokenTree {
617 kind: Terminal(
618 Ident(
619 "test",
620 ),
621 ),
622 span: 6,
623 },
624 TokenTree {
625 kind: Terminal(
626 Colon,
627 ),
628 span: 7,
629 },
630 TokenTree {
631 kind: Terminal(
632 Ident(
633 "ident",
634 ),
635 ),
636 span: 8,
637 },
638 ],
639 ),
640 span: 4,
641 },
642 TokenTree {
643 kind: Terminal(
644 Plus,
645 ),
646 span: 9,
647 },
648 TokenTree {
649 kind: Terminal(
650 Star,
651 ),
652 span: 10,
653 },
654 ]
655 "#]],
656 }
657 }
658
659 test_quote! {
660 can_parse_substition_syntax {
661 { a + b #( + #c + a )+? },
662 expect_test::expect![[r#"
663 [
664 TokenTree {
665 kind: Terminal(
666 Ident(
667 "a",
668 ),
669 ),
670 span: 0,
671 },
672 TokenTree {
673 kind: Terminal(
674 Plus,
675 ),
676 span: 1,
677 },
678 TokenTree {
679 kind: Terminal(
680 Ident(
681 "b",
682 ),
683 ),
684 span: 2,
685 },
686 TokenTree {
687 kind: Terminal(
688 Dollar,
689 ),
690 span: 3,
691 },
692 TokenTree {
693 kind: Parenthesed(
694 [
695 TokenTree {
696 kind: Terminal(
697 Plus,
698 ),
699 span: 5,
700 },
701 TokenTree {
702 kind: Terminal(
703 Dollar,
704 ),
705 span: 6,
706 },
707 TokenTree {
708 kind: Terminal(
709 Ident(
710 "c",
711 ),
712 ),
713 span: 7,
714 },
715 TokenTree {
716 kind: Terminal(
717 Plus,
718 ),
719 span: 8,
720 },
721 TokenTree {
722 kind: Terminal(
723 Ident(
724 "a",
725 ),
726 ),
727 span: 9,
728 },
729 ],
730 ),
731 span: 4,
732 },
733 TokenTree {
734 kind: Terminal(
735 Plus,
736 ),
737 span: 10,
738 },
739 TokenTree {
740 kind: Terminal(
741 QuestionMark,
742 ),
743 span: 11,
744 },
745 ]
746 "#]],
747 }
748 }
749
750 test_quote! {
751 all_tokens {
752 {
753 horse
754 as async await break const continue crate do else enum extern false fn for if impl
755 in let loop match mod move mut pub ref return self Self static struct super trait
756 true type unsafe use where while abstract become box do final macro override
757 priv typeof unsized virtual yield
758 42
759 + - * / % ^ ! & | && || << >> += -= *= /= %= ^= &= |= <<= >>= = == != > < >= <= @ _
760 . .. ... ..= , ; : :: => # ?
761 },
762 expect_test::expect![[r#"
763 [
764 TokenTree {
765 kind: Terminal(
766 Ident(
767 "horse",
768 ),
769 ),
770 span: 0,
771 },
772 TokenTree {
773 kind: Terminal(
774 As,
775 ),
776 span: 1,
777 },
778 TokenTree {
779 kind: Terminal(
780 Async,
781 ),
782 span: 2,
783 },
784 TokenTree {
785 kind: Terminal(
786 Await,
787 ),
788 span: 3,
789 },
790 TokenTree {
791 kind: Terminal(
792 Break,
793 ),
794 span: 4,
795 },
796 TokenTree {
797 kind: Terminal(
798 Const,
799 ),
800 span: 5,
801 },
802 TokenTree {
803 kind: Terminal(
804 Continue,
805 ),
806 span: 6,
807 },
808 TokenTree {
809 kind: Terminal(
810 Crate,
811 ),
812 span: 7,
813 },
814 TokenTree {
815 kind: Terminal(
816 Do,
817 ),
818 span: 8,
819 },
820 TokenTree {
821 kind: Terminal(
822 Else,
823 ),
824 span: 9,
825 },
826 TokenTree {
827 kind: Terminal(
828 Enum,
829 ),
830 span: 10,
831 },
832 TokenTree {
833 kind: Terminal(
834 Extern,
835 ),
836 span: 11,
837 },
838 TokenTree {
839 kind: Terminal(
840 False,
841 ),
842 span: 12,
843 },
844 TokenTree {
845 kind: Terminal(
846 Fn,
847 ),
848 span: 13,
849 },
850 TokenTree {
851 kind: Terminal(
852 For,
853 ),
854 span: 14,
855 },
856 TokenTree {
857 kind: Terminal(
858 If,
859 ),
860 span: 15,
861 },
862 TokenTree {
863 kind: Terminal(
864 Impl,
865 ),
866 span: 16,
867 },
868 TokenTree {
869 kind: Terminal(
870 In,
871 ),
872 span: 17,
873 },
874 TokenTree {
875 kind: Terminal(
876 Let,
877 ),
878 span: 18,
879 },
880 TokenTree {
881 kind: Terminal(
882 Loop,
883 ),
884 span: 19,
885 },
886 TokenTree {
887 kind: Terminal(
888 Match,
889 ),
890 span: 20,
891 },
892 TokenTree {
893 kind: Terminal(
894 Mod,
895 ),
896 span: 21,
897 },
898 TokenTree {
899 kind: Terminal(
900 Move,
901 ),
902 span: 22,
903 },
904 TokenTree {
905 kind: Terminal(
906 Mut,
907 ),
908 span: 23,
909 },
910 TokenTree {
911 kind: Terminal(
912 Pub,
913 ),
914 span: 24,
915 },
916 TokenTree {
917 kind: Terminal(
918 Ref,
919 ),
920 span: 25,
921 },
922 TokenTree {
923 kind: Terminal(
924 Return,
925 ),
926 span: 26,
927 },
928 TokenTree {
929 kind: Terminal(
930 Self_,
931 ),
932 span: 27,
933 },
934 TokenTree {
935 kind: Terminal(
936 SelfUpper,
937 ),
938 span: 28,
939 },
940 TokenTree {
941 kind: Terminal(
942 Static,
943 ),
944 span: 29,
945 },
946 TokenTree {
947 kind: Terminal(
948 Struct,
949 ),
950 span: 30,
951 },
952 TokenTree {
953 kind: Terminal(
954 Super,
955 ),
956 span: 31,
957 },
958 TokenTree {
959 kind: Terminal(
960 Trait,
961 ),
962 span: 32,
963 },
964 TokenTree {
965 kind: Terminal(
966 True,
967 ),
968 span: 33,
969 },
970 TokenTree {
971 kind: Terminal(
972 Type,
973 ),
974 span: 34,
975 },
976 TokenTree {
977 kind: Terminal(
978 Unsafe,
979 ),
980 span: 35,
981 },
982 TokenTree {
983 kind: Terminal(
984 Use,
985 ),
986 span: 36,
987 },
988 TokenTree {
989 kind: Terminal(
990 Where,
991 ),
992 span: 37,
993 },
994 TokenTree {
995 kind: Terminal(
996 While,
997 ),
998 span: 38,
999 },
1000 TokenTree {
1001 kind: Terminal(
1002 Abstract,
1003 ),
1004 span: 39,
1005 },
1006 TokenTree {
1007 kind: Terminal(
1008 Become,
1009 ),
1010 span: 40,
1011 },
1012 TokenTree {
1013 kind: Terminal(
1014 Box,
1015 ),
1016 span: 41,
1017 },
1018 TokenTree {
1019 kind: Terminal(
1020 Do,
1021 ),
1022 span: 42,
1023 },
1024 TokenTree {
1025 kind: Terminal(
1026 Final,
1027 ),
1028 span: 43,
1029 },
1030 TokenTree {
1031 kind: Terminal(
1032 Macro,
1033 ),
1034 span: 44,
1035 },
1036 TokenTree {
1037 kind: Terminal(
1038 Override,
1039 ),
1040 span: 45,
1041 },
1042 TokenTree {
1043 kind: Terminal(
1044 Priv,
1045 ),
1046 span: 46,
1047 },
1048 TokenTree {
1049 kind: Terminal(
1050 Typeof,
1051 ),
1052 span: 47,
1053 },
1054 TokenTree {
1055 kind: Terminal(
1056 Unsized,
1057 ),
1058 span: 48,
1059 },
1060 TokenTree {
1061 kind: Terminal(
1062 Virtual,
1063 ),
1064 span: 49,
1065 },
1066 TokenTree {
1067 kind: Terminal(
1068 Yield,
1069 ),
1070 span: 50,
1071 },
1072 TokenTree {
1073 kind: Terminal(
1074 Literal(
1075 "42",
1076 ),
1077 ),
1078 span: 51,
1079 },
1080 TokenTree {
1081 kind: Terminal(
1082 Plus,
1083 ),
1084 span: 52,
1085 },
1086 TokenTree {
1087 kind: Terminal(
1088 Minus,
1089 ),
1090 span: 53,
1091 },
1092 TokenTree {
1093 kind: Terminal(
1094 Star,
1095 ),
1096 span: 54,
1097 },
1098 TokenTree {
1099 kind: Terminal(
1100 Slash,
1101 ),
1102 span: 55,
1103 },
1104 TokenTree {
1105 kind: Terminal(
1106 Percent,
1107 ),
1108 span: 56,
1109 },
1110 TokenTree {
1111 kind: Terminal(
1112 Caret,
1113 ),
1114 span: 57,
1115 },
1116 TokenTree {
1117 kind: Terminal(
1118 Not,
1119 ),
1120 span: 58,
1121 },
1122 TokenTree {
1123 kind: Terminal(
1124 And,
1125 ),
1126 span: 59,
1127 },
1128 TokenTree {
1129 kind: Terminal(
1130 Or,
1131 ),
1132 span: 60,
1133 },
1134 TokenTree {
1135 kind: Terminal(
1136 AndAnd,
1137 ),
1138 span: 61,
1139 },
1140 TokenTree {
1141 kind: Terminal(
1142 OrOr,
1143 ),
1144 span: 62,
1145 },
1146 TokenTree {
1147 kind: Terminal(
1148 Shl,
1149 ),
1150 span: 63,
1151 },
1152 TokenTree {
1153 kind: Terminal(
1154 Shr,
1155 ),
1156 span: 64,
1157 },
1158 TokenTree {
1159 kind: Terminal(
1160 PlusEquals,
1161 ),
1162 span: 65,
1163 },
1164 TokenTree {
1165 kind: Terminal(
1166 MinusEquals,
1167 ),
1168 span: 66,
1169 },
1170 TokenTree {
1171 kind: Terminal(
1172 StarEquals,
1173 ),
1174 span: 67,
1175 },
1176 TokenTree {
1177 kind: Terminal(
1178 SlashEquals,
1179 ),
1180 span: 68,
1181 },
1182 TokenTree {
1183 kind: Terminal(
1184 PercentEquals,
1185 ),
1186 span: 69,
1187 },
1188 TokenTree {
1189 kind: Terminal(
1190 CaretEquals,
1191 ),
1192 span: 70,
1193 },
1194 TokenTree {
1195 kind: Terminal(
1196 AndEquals,
1197 ),
1198 span: 71,
1199 },
1200 TokenTree {
1201 kind: Terminal(
1202 OrEquals,
1203 ),
1204 span: 72,
1205 },
1206 TokenTree {
1207 kind: Terminal(
1208 ShlEquals,
1209 ),
1210 span: 73,
1211 },
1212 TokenTree {
1213 kind: Terminal(
1214 ShrEquals,
1215 ),
1216 span: 74,
1217 },
1218 TokenTree {
1219 kind: Terminal(
1220 Equals,
1221 ),
1222 span: 75,
1223 },
1224 TokenTree {
1225 kind: Terminal(
1226 EqualsEquals,
1227 ),
1228 span: 76,
1229 },
1230 TokenTree {
1231 kind: Terminal(
1232 NotEquals,
1233 ),
1234 span: 77,
1235 },
1236 TokenTree {
1237 kind: Terminal(
1238 GreaterThan,
1239 ),
1240 span: 78,
1241 },
1242 TokenTree {
1243 kind: Terminal(
1244 LessThan,
1245 ),
1246 span: 79,
1247 },
1248 TokenTree {
1249 kind: Terminal(
1250 GreaterThanEquals,
1251 ),
1252 span: 80,
1253 },
1254 TokenTree {
1255 kind: Terminal(
1256 LessThanEquals,
1257 ),
1258 span: 81,
1259 },
1260 TokenTree {
1261 kind: Terminal(
1262 At,
1263 ),
1264 span: 82,
1265 },
1266 TokenTree {
1267 kind: Terminal(
1268 Underscore,
1269 ),
1270 span: 83,
1271 },
1272 TokenTree {
1273 kind: Terminal(
1274 Dot,
1275 ),
1276 span: 84,
1277 },
1278 TokenTree {
1279 kind: Terminal(
1280 DotDot,
1281 ),
1282 span: 85,
1283 },
1284 TokenTree {
1285 kind: Terminal(
1286 DotDotDot,
1287 ),
1288 span: 86,
1289 },
1290 TokenTree {
1291 kind: Terminal(
1292 DotDotEquals,
1293 ),
1294 span: 87,
1295 },
1296 TokenTree {
1297 kind: Terminal(
1298 Comma,
1299 ),
1300 span: 88,
1301 },
1302 TokenTree {
1303 kind: Terminal(
1304 Semicolon,
1305 ),
1306 span: 89,
1307 },
1308 TokenTree {
1309 kind: Terminal(
1310 Colon,
1311 ),
1312 span: 90,
1313 },
1314 TokenTree {
1315 kind: Terminal(
1316 ColonColon,
1317 ),
1318 span: 91,
1319 },
1320 TokenTree {
1321 kind: Terminal(
1322 FatArrow,
1323 ),
1324 span: 92,
1325 },
1326 TokenTree {
1327 kind: Terminal(
1328 Dollar,
1329 ),
1330 span: 93,
1331 },
1332 TokenTree {
1333 kind: Terminal(
1334 QuestionMark,
1335 ),
1336 span: 94,
1337 },
1338 ]
1339 "#]],
1340 }
1341 }
1342}