lib_ruby_parser_ast/traverse/finder/finder_gen.rs
1// This file is autogenerated by codegen/finder.liquid
2
3use crate::traverse::finder::{Finder, PatternItem};
4use crate::traverse::visitor::Visitor;
5use crate::nodes::*;
6use crate::Node;
7
8impl Visitor for Finder {
9
10 fn on_alias(&mut self, node: &Alias) {
11 match self.pattern.unshift() {
12 Some(PatternItem::To) => { self.visit(&node.to); }
13
14 Some(PatternItem::From) => { self.visit(&node.from); }
15
16 // skip keyword_l
17
18 // skip expression_l
19
20
21
22 None => {
23 // end of the search chain, match
24 self.result = Some(Node::Alias(node.clone()));
25 }
26 Some(_) => {
27 // end of the search chain, no match
28 }
29 }
30 }
31
32 fn on_and(&mut self, node: &And) {
33 match self.pattern.unshift() {
34 Some(PatternItem::Lhs) => { self.visit(&node.lhs); }
35
36 Some(PatternItem::Rhs) => { self.visit(&node.rhs); }
37
38 // skip operator_l
39
40 // skip expression_l
41
42
43
44 None => {
45 // end of the search chain, match
46 self.result = Some(Node::And(node.clone()));
47 }
48 Some(_) => {
49 // end of the search chain, no match
50 }
51 }
52 }
53
54 fn on_and_asgn(&mut self, node: &AndAsgn) {
55 match self.pattern.unshift() {
56 Some(PatternItem::Recv) => { self.visit(&node.recv); }
57
58 Some(PatternItem::Value) => { self.visit(&node.value); }
59
60 // skip operator_l
61
62 // skip expression_l
63
64
65
66 None => {
67 // end of the search chain, match
68 self.result = Some(Node::AndAsgn(node.clone()));
69 }
70 Some(_) => {
71 // end of the search chain, no match
72 }
73 }
74 }
75
76 fn on_arg(&mut self, node: &Arg) {
77 match self.pattern.unshift() {
78 // skip name
79
80 // skip expression_l
81
82
83
84 None => {
85 // end of the search chain, match
86 self.result = Some(Node::Arg(node.clone()));
87 }
88 Some(_) => {
89 // end of the search chain, no match
90 }
91 }
92 }
93
94 fn on_args(&mut self, node: &Args) {
95 match self.pattern.unshift() {
96 Some(PatternItem::Arglist) => { visit_node_list(self, &node.args) }
97
98 // skip expression_l
99
100 // skip begin_l
101
102 // skip end_l
103
104
105
106 None => {
107 // end of the search chain, match
108 self.result = Some(Node::Args(node.clone()));
109 }
110 Some(_) => {
111 // end of the search chain, no match
112 }
113 }
114 }
115
116 fn on_array(&mut self, node: &Array) {
117 match self.pattern.unshift() {
118 Some(PatternItem::Elements) => { visit_node_list(self, &node.elements) }
119
120 // skip begin_l
121
122 // skip end_l
123
124 // skip expression_l
125
126
127
128 None => {
129 // end of the search chain, match
130 self.result = Some(Node::Array(node.clone()));
131 }
132 Some(_) => {
133 // end of the search chain, no match
134 }
135 }
136 }
137
138 fn on_array_pattern(&mut self, node: &ArrayPattern) {
139 match self.pattern.unshift() {
140 Some(PatternItem::Elements) => { visit_node_list(self, &node.elements) }
141
142 // skip begin_l
143
144 // skip end_l
145
146 // skip expression_l
147
148
149
150 None => {
151 // end of the search chain, match
152 self.result = Some(Node::ArrayPattern(node.clone()));
153 }
154 Some(_) => {
155 // end of the search chain, no match
156 }
157 }
158 }
159
160 fn on_array_pattern_with_tail(&mut self, node: &ArrayPatternWithTail) {
161 match self.pattern.unshift() {
162 Some(PatternItem::Elements) => { visit_node_list(self, &node.elements) }
163
164 // skip begin_l
165
166 // skip end_l
167
168 // skip expression_l
169
170
171
172 None => {
173 // end of the search chain, match
174 self.result = Some(Node::ArrayPatternWithTail(node.clone()));
175 }
176 Some(_) => {
177 // end of the search chain, no match
178 }
179 }
180 }
181
182 fn on_back_ref(&mut self, node: &BackRef) {
183 match self.pattern.unshift() {
184 // skip name
185
186 // skip expression_l
187
188
189
190 None => {
191 // end of the search chain, match
192 self.result = Some(Node::BackRef(node.clone()));
193 }
194 Some(_) => {
195 // end of the search chain, no match
196 }
197 }
198 }
199
200 fn on_begin(&mut self, node: &Begin) {
201 match self.pattern.unshift() {
202 Some(PatternItem::Stmts) => { visit_node_list(self, &node.statements) }
203
204 // skip begin_l
205
206 // skip end_l
207
208 // skip expression_l
209
210
211
212 None => {
213 // end of the search chain, match
214 self.result = Some(Node::Begin(node.clone()));
215 }
216 Some(_) => {
217 // end of the search chain, no match
218 }
219 }
220 }
221
222 fn on_block(&mut self, node: &Block) {
223 match self.pattern.unshift() {
224 Some(PatternItem::MethodCall) => { self.visit(&node.call); }
225
226 Some(PatternItem::Args) => { if let Some(inner) = node.args.as_ref() { self.visit(inner); } }
227
228 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
229
230 // skip begin_l
231
232 // skip end_l
233
234 // skip expression_l
235
236
237
238 None => {
239 // end of the search chain, match
240 self.result = Some(Node::Block(node.clone()));
241 }
242 Some(_) => {
243 // end of the search chain, no match
244 }
245 }
246 }
247
248 fn on_blockarg(&mut self, node: &Blockarg) {
249 match self.pattern.unshift() {
250 // skip name
251
252 // skip operator_l
253
254 // skip name_l
255
256 // skip expression_l
257
258
259
260 None => {
261 // end of the search chain, match
262 self.result = Some(Node::Blockarg(node.clone()));
263 }
264 Some(_) => {
265 // end of the search chain, no match
266 }
267 }
268 }
269
270 fn on_block_pass(&mut self, node: &BlockPass) {
271 match self.pattern.unshift() {
272 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
273
274 // skip operator_l
275
276 // skip expression_l
277
278
279
280 None => {
281 // end of the search chain, match
282 self.result = Some(Node::BlockPass(node.clone()));
283 }
284 Some(_) => {
285 // end of the search chain, no match
286 }
287 }
288 }
289
290 fn on_break(&mut self, node: &Break) {
291 match self.pattern.unshift() {
292 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
293
294 // skip keyword_l
295
296 // skip expression_l
297
298
299
300 None => {
301 // end of the search chain, match
302 self.result = Some(Node::Break(node.clone()));
303 }
304 Some(_) => {
305 // end of the search chain, no match
306 }
307 }
308 }
309
310 fn on_case(&mut self, node: &Case) {
311 match self.pattern.unshift() {
312 Some(PatternItem::Expr) => { if let Some(inner) = node.expr.as_ref() { self.visit(inner); } }
313
314 Some(PatternItem::WhenBodies) => { visit_node_list(self, &node.when_bodies) }
315
316 Some(PatternItem::ElseBody) => { if let Some(inner) = node.else_body.as_ref() { self.visit(inner); } }
317
318 // skip keyword_l
319
320 // skip else_l
321
322 // skip end_l
323
324 // skip expression_l
325
326
327
328 None => {
329 // end of the search chain, match
330 self.result = Some(Node::Case(node.clone()));
331 }
332 Some(_) => {
333 // end of the search chain, no match
334 }
335 }
336 }
337
338 fn on_case_match(&mut self, node: &CaseMatch) {
339 match self.pattern.unshift() {
340 Some(PatternItem::Expr) => { self.visit(&node.expr); }
341
342 Some(PatternItem::InBodies) => { visit_node_list(self, &node.in_bodies) }
343
344 Some(PatternItem::ElseBody) => { if let Some(inner) = node.else_body.as_ref() { self.visit(inner); } }
345
346 // skip keyword_l
347
348 // skip else_l
349
350 // skip end_l
351
352 // skip expression_l
353
354
355
356 None => {
357 // end of the search chain, match
358 self.result = Some(Node::CaseMatch(node.clone()));
359 }
360 Some(_) => {
361 // end of the search chain, no match
362 }
363 }
364 }
365
366 fn on_casgn(&mut self, node: &Casgn) {
367 match self.pattern.unshift() {
368 Some(PatternItem::Scope) => { if let Some(inner) = node.scope.as_ref() { self.visit(inner); } }
369
370 // skip name
371
372 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
373
374 // skip double_colon_l
375
376 // skip name_l
377
378 // skip operator_l
379
380 // skip expression_l
381
382
383
384 None => {
385 // end of the search chain, match
386 self.result = Some(Node::Casgn(node.clone()));
387 }
388 Some(_) => {
389 // end of the search chain, no match
390 }
391 }
392 }
393
394 fn on_cbase(&mut self, node: &Cbase) {
395 match self.pattern.unshift() {
396 // skip expression_l
397
398
399
400 None => {
401 // end of the search chain, match
402 self.result = Some(Node::Cbase(node.clone()));
403 }
404 Some(_) => {
405 // end of the search chain, no match
406 }
407 }
408 }
409
410 fn on_class(&mut self, node: &Class) {
411 match self.pattern.unshift() {
412 Some(PatternItem::Name) => { self.visit(&node.name); }
413
414 Some(PatternItem::Superclass) => { if let Some(inner) = node.superclass.as_ref() { self.visit(inner); } }
415
416 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
417
418 // skip keyword_l
419
420 // skip operator_l
421
422 // skip end_l
423
424 // skip expression_l
425
426
427
428 None => {
429 // end of the search chain, match
430 self.result = Some(Node::Class(node.clone()));
431 }
432 Some(_) => {
433 // end of the search chain, no match
434 }
435 }
436 }
437
438 fn on_complex(&mut self, node: &Complex) {
439 match self.pattern.unshift() {
440 // skip value
441
442 // skip operator_l
443
444 // skip expression_l
445
446
447
448 None => {
449 // end of the search chain, match
450 self.result = Some(Node::Complex(node.clone()));
451 }
452 Some(_) => {
453 // end of the search chain, no match
454 }
455 }
456 }
457
458 fn on_const(&mut self, node: &Const) {
459 match self.pattern.unshift() {
460 Some(PatternItem::Scope) => { if let Some(inner) = node.scope.as_ref() { self.visit(inner); } }
461
462 // skip name
463
464 // skip double_colon_l
465
466 // skip name_l
467
468 // skip expression_l
469
470
471
472 None => {
473 // end of the search chain, match
474 self.result = Some(Node::Const(node.clone()));
475 }
476 Some(_) => {
477 // end of the search chain, no match
478 }
479 }
480 }
481
482 fn on_const_pattern(&mut self, node: &ConstPattern) {
483 match self.pattern.unshift() {
484 Some(PatternItem::Const) => { self.visit(&node.const_); }
485
486 Some(PatternItem::Pattern) => { self.visit(&node.pattern); }
487
488 // skip begin_l
489
490 // skip end_l
491
492 // skip expression_l
493
494
495
496 None => {
497 // end of the search chain, match
498 self.result = Some(Node::ConstPattern(node.clone()));
499 }
500 Some(_) => {
501 // end of the search chain, no match
502 }
503 }
504 }
505
506 fn on_c_send(&mut self, node: &CSend) {
507 match self.pattern.unshift() {
508 Some(PatternItem::Recv) => { self.visit(&node.recv); }
509
510 // skip method_name
511
512 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
513
514 // skip dot_l
515
516 // skip selector_l
517
518 // skip begin_l
519
520 // skip end_l
521
522 // skip operator_l
523
524 // skip expression_l
525
526
527
528 None => {
529 // end of the search chain, match
530 self.result = Some(Node::CSend(node.clone()));
531 }
532 Some(_) => {
533 // end of the search chain, no match
534 }
535 }
536 }
537
538 fn on_cvar(&mut self, node: &Cvar) {
539 match self.pattern.unshift() {
540 // skip name
541
542 // skip expression_l
543
544
545
546 None => {
547 // end of the search chain, match
548 self.result = Some(Node::Cvar(node.clone()));
549 }
550 Some(_) => {
551 // end of the search chain, no match
552 }
553 }
554 }
555
556 fn on_cvasgn(&mut self, node: &Cvasgn) {
557 match self.pattern.unshift() {
558 // skip name
559
560 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
561
562 // skip name_l
563
564 // skip operator_l
565
566 // skip expression_l
567
568
569
570 None => {
571 // end of the search chain, match
572 self.result = Some(Node::Cvasgn(node.clone()));
573 }
574 Some(_) => {
575 // end of the search chain, no match
576 }
577 }
578 }
579
580 fn on_def(&mut self, node: &Def) {
581 match self.pattern.unshift() {
582 // skip name
583
584 Some(PatternItem::Args) => { if let Some(inner) = node.args.as_ref() { self.visit(inner); } }
585
586 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
587
588 // skip keyword_l
589
590 // skip name_l
591
592 // skip end_l
593
594 // skip assignment_l
595
596 // skip expression_l
597
598
599
600 None => {
601 // end of the search chain, match
602 self.result = Some(Node::Def(node.clone()));
603 }
604 Some(_) => {
605 // end of the search chain, no match
606 }
607 }
608 }
609
610 fn on_defined(&mut self, node: &Defined) {
611 match self.pattern.unshift() {
612 Some(PatternItem::Value) => { self.visit(&node.value); }
613
614 // skip keyword_l
615
616 // skip begin_l
617
618 // skip end_l
619
620 // skip expression_l
621
622
623
624 None => {
625 // end of the search chain, match
626 self.result = Some(Node::Defined(node.clone()));
627 }
628 Some(_) => {
629 // end of the search chain, no match
630 }
631 }
632 }
633
634 fn on_defs(&mut self, node: &Defs) {
635 match self.pattern.unshift() {
636 Some(PatternItem::Definee) => { self.visit(&node.definee); }
637
638 // skip name
639
640 Some(PatternItem::Args) => { if let Some(inner) = node.args.as_ref() { self.visit(inner); } }
641
642 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
643
644 // skip keyword_l
645
646 // skip operator_l
647
648 // skip name_l
649
650 // skip assignment_l
651
652 // skip end_l
653
654 // skip expression_l
655
656
657
658 None => {
659 // end of the search chain, match
660 self.result = Some(Node::Defs(node.clone()));
661 }
662 Some(_) => {
663 // end of the search chain, no match
664 }
665 }
666 }
667
668 fn on_dstr(&mut self, node: &Dstr) {
669 match self.pattern.unshift() {
670 Some(PatternItem::Parts) => { visit_node_list(self, &node.parts) }
671
672 // skip begin_l
673
674 // skip end_l
675
676 // skip expression_l
677
678
679
680 None => {
681 // end of the search chain, match
682 self.result = Some(Node::Dstr(node.clone()));
683 }
684 Some(_) => {
685 // end of the search chain, no match
686 }
687 }
688 }
689
690 fn on_dsym(&mut self, node: &Dsym) {
691 match self.pattern.unshift() {
692 Some(PatternItem::Parts) => { visit_node_list(self, &node.parts) }
693
694 // skip begin_l
695
696 // skip end_l
697
698 // skip expression_l
699
700
701
702 None => {
703 // end of the search chain, match
704 self.result = Some(Node::Dsym(node.clone()));
705 }
706 Some(_) => {
707 // end of the search chain, no match
708 }
709 }
710 }
711
712 fn on_e_flip_flop(&mut self, node: &EFlipFlop) {
713 match self.pattern.unshift() {
714 Some(PatternItem::Left) => { if let Some(inner) = node.left.as_ref() { self.visit(inner); } }
715
716 Some(PatternItem::Right) => { if let Some(inner) = node.right.as_ref() { self.visit(inner); } }
717
718 // skip operator_l
719
720 // skip expression_l
721
722
723
724 None => {
725 // end of the search chain, match
726 self.result = Some(Node::EFlipFlop(node.clone()));
727 }
728 Some(_) => {
729 // end of the search chain, no match
730 }
731 }
732 }
733
734 fn on_empty_else(&mut self, node: &EmptyElse) {
735 match self.pattern.unshift() {
736 // skip expression_l
737
738
739
740 None => {
741 // end of the search chain, match
742 self.result = Some(Node::EmptyElse(node.clone()));
743 }
744 Some(_) => {
745 // end of the search chain, no match
746 }
747 }
748 }
749
750 fn on_encoding(&mut self, node: &Encoding) {
751 match self.pattern.unshift() {
752 // skip expression_l
753
754
755
756 None => {
757 // end of the search chain, match
758 self.result = Some(Node::Encoding(node.clone()));
759 }
760 Some(_) => {
761 // end of the search chain, no match
762 }
763 }
764 }
765
766 fn on_ensure(&mut self, node: &Ensure) {
767 match self.pattern.unshift() {
768 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
769
770 Some(PatternItem::Ensure) => { if let Some(inner) = node.ensure.as_ref() { self.visit(inner); } }
771
772 // skip keyword_l
773
774 // skip expression_l
775
776
777
778 None => {
779 // end of the search chain, match
780 self.result = Some(Node::Ensure(node.clone()));
781 }
782 Some(_) => {
783 // end of the search chain, no match
784 }
785 }
786 }
787
788 fn on_erange(&mut self, node: &Erange) {
789 match self.pattern.unshift() {
790 Some(PatternItem::Left) => { if let Some(inner) = node.left.as_ref() { self.visit(inner); } }
791
792 Some(PatternItem::Right) => { if let Some(inner) = node.right.as_ref() { self.visit(inner); } }
793
794 // skip operator_l
795
796 // skip expression_l
797
798
799
800 None => {
801 // end of the search chain, match
802 self.result = Some(Node::Erange(node.clone()));
803 }
804 Some(_) => {
805 // end of the search chain, no match
806 }
807 }
808 }
809
810 fn on_false(&mut self, node: &False) {
811 match self.pattern.unshift() {
812 // skip expression_l
813
814
815
816 None => {
817 // end of the search chain, match
818 self.result = Some(Node::False(node.clone()));
819 }
820 Some(_) => {
821 // end of the search chain, no match
822 }
823 }
824 }
825
826 fn on_file(&mut self, node: &File) {
827 match self.pattern.unshift() {
828 // skip expression_l
829
830
831
832 None => {
833 // end of the search chain, match
834 self.result = Some(Node::File(node.clone()));
835 }
836 Some(_) => {
837 // end of the search chain, no match
838 }
839 }
840 }
841
842 fn on_find_pattern(&mut self, node: &FindPattern) {
843 match self.pattern.unshift() {
844 Some(PatternItem::Elements) => { visit_node_list(self, &node.elements) }
845
846 // skip begin_l
847
848 // skip end_l
849
850 // skip expression_l
851
852
853
854 None => {
855 // end of the search chain, match
856 self.result = Some(Node::FindPattern(node.clone()));
857 }
858 Some(_) => {
859 // end of the search chain, no match
860 }
861 }
862 }
863
864 fn on_float(&mut self, node: &Float) {
865 match self.pattern.unshift() {
866 // skip value
867
868 // skip operator_l
869
870 // skip expression_l
871
872
873
874 None => {
875 // end of the search chain, match
876 self.result = Some(Node::Float(node.clone()));
877 }
878 Some(_) => {
879 // end of the search chain, no match
880 }
881 }
882 }
883
884 fn on_for(&mut self, node: &For) {
885 match self.pattern.unshift() {
886 Some(PatternItem::Iterator) => { self.visit(&node.iterator); }
887
888 Some(PatternItem::Iteratee) => { self.visit(&node.iteratee); }
889
890 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
891
892 // skip keyword_l
893
894 // skip operator_l
895
896 // skip begin_l
897
898 // skip end_l
899
900 // skip expression_l
901
902
903
904 None => {
905 // end of the search chain, match
906 self.result = Some(Node::For(node.clone()));
907 }
908 Some(_) => {
909 // end of the search chain, no match
910 }
911 }
912 }
913
914 fn on_forward_arg(&mut self, node: &ForwardArg) {
915 match self.pattern.unshift() {
916 // skip expression_l
917
918
919
920 None => {
921 // end of the search chain, match
922 self.result = Some(Node::ForwardArg(node.clone()));
923 }
924 Some(_) => {
925 // end of the search chain, no match
926 }
927 }
928 }
929
930 fn on_forwarded_args(&mut self, node: &ForwardedArgs) {
931 match self.pattern.unshift() {
932 // skip expression_l
933
934
935
936 None => {
937 // end of the search chain, match
938 self.result = Some(Node::ForwardedArgs(node.clone()));
939 }
940 Some(_) => {
941 // end of the search chain, no match
942 }
943 }
944 }
945
946 fn on_gvar(&mut self, node: &Gvar) {
947 match self.pattern.unshift() {
948 // skip name
949
950 // skip expression_l
951
952
953
954 None => {
955 // end of the search chain, match
956 self.result = Some(Node::Gvar(node.clone()));
957 }
958 Some(_) => {
959 // end of the search chain, no match
960 }
961 }
962 }
963
964 fn on_gvasgn(&mut self, node: &Gvasgn) {
965 match self.pattern.unshift() {
966 // skip name
967
968 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
969
970 // skip name_l
971
972 // skip operator_l
973
974 // skip expression_l
975
976
977
978 None => {
979 // end of the search chain, match
980 self.result = Some(Node::Gvasgn(node.clone()));
981 }
982 Some(_) => {
983 // end of the search chain, no match
984 }
985 }
986 }
987
988 fn on_hash(&mut self, node: &Hash) {
989 match self.pattern.unshift() {
990 Some(PatternItem::Pairs) => { visit_node_list(self, &node.pairs) }
991
992 // skip begin_l
993
994 // skip end_l
995
996 // skip expression_l
997
998
999
1000 None => {
1001 // end of the search chain, match
1002 self.result = Some(Node::Hash(node.clone()));
1003 }
1004 Some(_) => {
1005 // end of the search chain, no match
1006 }
1007 }
1008 }
1009
1010 fn on_hash_pattern(&mut self, node: &HashPattern) {
1011 match self.pattern.unshift() {
1012 Some(PatternItem::Elements) => { visit_node_list(self, &node.elements) }
1013
1014 // skip begin_l
1015
1016 // skip end_l
1017
1018 // skip expression_l
1019
1020
1021
1022 None => {
1023 // end of the search chain, match
1024 self.result = Some(Node::HashPattern(node.clone()));
1025 }
1026 Some(_) => {
1027 // end of the search chain, no match
1028 }
1029 }
1030 }
1031
1032 fn on_heredoc(&mut self, node: &Heredoc) {
1033 match self.pattern.unshift() {
1034 Some(PatternItem::Parts) => { visit_node_list(self, &node.parts) }
1035
1036 // skip heredoc_body_l
1037
1038 // skip heredoc_end_l
1039
1040 // skip expression_l
1041
1042
1043
1044 None => {
1045 // end of the search chain, match
1046 self.result = Some(Node::Heredoc(node.clone()));
1047 }
1048 Some(_) => {
1049 // end of the search chain, no match
1050 }
1051 }
1052 }
1053
1054 fn on_if(&mut self, node: &If) {
1055 match self.pattern.unshift() {
1056 Some(PatternItem::Cond) => { self.visit(&node.cond); }
1057
1058 Some(PatternItem::IfTrue) => { if let Some(inner) = node.if_true.as_ref() { self.visit(inner); } }
1059
1060 Some(PatternItem::IfFalse) => { if let Some(inner) = node.if_false.as_ref() { self.visit(inner); } }
1061
1062 // skip keyword_l
1063
1064 // skip begin_l
1065
1066 // skip else_l
1067
1068 // skip end_l
1069
1070 // skip expression_l
1071
1072
1073
1074 None => {
1075 // end of the search chain, match
1076 self.result = Some(Node::If(node.clone()));
1077 }
1078 Some(_) => {
1079 // end of the search chain, no match
1080 }
1081 }
1082 }
1083
1084 fn on_if_guard(&mut self, node: &IfGuard) {
1085 match self.pattern.unshift() {
1086 Some(PatternItem::Cond) => { self.visit(&node.cond); }
1087
1088 // skip keyword_l
1089
1090 // skip expression_l
1091
1092
1093
1094 None => {
1095 // end of the search chain, match
1096 self.result = Some(Node::IfGuard(node.clone()));
1097 }
1098 Some(_) => {
1099 // end of the search chain, no match
1100 }
1101 }
1102 }
1103
1104 fn on_i_flip_flop(&mut self, node: &IFlipFlop) {
1105 match self.pattern.unshift() {
1106 Some(PatternItem::Left) => { if let Some(inner) = node.left.as_ref() { self.visit(inner); } }
1107
1108 Some(PatternItem::Right) => { if let Some(inner) = node.right.as_ref() { self.visit(inner); } }
1109
1110 // skip operator_l
1111
1112 // skip expression_l
1113
1114
1115
1116 None => {
1117 // end of the search chain, match
1118 self.result = Some(Node::IFlipFlop(node.clone()));
1119 }
1120 Some(_) => {
1121 // end of the search chain, no match
1122 }
1123 }
1124 }
1125
1126 fn on_if_mod(&mut self, node: &IfMod) {
1127 match self.pattern.unshift() {
1128 Some(PatternItem::Cond) => { self.visit(&node.cond); }
1129
1130 Some(PatternItem::IfTrue) => { if let Some(inner) = node.if_true.as_ref() { self.visit(inner); } }
1131
1132 Some(PatternItem::IfFalse) => { if let Some(inner) = node.if_false.as_ref() { self.visit(inner); } }
1133
1134 // skip keyword_l
1135
1136 // skip expression_l
1137
1138
1139
1140 None => {
1141 // end of the search chain, match
1142 self.result = Some(Node::IfMod(node.clone()));
1143 }
1144 Some(_) => {
1145 // end of the search chain, no match
1146 }
1147 }
1148 }
1149
1150 fn on_if_ternary(&mut self, node: &IfTernary) {
1151 match self.pattern.unshift() {
1152 Some(PatternItem::Cond) => { self.visit(&node.cond); }
1153
1154 Some(PatternItem::IfTrue) => { self.visit(&node.if_true); }
1155
1156 Some(PatternItem::IfFalse) => { self.visit(&node.if_false); }
1157
1158 // skip question_l
1159
1160 // skip colon_l
1161
1162 // skip expression_l
1163
1164
1165
1166 None => {
1167 // end of the search chain, match
1168 self.result = Some(Node::IfTernary(node.clone()));
1169 }
1170 Some(_) => {
1171 // end of the search chain, no match
1172 }
1173 }
1174 }
1175
1176 fn on_index(&mut self, node: &Index) {
1177 match self.pattern.unshift() {
1178 Some(PatternItem::Recv) => { self.visit(&node.recv); }
1179
1180 Some(PatternItem::Indexes) => { visit_node_list(self, &node.indexes) }
1181
1182 // skip begin_l
1183
1184 // skip end_l
1185
1186 // skip expression_l
1187
1188
1189
1190 None => {
1191 // end of the search chain, match
1192 self.result = Some(Node::Index(node.clone()));
1193 }
1194 Some(_) => {
1195 // end of the search chain, no match
1196 }
1197 }
1198 }
1199
1200 fn on_index_asgn(&mut self, node: &IndexAsgn) {
1201 match self.pattern.unshift() {
1202 Some(PatternItem::Recv) => { self.visit(&node.recv); }
1203
1204 Some(PatternItem::Indexes) => { visit_node_list(self, &node.indexes) }
1205
1206 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
1207
1208 // skip begin_l
1209
1210 // skip end_l
1211
1212 // skip operator_l
1213
1214 // skip expression_l
1215
1216
1217
1218 None => {
1219 // end of the search chain, match
1220 self.result = Some(Node::IndexAsgn(node.clone()));
1221 }
1222 Some(_) => {
1223 // end of the search chain, no match
1224 }
1225 }
1226 }
1227
1228 fn on_in_pattern(&mut self, node: &InPattern) {
1229 match self.pattern.unshift() {
1230 Some(PatternItem::Pattern) => { self.visit(&node.pattern); }
1231
1232 Some(PatternItem::Guard) => { if let Some(inner) = node.guard.as_ref() { self.visit(inner); } }
1233
1234 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
1235
1236 // skip keyword_l
1237
1238 // skip begin_l
1239
1240 // skip expression_l
1241
1242
1243
1244 None => {
1245 // end of the search chain, match
1246 self.result = Some(Node::InPattern(node.clone()));
1247 }
1248 Some(_) => {
1249 // end of the search chain, no match
1250 }
1251 }
1252 }
1253
1254 fn on_int(&mut self, node: &Int) {
1255 match self.pattern.unshift() {
1256 // skip value
1257
1258 // skip operator_l
1259
1260 // skip expression_l
1261
1262
1263
1264 None => {
1265 // end of the search chain, match
1266 self.result = Some(Node::Int(node.clone()));
1267 }
1268 Some(_) => {
1269 // end of the search chain, no match
1270 }
1271 }
1272 }
1273
1274 fn on_irange(&mut self, node: &Irange) {
1275 match self.pattern.unshift() {
1276 Some(PatternItem::Left) => { if let Some(inner) = node.left.as_ref() { self.visit(inner); } }
1277
1278 Some(PatternItem::Right) => { if let Some(inner) = node.right.as_ref() { self.visit(inner); } }
1279
1280 // skip operator_l
1281
1282 // skip expression_l
1283
1284
1285
1286 None => {
1287 // end of the search chain, match
1288 self.result = Some(Node::Irange(node.clone()));
1289 }
1290 Some(_) => {
1291 // end of the search chain, no match
1292 }
1293 }
1294 }
1295
1296 fn on_ivar(&mut self, node: &Ivar) {
1297 match self.pattern.unshift() {
1298 // skip name
1299
1300 // skip expression_l
1301
1302
1303
1304 None => {
1305 // end of the search chain, match
1306 self.result = Some(Node::Ivar(node.clone()));
1307 }
1308 Some(_) => {
1309 // end of the search chain, no match
1310 }
1311 }
1312 }
1313
1314 fn on_ivasgn(&mut self, node: &Ivasgn) {
1315 match self.pattern.unshift() {
1316 // skip name
1317
1318 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
1319
1320 // skip name_l
1321
1322 // skip operator_l
1323
1324 // skip expression_l
1325
1326
1327
1328 None => {
1329 // end of the search chain, match
1330 self.result = Some(Node::Ivasgn(node.clone()));
1331 }
1332 Some(_) => {
1333 // end of the search chain, no match
1334 }
1335 }
1336 }
1337
1338 fn on_kwarg(&mut self, node: &Kwarg) {
1339 match self.pattern.unshift() {
1340 // skip name
1341
1342 // skip name_l
1343
1344 // skip expression_l
1345
1346
1347
1348 None => {
1349 // end of the search chain, match
1350 self.result = Some(Node::Kwarg(node.clone()));
1351 }
1352 Some(_) => {
1353 // end of the search chain, no match
1354 }
1355 }
1356 }
1357
1358 fn on_kwargs(&mut self, node: &Kwargs) {
1359 match self.pattern.unshift() {
1360 Some(PatternItem::Pairs) => { visit_node_list(self, &node.pairs) }
1361
1362 // skip expression_l
1363
1364
1365
1366 None => {
1367 // end of the search chain, match
1368 self.result = Some(Node::Kwargs(node.clone()));
1369 }
1370 Some(_) => {
1371 // end of the search chain, no match
1372 }
1373 }
1374 }
1375
1376 fn on_kw_begin(&mut self, node: &KwBegin) {
1377 match self.pattern.unshift() {
1378 Some(PatternItem::Stmts) => { visit_node_list(self, &node.statements) }
1379
1380 // skip begin_l
1381
1382 // skip end_l
1383
1384 // skip expression_l
1385
1386
1387
1388 None => {
1389 // end of the search chain, match
1390 self.result = Some(Node::KwBegin(node.clone()));
1391 }
1392 Some(_) => {
1393 // end of the search chain, no match
1394 }
1395 }
1396 }
1397
1398 fn on_kwnilarg(&mut self, node: &Kwnilarg) {
1399 match self.pattern.unshift() {
1400 // skip name_l
1401
1402 // skip expression_l
1403
1404
1405
1406 None => {
1407 // end of the search chain, match
1408 self.result = Some(Node::Kwnilarg(node.clone()));
1409 }
1410 Some(_) => {
1411 // end of the search chain, no match
1412 }
1413 }
1414 }
1415
1416 fn on_kwoptarg(&mut self, node: &Kwoptarg) {
1417 match self.pattern.unshift() {
1418 // skip name
1419
1420 Some(PatternItem::DefaultValue) => { self.visit(&node.default); }
1421
1422 // skip name_l
1423
1424 // skip expression_l
1425
1426
1427
1428 None => {
1429 // end of the search chain, match
1430 self.result = Some(Node::Kwoptarg(node.clone()));
1431 }
1432 Some(_) => {
1433 // end of the search chain, no match
1434 }
1435 }
1436 }
1437
1438 fn on_kwrestarg(&mut self, node: &Kwrestarg) {
1439 match self.pattern.unshift() {
1440 // skip name
1441
1442 // skip operator_l
1443
1444 // skip name_l
1445
1446 // skip expression_l
1447
1448
1449
1450 None => {
1451 // end of the search chain, match
1452 self.result = Some(Node::Kwrestarg(node.clone()));
1453 }
1454 Some(_) => {
1455 // end of the search chain, no match
1456 }
1457 }
1458 }
1459
1460 fn on_kwsplat(&mut self, node: &Kwsplat) {
1461 match self.pattern.unshift() {
1462 Some(PatternItem::Value) => { self.visit(&node.value); }
1463
1464 // skip operator_l
1465
1466 // skip expression_l
1467
1468
1469
1470 None => {
1471 // end of the search chain, match
1472 self.result = Some(Node::Kwsplat(node.clone()));
1473 }
1474 Some(_) => {
1475 // end of the search chain, no match
1476 }
1477 }
1478 }
1479
1480 fn on_lambda(&mut self, node: &Lambda) {
1481 match self.pattern.unshift() {
1482 // skip expression_l
1483
1484
1485
1486 None => {
1487 // end of the search chain, match
1488 self.result = Some(Node::Lambda(node.clone()));
1489 }
1490 Some(_) => {
1491 // end of the search chain, no match
1492 }
1493 }
1494 }
1495
1496 fn on_line(&mut self, node: &Line) {
1497 match self.pattern.unshift() {
1498 // skip expression_l
1499
1500
1501
1502 None => {
1503 // end of the search chain, match
1504 self.result = Some(Node::Line(node.clone()));
1505 }
1506 Some(_) => {
1507 // end of the search chain, no match
1508 }
1509 }
1510 }
1511
1512 fn on_lvar(&mut self, node: &Lvar) {
1513 match self.pattern.unshift() {
1514 // skip name
1515
1516 // skip expression_l
1517
1518
1519
1520 None => {
1521 // end of the search chain, match
1522 self.result = Some(Node::Lvar(node.clone()));
1523 }
1524 Some(_) => {
1525 // end of the search chain, no match
1526 }
1527 }
1528 }
1529
1530 fn on_lvasgn(&mut self, node: &Lvasgn) {
1531 match self.pattern.unshift() {
1532 // skip name
1533
1534 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
1535
1536 // skip name_l
1537
1538 // skip operator_l
1539
1540 // skip expression_l
1541
1542
1543
1544 None => {
1545 // end of the search chain, match
1546 self.result = Some(Node::Lvasgn(node.clone()));
1547 }
1548 Some(_) => {
1549 // end of the search chain, no match
1550 }
1551 }
1552 }
1553
1554 fn on_masgn(&mut self, node: &Masgn) {
1555 match self.pattern.unshift() {
1556 Some(PatternItem::Lhs) => { self.visit(&node.lhs); }
1557
1558 Some(PatternItem::Rhs) => { self.visit(&node.rhs); }
1559
1560 // skip operator_l
1561
1562 // skip expression_l
1563
1564
1565
1566 None => {
1567 // end of the search chain, match
1568 self.result = Some(Node::Masgn(node.clone()));
1569 }
1570 Some(_) => {
1571 // end of the search chain, no match
1572 }
1573 }
1574 }
1575
1576 fn on_match_alt(&mut self, node: &MatchAlt) {
1577 match self.pattern.unshift() {
1578 Some(PatternItem::Lhs) => { self.visit(&node.lhs); }
1579
1580 Some(PatternItem::Rhs) => { self.visit(&node.rhs); }
1581
1582 // skip operator_l
1583
1584 // skip expression_l
1585
1586
1587
1588 None => {
1589 // end of the search chain, match
1590 self.result = Some(Node::MatchAlt(node.clone()));
1591 }
1592 Some(_) => {
1593 // end of the search chain, no match
1594 }
1595 }
1596 }
1597
1598 fn on_match_as(&mut self, node: &MatchAs) {
1599 match self.pattern.unshift() {
1600 Some(PatternItem::Value) => { self.visit(&node.value); }
1601
1602 Some(PatternItem::As) => { self.visit(&node.as_); }
1603
1604 // skip operator_l
1605
1606 // skip expression_l
1607
1608
1609
1610 None => {
1611 // end of the search chain, match
1612 self.result = Some(Node::MatchAs(node.clone()));
1613 }
1614 Some(_) => {
1615 // end of the search chain, no match
1616 }
1617 }
1618 }
1619
1620 fn on_match_current_line(&mut self, node: &MatchCurrentLine) {
1621 match self.pattern.unshift() {
1622 Some(PatternItem::Re) => { self.visit(&node.re); }
1623
1624 // skip expression_l
1625
1626
1627
1628 None => {
1629 // end of the search chain, match
1630 self.result = Some(Node::MatchCurrentLine(node.clone()));
1631 }
1632 Some(_) => {
1633 // end of the search chain, no match
1634 }
1635 }
1636 }
1637
1638 fn on_match_nil_pattern(&mut self, node: &MatchNilPattern) {
1639 match self.pattern.unshift() {
1640 // skip operator_l
1641
1642 // skip name_l
1643
1644 // skip expression_l
1645
1646
1647
1648 None => {
1649 // end of the search chain, match
1650 self.result = Some(Node::MatchNilPattern(node.clone()));
1651 }
1652 Some(_) => {
1653 // end of the search chain, no match
1654 }
1655 }
1656 }
1657
1658 fn on_match_pattern(&mut self, node: &MatchPattern) {
1659 match self.pattern.unshift() {
1660 Some(PatternItem::Value) => { self.visit(&node.value); }
1661
1662 Some(PatternItem::Pattern) => { self.visit(&node.pattern); }
1663
1664 // skip operator_l
1665
1666 // skip expression_l
1667
1668
1669
1670 None => {
1671 // end of the search chain, match
1672 self.result = Some(Node::MatchPattern(node.clone()));
1673 }
1674 Some(_) => {
1675 // end of the search chain, no match
1676 }
1677 }
1678 }
1679
1680 fn on_match_pattern_p(&mut self, node: &MatchPatternP) {
1681 match self.pattern.unshift() {
1682 Some(PatternItem::Value) => { self.visit(&node.value); }
1683
1684 Some(PatternItem::Pattern) => { self.visit(&node.pattern); }
1685
1686 // skip operator_l
1687
1688 // skip expression_l
1689
1690
1691
1692 None => {
1693 // end of the search chain, match
1694 self.result = Some(Node::MatchPatternP(node.clone()));
1695 }
1696 Some(_) => {
1697 // end of the search chain, no match
1698 }
1699 }
1700 }
1701
1702 fn on_match_rest(&mut self, node: &MatchRest) {
1703 match self.pattern.unshift() {
1704 Some(PatternItem::Name) => { if let Some(inner) = node.name.as_ref() { self.visit(inner); } }
1705
1706 // skip operator_l
1707
1708 // skip expression_l
1709
1710
1711
1712 None => {
1713 // end of the search chain, match
1714 self.result = Some(Node::MatchRest(node.clone()));
1715 }
1716 Some(_) => {
1717 // end of the search chain, no match
1718 }
1719 }
1720 }
1721
1722 fn on_match_var(&mut self, node: &MatchVar) {
1723 match self.pattern.unshift() {
1724 // skip name
1725
1726 // skip name_l
1727
1728 // skip expression_l
1729
1730
1731
1732 None => {
1733 // end of the search chain, match
1734 self.result = Some(Node::MatchVar(node.clone()));
1735 }
1736 Some(_) => {
1737 // end of the search chain, no match
1738 }
1739 }
1740 }
1741
1742 fn on_match_with_lvasgn(&mut self, node: &MatchWithLvasgn) {
1743 match self.pattern.unshift() {
1744 Some(PatternItem::Re) => { self.visit(&node.re); }
1745
1746 Some(PatternItem::Value) => { self.visit(&node.value); }
1747
1748 // skip operator_l
1749
1750 // skip expression_l
1751
1752
1753
1754 None => {
1755 // end of the search chain, match
1756 self.result = Some(Node::MatchWithLvasgn(node.clone()));
1757 }
1758 Some(_) => {
1759 // end of the search chain, no match
1760 }
1761 }
1762 }
1763
1764 fn on_mlhs(&mut self, node: &Mlhs) {
1765 match self.pattern.unshift() {
1766 Some(PatternItem::MlhsItems) => { visit_node_list(self, &node.items) }
1767
1768 // skip begin_l
1769
1770 // skip end_l
1771
1772 // skip expression_l
1773
1774
1775
1776 None => {
1777 // end of the search chain, match
1778 self.result = Some(Node::Mlhs(node.clone()));
1779 }
1780 Some(_) => {
1781 // end of the search chain, no match
1782 }
1783 }
1784 }
1785
1786 fn on_module(&mut self, node: &Module) {
1787 match self.pattern.unshift() {
1788 Some(PatternItem::Name) => { self.visit(&node.name); }
1789
1790 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
1791
1792 // skip keyword_l
1793
1794 // skip end_l
1795
1796 // skip expression_l
1797
1798
1799
1800 None => {
1801 // end of the search chain, match
1802 self.result = Some(Node::Module(node.clone()));
1803 }
1804 Some(_) => {
1805 // end of the search chain, no match
1806 }
1807 }
1808 }
1809
1810 fn on_next(&mut self, node: &Next) {
1811 match self.pattern.unshift() {
1812 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
1813
1814 // skip keyword_l
1815
1816 // skip expression_l
1817
1818
1819
1820 None => {
1821 // end of the search chain, match
1822 self.result = Some(Node::Next(node.clone()));
1823 }
1824 Some(_) => {
1825 // end of the search chain, no match
1826 }
1827 }
1828 }
1829
1830 fn on_nil(&mut self, node: &Nil) {
1831 match self.pattern.unshift() {
1832 // skip expression_l
1833
1834
1835
1836 None => {
1837 // end of the search chain, match
1838 self.result = Some(Node::Nil(node.clone()));
1839 }
1840 Some(_) => {
1841 // end of the search chain, no match
1842 }
1843 }
1844 }
1845
1846 fn on_nth_ref(&mut self, node: &NthRef) {
1847 match self.pattern.unshift() {
1848 // skip name
1849
1850 // skip expression_l
1851
1852
1853
1854 None => {
1855 // end of the search chain, match
1856 self.result = Some(Node::NthRef(node.clone()));
1857 }
1858 Some(_) => {
1859 // end of the search chain, no match
1860 }
1861 }
1862 }
1863
1864 fn on_numblock(&mut self, node: &Numblock) {
1865 match self.pattern.unshift() {
1866 Some(PatternItem::MethodCall) => { self.visit(&node.call); }
1867
1868 // skip numargs
1869
1870 Some(PatternItem::Body) => { self.visit(&node.body); }
1871
1872 // skip begin_l
1873
1874 // skip end_l
1875
1876 // skip expression_l
1877
1878
1879
1880 None => {
1881 // end of the search chain, match
1882 self.result = Some(Node::Numblock(node.clone()));
1883 }
1884 Some(_) => {
1885 // end of the search chain, no match
1886 }
1887 }
1888 }
1889
1890 fn on_op_asgn(&mut self, node: &OpAsgn) {
1891 match self.pattern.unshift() {
1892 Some(PatternItem::Recv) => { self.visit(&node.recv); }
1893
1894 // skip operator
1895
1896 Some(PatternItem::Value) => { self.visit(&node.value); }
1897
1898 // skip operator_l
1899
1900 // skip expression_l
1901
1902
1903
1904 None => {
1905 // end of the search chain, match
1906 self.result = Some(Node::OpAsgn(node.clone()));
1907 }
1908 Some(_) => {
1909 // end of the search chain, no match
1910 }
1911 }
1912 }
1913
1914 fn on_optarg(&mut self, node: &Optarg) {
1915 match self.pattern.unshift() {
1916 // skip name
1917
1918 Some(PatternItem::DefaultValue) => { self.visit(&node.default); }
1919
1920 // skip name_l
1921
1922 // skip operator_l
1923
1924 // skip expression_l
1925
1926
1927
1928 None => {
1929 // end of the search chain, match
1930 self.result = Some(Node::Optarg(node.clone()));
1931 }
1932 Some(_) => {
1933 // end of the search chain, no match
1934 }
1935 }
1936 }
1937
1938 fn on_or(&mut self, node: &Or) {
1939 match self.pattern.unshift() {
1940 Some(PatternItem::Lhs) => { self.visit(&node.lhs); }
1941
1942 Some(PatternItem::Rhs) => { self.visit(&node.rhs); }
1943
1944 // skip operator_l
1945
1946 // skip expression_l
1947
1948
1949
1950 None => {
1951 // end of the search chain, match
1952 self.result = Some(Node::Or(node.clone()));
1953 }
1954 Some(_) => {
1955 // end of the search chain, no match
1956 }
1957 }
1958 }
1959
1960 fn on_or_asgn(&mut self, node: &OrAsgn) {
1961 match self.pattern.unshift() {
1962 Some(PatternItem::Recv) => { self.visit(&node.recv); }
1963
1964 Some(PatternItem::Value) => { self.visit(&node.value); }
1965
1966 // skip operator_l
1967
1968 // skip expression_l
1969
1970
1971
1972 None => {
1973 // end of the search chain, match
1974 self.result = Some(Node::OrAsgn(node.clone()));
1975 }
1976 Some(_) => {
1977 // end of the search chain, no match
1978 }
1979 }
1980 }
1981
1982 fn on_pair(&mut self, node: &Pair) {
1983 match self.pattern.unshift() {
1984 Some(PatternItem::Key) => { self.visit(&node.key); }
1985
1986 Some(PatternItem::Value) => { self.visit(&node.value); }
1987
1988 // skip operator_l
1989
1990 // skip expression_l
1991
1992
1993
1994 None => {
1995 // end of the search chain, match
1996 self.result = Some(Node::Pair(node.clone()));
1997 }
1998 Some(_) => {
1999 // end of the search chain, no match
2000 }
2001 }
2002 }
2003
2004 fn on_pin(&mut self, node: &Pin) {
2005 match self.pattern.unshift() {
2006 Some(PatternItem::Var) => { self.visit(&node.var); }
2007
2008 // skip selector_l
2009
2010 // skip expression_l
2011
2012
2013
2014 None => {
2015 // end of the search chain, match
2016 self.result = Some(Node::Pin(node.clone()));
2017 }
2018 Some(_) => {
2019 // end of the search chain, no match
2020 }
2021 }
2022 }
2023
2024 fn on_postexe(&mut self, node: &Postexe) {
2025 match self.pattern.unshift() {
2026 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2027
2028 // skip keyword_l
2029
2030 // skip begin_l
2031
2032 // skip end_l
2033
2034 // skip expression_l
2035
2036
2037
2038 None => {
2039 // end of the search chain, match
2040 self.result = Some(Node::Postexe(node.clone()));
2041 }
2042 Some(_) => {
2043 // end of the search chain, no match
2044 }
2045 }
2046 }
2047
2048 fn on_preexe(&mut self, node: &Preexe) {
2049 match self.pattern.unshift() {
2050 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2051
2052 // skip keyword_l
2053
2054 // skip begin_l
2055
2056 // skip end_l
2057
2058 // skip expression_l
2059
2060
2061
2062 None => {
2063 // end of the search chain, match
2064 self.result = Some(Node::Preexe(node.clone()));
2065 }
2066 Some(_) => {
2067 // end of the search chain, no match
2068 }
2069 }
2070 }
2071
2072 fn on_procarg0(&mut self, node: &Procarg0) {
2073 match self.pattern.unshift() {
2074 Some(PatternItem::Arglist) => { visit_node_list(self, &node.args) }
2075
2076 // skip begin_l
2077
2078 // skip end_l
2079
2080 // skip expression_l
2081
2082
2083
2084 None => {
2085 // end of the search chain, match
2086 self.result = Some(Node::Procarg0(node.clone()));
2087 }
2088 Some(_) => {
2089 // end of the search chain, no match
2090 }
2091 }
2092 }
2093
2094 fn on_rational(&mut self, node: &Rational) {
2095 match self.pattern.unshift() {
2096 // skip value
2097
2098 // skip operator_l
2099
2100 // skip expression_l
2101
2102
2103
2104 None => {
2105 // end of the search chain, match
2106 self.result = Some(Node::Rational(node.clone()));
2107 }
2108 Some(_) => {
2109 // end of the search chain, no match
2110 }
2111 }
2112 }
2113
2114 fn on_redo(&mut self, node: &Redo) {
2115 match self.pattern.unshift() {
2116 // skip expression_l
2117
2118
2119
2120 None => {
2121 // end of the search chain, match
2122 self.result = Some(Node::Redo(node.clone()));
2123 }
2124 Some(_) => {
2125 // end of the search chain, no match
2126 }
2127 }
2128 }
2129
2130 fn on_regexp(&mut self, node: &Regexp) {
2131 match self.pattern.unshift() {
2132 Some(PatternItem::Parts) => { visit_node_list(self, &node.parts) }
2133
2134 Some(PatternItem::Options) => { if let Some(inner) = node.options.as_ref() { self.visit(inner); } }
2135
2136 // skip begin_l
2137
2138 // skip end_l
2139
2140 // skip expression_l
2141
2142
2143
2144 None => {
2145 // end of the search chain, match
2146 self.result = Some(Node::Regexp(node.clone()));
2147 }
2148 Some(_) => {
2149 // end of the search chain, no match
2150 }
2151 }
2152 }
2153
2154 fn on_reg_opt(&mut self, node: &RegOpt) {
2155 match self.pattern.unshift() {
2156 // skip options
2157
2158 // skip expression_l
2159
2160
2161
2162 None => {
2163 // end of the search chain, match
2164 self.result = Some(Node::RegOpt(node.clone()));
2165 }
2166 Some(_) => {
2167 // end of the search chain, no match
2168 }
2169 }
2170 }
2171
2172 fn on_rescue(&mut self, node: &Rescue) {
2173 match self.pattern.unshift() {
2174 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2175
2176 Some(PatternItem::RescueBodies) => { visit_node_list(self, &node.rescue_bodies) }
2177
2178 Some(PatternItem::ElseBody) => { if let Some(inner) = node.else_.as_ref() { self.visit(inner); } }
2179
2180 // skip else_l
2181
2182 // skip expression_l
2183
2184
2185
2186 None => {
2187 // end of the search chain, match
2188 self.result = Some(Node::Rescue(node.clone()));
2189 }
2190 Some(_) => {
2191 // end of the search chain, no match
2192 }
2193 }
2194 }
2195
2196 fn on_rescue_body(&mut self, node: &RescueBody) {
2197 match self.pattern.unshift() {
2198 Some(PatternItem::ExcList) => { if let Some(inner) = node.exc_list.as_ref() { self.visit(inner); } }
2199
2200 Some(PatternItem::ExcVar) => { if let Some(inner) = node.exc_var.as_ref() { self.visit(inner); } }
2201
2202 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2203
2204 // skip keyword_l
2205
2206 // skip assoc_l
2207
2208 // skip begin_l
2209
2210 // skip expression_l
2211
2212
2213
2214 None => {
2215 // end of the search chain, match
2216 self.result = Some(Node::RescueBody(node.clone()));
2217 }
2218 Some(_) => {
2219 // end of the search chain, no match
2220 }
2221 }
2222 }
2223
2224 fn on_restarg(&mut self, node: &Restarg) {
2225 match self.pattern.unshift() {
2226 // skip name
2227
2228 // skip operator_l
2229
2230 // skip name_l
2231
2232 // skip expression_l
2233
2234
2235
2236 None => {
2237 // end of the search chain, match
2238 self.result = Some(Node::Restarg(node.clone()));
2239 }
2240 Some(_) => {
2241 // end of the search chain, no match
2242 }
2243 }
2244 }
2245
2246 fn on_retry(&mut self, node: &Retry) {
2247 match self.pattern.unshift() {
2248 // skip expression_l
2249
2250
2251
2252 None => {
2253 // end of the search chain, match
2254 self.result = Some(Node::Retry(node.clone()));
2255 }
2256 Some(_) => {
2257 // end of the search chain, no match
2258 }
2259 }
2260 }
2261
2262 fn on_return(&mut self, node: &Return) {
2263 match self.pattern.unshift() {
2264 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
2265
2266 // skip keyword_l
2267
2268 // skip expression_l
2269
2270
2271
2272 None => {
2273 // end of the search chain, match
2274 self.result = Some(Node::Return(node.clone()));
2275 }
2276 Some(_) => {
2277 // end of the search chain, no match
2278 }
2279 }
2280 }
2281
2282 fn on_s_class(&mut self, node: &SClass) {
2283 match self.pattern.unshift() {
2284 Some(PatternItem::Expr) => { self.visit(&node.expr); }
2285
2286 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2287
2288 // skip keyword_l
2289
2290 // skip operator_l
2291
2292 // skip end_l
2293
2294 // skip expression_l
2295
2296
2297
2298 None => {
2299 // end of the search chain, match
2300 self.result = Some(Node::SClass(node.clone()));
2301 }
2302 Some(_) => {
2303 // end of the search chain, no match
2304 }
2305 }
2306 }
2307
2308 fn on_self_(&mut self, node: &Self_) {
2309 match self.pattern.unshift() {
2310 // skip expression_l
2311
2312
2313
2314 None => {
2315 // end of the search chain, match
2316 self.result = Some(Node::Self_(node.clone()));
2317 }
2318 Some(_) => {
2319 // end of the search chain, no match
2320 }
2321 }
2322 }
2323
2324 fn on_send(&mut self, node: &Send) {
2325 match self.pattern.unshift() {
2326 Some(PatternItem::Recv) => { if let Some(inner) = node.recv.as_ref() { self.visit(inner); } }
2327
2328 // skip method_name
2329
2330 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
2331
2332 // skip dot_l
2333
2334 // skip selector_l
2335
2336 // skip begin_l
2337
2338 // skip end_l
2339
2340 // skip operator_l
2341
2342 // skip expression_l
2343
2344
2345
2346 None => {
2347 // end of the search chain, match
2348 self.result = Some(Node::Send(node.clone()));
2349 }
2350 Some(_) => {
2351 // end of the search chain, no match
2352 }
2353 }
2354 }
2355
2356 fn on_shadowarg(&mut self, node: &Shadowarg) {
2357 match self.pattern.unshift() {
2358 // skip name
2359
2360 // skip expression_l
2361
2362
2363
2364 None => {
2365 // end of the search chain, match
2366 self.result = Some(Node::Shadowarg(node.clone()));
2367 }
2368 Some(_) => {
2369 // end of the search chain, no match
2370 }
2371 }
2372 }
2373
2374 fn on_splat(&mut self, node: &Splat) {
2375 match self.pattern.unshift() {
2376 Some(PatternItem::Value) => { if let Some(inner) = node.value.as_ref() { self.visit(inner); } }
2377
2378 // skip operator_l
2379
2380 // skip expression_l
2381
2382
2383
2384 None => {
2385 // end of the search chain, match
2386 self.result = Some(Node::Splat(node.clone()));
2387 }
2388 Some(_) => {
2389 // end of the search chain, no match
2390 }
2391 }
2392 }
2393
2394 fn on_str(&mut self, node: &Str) {
2395 match self.pattern.unshift() {
2396 // skip value
2397
2398 // skip begin_l
2399
2400 // skip end_l
2401
2402 // skip expression_l
2403
2404
2405
2406 None => {
2407 // end of the search chain, match
2408 self.result = Some(Node::Str(node.clone()));
2409 }
2410 Some(_) => {
2411 // end of the search chain, no match
2412 }
2413 }
2414 }
2415
2416 fn on_super(&mut self, node: &Super) {
2417 match self.pattern.unshift() {
2418 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
2419
2420 // skip keyword_l
2421
2422 // skip begin_l
2423
2424 // skip end_l
2425
2426 // skip expression_l
2427
2428
2429
2430 None => {
2431 // end of the search chain, match
2432 self.result = Some(Node::Super(node.clone()));
2433 }
2434 Some(_) => {
2435 // end of the search chain, no match
2436 }
2437 }
2438 }
2439
2440 fn on_sym(&mut self, node: &Sym) {
2441 match self.pattern.unshift() {
2442 // skip name
2443
2444 // skip begin_l
2445
2446 // skip end_l
2447
2448 // skip expression_l
2449
2450
2451
2452 None => {
2453 // end of the search chain, match
2454 self.result = Some(Node::Sym(node.clone()));
2455 }
2456 Some(_) => {
2457 // end of the search chain, no match
2458 }
2459 }
2460 }
2461
2462 fn on_true(&mut self, node: &True) {
2463 match self.pattern.unshift() {
2464 // skip expression_l
2465
2466
2467
2468 None => {
2469 // end of the search chain, match
2470 self.result = Some(Node::True(node.clone()));
2471 }
2472 Some(_) => {
2473 // end of the search chain, no match
2474 }
2475 }
2476 }
2477
2478 fn on_undef(&mut self, node: &Undef) {
2479 match self.pattern.unshift() {
2480 Some(PatternItem::Args) => { visit_node_list(self, &node.names) }
2481
2482 // skip keyword_l
2483
2484 // skip expression_l
2485
2486
2487
2488 None => {
2489 // end of the search chain, match
2490 self.result = Some(Node::Undef(node.clone()));
2491 }
2492 Some(_) => {
2493 // end of the search chain, no match
2494 }
2495 }
2496 }
2497
2498 fn on_unless_guard(&mut self, node: &UnlessGuard) {
2499 match self.pattern.unshift() {
2500 Some(PatternItem::Cond) => { self.visit(&node.cond); }
2501
2502 // skip keyword_l
2503
2504 // skip expression_l
2505
2506
2507
2508 None => {
2509 // end of the search chain, match
2510 self.result = Some(Node::UnlessGuard(node.clone()));
2511 }
2512 Some(_) => {
2513 // end of the search chain, no match
2514 }
2515 }
2516 }
2517
2518 fn on_until(&mut self, node: &Until) {
2519 match self.pattern.unshift() {
2520 Some(PatternItem::Cond) => { self.visit(&node.cond); }
2521
2522 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2523
2524 // skip keyword_l
2525
2526 // skip begin_l
2527
2528 // skip end_l
2529
2530 // skip expression_l
2531
2532
2533
2534 None => {
2535 // end of the search chain, match
2536 self.result = Some(Node::Until(node.clone()));
2537 }
2538 Some(_) => {
2539 // end of the search chain, no match
2540 }
2541 }
2542 }
2543
2544 fn on_until_post(&mut self, node: &UntilPost) {
2545 match self.pattern.unshift() {
2546 Some(PatternItem::Cond) => { self.visit(&node.cond); }
2547
2548 Some(PatternItem::Body) => { self.visit(&node.body); }
2549
2550 // skip keyword_l
2551
2552 // skip expression_l
2553
2554
2555
2556 None => {
2557 // end of the search chain, match
2558 self.result = Some(Node::UntilPost(node.clone()));
2559 }
2560 Some(_) => {
2561 // end of the search chain, no match
2562 }
2563 }
2564 }
2565
2566 fn on_when(&mut self, node: &When) {
2567 match self.pattern.unshift() {
2568 Some(PatternItem::Args) => { visit_node_list(self, &node.patterns) }
2569
2570 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2571
2572 // skip keyword_l
2573
2574 // skip begin_l
2575
2576 // skip expression_l
2577
2578
2579
2580 None => {
2581 // end of the search chain, match
2582 self.result = Some(Node::When(node.clone()));
2583 }
2584 Some(_) => {
2585 // end of the search chain, no match
2586 }
2587 }
2588 }
2589
2590 fn on_while(&mut self, node: &While) {
2591 match self.pattern.unshift() {
2592 Some(PatternItem::Cond) => { self.visit(&node.cond); }
2593
2594 Some(PatternItem::Body) => { if let Some(inner) = node.body.as_ref() { self.visit(inner); } }
2595
2596 // skip keyword_l
2597
2598 // skip begin_l
2599
2600 // skip end_l
2601
2602 // skip expression_l
2603
2604
2605
2606 None => {
2607 // end of the search chain, match
2608 self.result = Some(Node::While(node.clone()));
2609 }
2610 Some(_) => {
2611 // end of the search chain, no match
2612 }
2613 }
2614 }
2615
2616 fn on_while_post(&mut self, node: &WhilePost) {
2617 match self.pattern.unshift() {
2618 Some(PatternItem::Cond) => { self.visit(&node.cond); }
2619
2620 Some(PatternItem::Body) => { self.visit(&node.body); }
2621
2622 // skip keyword_l
2623
2624 // skip expression_l
2625
2626
2627
2628 None => {
2629 // end of the search chain, match
2630 self.result = Some(Node::WhilePost(node.clone()));
2631 }
2632 Some(_) => {
2633 // end of the search chain, no match
2634 }
2635 }
2636 }
2637
2638 fn on_x_heredoc(&mut self, node: &XHeredoc) {
2639 match self.pattern.unshift() {
2640 Some(PatternItem::Parts) => { visit_node_list(self, &node.parts) }
2641
2642 // skip heredoc_body_l
2643
2644 // skip heredoc_end_l
2645
2646 // skip expression_l
2647
2648
2649
2650 None => {
2651 // end of the search chain, match
2652 self.result = Some(Node::XHeredoc(node.clone()));
2653 }
2654 Some(_) => {
2655 // end of the search chain, no match
2656 }
2657 }
2658 }
2659
2660 fn on_xstr(&mut self, node: &Xstr) {
2661 match self.pattern.unshift() {
2662 Some(PatternItem::Parts) => { visit_node_list(self, &node.parts) }
2663
2664 // skip begin_l
2665
2666 // skip end_l
2667
2668 // skip expression_l
2669
2670
2671
2672 None => {
2673 // end of the search chain, match
2674 self.result = Some(Node::Xstr(node.clone()));
2675 }
2676 Some(_) => {
2677 // end of the search chain, no match
2678 }
2679 }
2680 }
2681
2682 fn on_yield(&mut self, node: &Yield) {
2683 match self.pattern.unshift() {
2684 Some(PatternItem::Args) => { visit_node_list(self, &node.args) }
2685
2686 // skip keyword_l
2687
2688 // skip begin_l
2689
2690 // skip end_l
2691
2692 // skip expression_l
2693
2694
2695
2696 None => {
2697 // end of the search chain, match
2698 self.result = Some(Node::Yield(node.clone()));
2699 }
2700 Some(_) => {
2701 // end of the search chain, no match
2702 }
2703 }
2704 }
2705
2706 fn on_z_super(&mut self, node: &ZSuper) {
2707 match self.pattern.unshift() {
2708 // skip expression_l
2709
2710
2711
2712 None => {
2713 // end of the search chain, match
2714 self.result = Some(Node::ZSuper(node.clone()));
2715 }
2716 Some(_) => {
2717 // end of the search chain, no match
2718 }
2719 }
2720 }
2721
2722
2723 fn visit(&mut self, node: &Node) {
2724 match node {
2725
2726 Node::Alias(inner) => {
2727 self.on_alias(inner);
2728 }
2729
2730 Node::And(inner) => {
2731 self.on_and(inner);
2732 }
2733
2734 Node::AndAsgn(inner) => {
2735 self.on_and_asgn(inner);
2736 }
2737
2738 Node::Arg(inner) => {
2739 self.on_arg(inner);
2740 }
2741
2742 Node::Args(inner) => {
2743 self.on_args(inner);
2744 }
2745
2746 Node::Array(inner) => {
2747 self.on_array(inner);
2748 }
2749
2750 Node::ArrayPattern(inner) => {
2751 self.on_array_pattern(inner);
2752 }
2753
2754 Node::ArrayPatternWithTail(inner) => {
2755 self.on_array_pattern_with_tail(inner);
2756 }
2757
2758 Node::BackRef(inner) => {
2759 self.on_back_ref(inner);
2760 }
2761
2762 Node::Begin(inner) => {
2763 self.on_begin(inner);
2764 }
2765
2766 Node::Block(inner) => {
2767 self.on_block(inner);
2768 }
2769
2770 Node::Blockarg(inner) => {
2771 self.on_blockarg(inner);
2772 }
2773
2774 Node::BlockPass(inner) => {
2775 self.on_block_pass(inner);
2776 }
2777
2778 Node::Break(inner) => {
2779 self.on_break(inner);
2780 }
2781
2782 Node::Case(inner) => {
2783 self.on_case(inner);
2784 }
2785
2786 Node::CaseMatch(inner) => {
2787 self.on_case_match(inner);
2788 }
2789
2790 Node::Casgn(inner) => {
2791 self.on_casgn(inner);
2792 }
2793
2794 Node::Cbase(inner) => {
2795 self.on_cbase(inner);
2796 }
2797
2798 Node::Class(inner) => {
2799 self.on_class(inner);
2800 }
2801
2802 Node::Complex(inner) => {
2803 self.on_complex(inner);
2804 }
2805
2806 Node::Const(inner) => {
2807 self.on_const(inner);
2808 }
2809
2810 Node::ConstPattern(inner) => {
2811 self.on_const_pattern(inner);
2812 }
2813
2814 Node::CSend(inner) => {
2815 self.on_c_send(inner);
2816 }
2817
2818 Node::Cvar(inner) => {
2819 self.on_cvar(inner);
2820 }
2821
2822 Node::Cvasgn(inner) => {
2823 self.on_cvasgn(inner);
2824 }
2825
2826 Node::Def(inner) => {
2827 self.on_def(inner);
2828 }
2829
2830 Node::Defined(inner) => {
2831 self.on_defined(inner);
2832 }
2833
2834 Node::Defs(inner) => {
2835 self.on_defs(inner);
2836 }
2837
2838 Node::Dstr(inner) => {
2839 self.on_dstr(inner);
2840 }
2841
2842 Node::Dsym(inner) => {
2843 self.on_dsym(inner);
2844 }
2845
2846 Node::EFlipFlop(inner) => {
2847 self.on_e_flip_flop(inner);
2848 }
2849
2850 Node::EmptyElse(inner) => {
2851 self.on_empty_else(inner);
2852 }
2853
2854 Node::Encoding(inner) => {
2855 self.on_encoding(inner);
2856 }
2857
2858 Node::Ensure(inner) => {
2859 self.on_ensure(inner);
2860 }
2861
2862 Node::Erange(inner) => {
2863 self.on_erange(inner);
2864 }
2865
2866 Node::False(inner) => {
2867 self.on_false(inner);
2868 }
2869
2870 Node::File(inner) => {
2871 self.on_file(inner);
2872 }
2873
2874 Node::FindPattern(inner) => {
2875 self.on_find_pattern(inner);
2876 }
2877
2878 Node::Float(inner) => {
2879 self.on_float(inner);
2880 }
2881
2882 Node::For(inner) => {
2883 self.on_for(inner);
2884 }
2885
2886 Node::ForwardArg(inner) => {
2887 self.on_forward_arg(inner);
2888 }
2889
2890 Node::ForwardedArgs(inner) => {
2891 self.on_forwarded_args(inner);
2892 }
2893
2894 Node::Gvar(inner) => {
2895 self.on_gvar(inner);
2896 }
2897
2898 Node::Gvasgn(inner) => {
2899 self.on_gvasgn(inner);
2900 }
2901
2902 Node::Hash(inner) => {
2903 self.on_hash(inner);
2904 }
2905
2906 Node::HashPattern(inner) => {
2907 self.on_hash_pattern(inner);
2908 }
2909
2910 Node::Heredoc(inner) => {
2911 self.on_heredoc(inner);
2912 }
2913
2914 Node::If(inner) => {
2915 self.on_if(inner);
2916 }
2917
2918 Node::IfGuard(inner) => {
2919 self.on_if_guard(inner);
2920 }
2921
2922 Node::IFlipFlop(inner) => {
2923 self.on_i_flip_flop(inner);
2924 }
2925
2926 Node::IfMod(inner) => {
2927 self.on_if_mod(inner);
2928 }
2929
2930 Node::IfTernary(inner) => {
2931 self.on_if_ternary(inner);
2932 }
2933
2934 Node::Index(inner) => {
2935 self.on_index(inner);
2936 }
2937
2938 Node::IndexAsgn(inner) => {
2939 self.on_index_asgn(inner);
2940 }
2941
2942 Node::InPattern(inner) => {
2943 self.on_in_pattern(inner);
2944 }
2945
2946 Node::Int(inner) => {
2947 self.on_int(inner);
2948 }
2949
2950 Node::Irange(inner) => {
2951 self.on_irange(inner);
2952 }
2953
2954 Node::Ivar(inner) => {
2955 self.on_ivar(inner);
2956 }
2957
2958 Node::Ivasgn(inner) => {
2959 self.on_ivasgn(inner);
2960 }
2961
2962 Node::Kwarg(inner) => {
2963 self.on_kwarg(inner);
2964 }
2965
2966 Node::Kwargs(inner) => {
2967 self.on_kwargs(inner);
2968 }
2969
2970 Node::KwBegin(inner) => {
2971 self.on_kw_begin(inner);
2972 }
2973
2974 Node::Kwnilarg(inner) => {
2975 self.on_kwnilarg(inner);
2976 }
2977
2978 Node::Kwoptarg(inner) => {
2979 self.on_kwoptarg(inner);
2980 }
2981
2982 Node::Kwrestarg(inner) => {
2983 self.on_kwrestarg(inner);
2984 }
2985
2986 Node::Kwsplat(inner) => {
2987 self.on_kwsplat(inner);
2988 }
2989
2990 Node::Lambda(inner) => {
2991 self.on_lambda(inner);
2992 }
2993
2994 Node::Line(inner) => {
2995 self.on_line(inner);
2996 }
2997
2998 Node::Lvar(inner) => {
2999 self.on_lvar(inner);
3000 }
3001
3002 Node::Lvasgn(inner) => {
3003 self.on_lvasgn(inner);
3004 }
3005
3006 Node::Masgn(inner) => {
3007 self.on_masgn(inner);
3008 }
3009
3010 Node::MatchAlt(inner) => {
3011 self.on_match_alt(inner);
3012 }
3013
3014 Node::MatchAs(inner) => {
3015 self.on_match_as(inner);
3016 }
3017
3018 Node::MatchCurrentLine(inner) => {
3019 self.on_match_current_line(inner);
3020 }
3021
3022 Node::MatchNilPattern(inner) => {
3023 self.on_match_nil_pattern(inner);
3024 }
3025
3026 Node::MatchPattern(inner) => {
3027 self.on_match_pattern(inner);
3028 }
3029
3030 Node::MatchPatternP(inner) => {
3031 self.on_match_pattern_p(inner);
3032 }
3033
3034 Node::MatchRest(inner) => {
3035 self.on_match_rest(inner);
3036 }
3037
3038 Node::MatchVar(inner) => {
3039 self.on_match_var(inner);
3040 }
3041
3042 Node::MatchWithLvasgn(inner) => {
3043 self.on_match_with_lvasgn(inner);
3044 }
3045
3046 Node::Mlhs(inner) => {
3047 self.on_mlhs(inner);
3048 }
3049
3050 Node::Module(inner) => {
3051 self.on_module(inner);
3052 }
3053
3054 Node::Next(inner) => {
3055 self.on_next(inner);
3056 }
3057
3058 Node::Nil(inner) => {
3059 self.on_nil(inner);
3060 }
3061
3062 Node::NthRef(inner) => {
3063 self.on_nth_ref(inner);
3064 }
3065
3066 Node::Numblock(inner) => {
3067 self.on_numblock(inner);
3068 }
3069
3070 Node::OpAsgn(inner) => {
3071 self.on_op_asgn(inner);
3072 }
3073
3074 Node::Optarg(inner) => {
3075 self.on_optarg(inner);
3076 }
3077
3078 Node::Or(inner) => {
3079 self.on_or(inner);
3080 }
3081
3082 Node::OrAsgn(inner) => {
3083 self.on_or_asgn(inner);
3084 }
3085
3086 Node::Pair(inner) => {
3087 self.on_pair(inner);
3088 }
3089
3090 Node::Pin(inner) => {
3091 self.on_pin(inner);
3092 }
3093
3094 Node::Postexe(inner) => {
3095 self.on_postexe(inner);
3096 }
3097
3098 Node::Preexe(inner) => {
3099 self.on_preexe(inner);
3100 }
3101
3102 Node::Procarg0(inner) => {
3103 self.on_procarg0(inner);
3104 }
3105
3106 Node::Rational(inner) => {
3107 self.on_rational(inner);
3108 }
3109
3110 Node::Redo(inner) => {
3111 self.on_redo(inner);
3112 }
3113
3114 Node::Regexp(inner) => {
3115 self.on_regexp(inner);
3116 }
3117
3118 Node::RegOpt(inner) => {
3119 self.on_reg_opt(inner);
3120 }
3121
3122 Node::Rescue(inner) => {
3123 self.on_rescue(inner);
3124 }
3125
3126 Node::RescueBody(inner) => {
3127 self.on_rescue_body(inner);
3128 }
3129
3130 Node::Restarg(inner) => {
3131 self.on_restarg(inner);
3132 }
3133
3134 Node::Retry(inner) => {
3135 self.on_retry(inner);
3136 }
3137
3138 Node::Return(inner) => {
3139 self.on_return(inner);
3140 }
3141
3142 Node::SClass(inner) => {
3143 self.on_s_class(inner);
3144 }
3145
3146 Node::Self_(inner) => {
3147 self.on_self_(inner);
3148 }
3149
3150 Node::Send(inner) => {
3151 self.on_send(inner);
3152 }
3153
3154 Node::Shadowarg(inner) => {
3155 self.on_shadowarg(inner);
3156 }
3157
3158 Node::Splat(inner) => {
3159 self.on_splat(inner);
3160 }
3161
3162 Node::Str(inner) => {
3163 self.on_str(inner);
3164 }
3165
3166 Node::Super(inner) => {
3167 self.on_super(inner);
3168 }
3169
3170 Node::Sym(inner) => {
3171 self.on_sym(inner);
3172 }
3173
3174 Node::True(inner) => {
3175 self.on_true(inner);
3176 }
3177
3178 Node::Undef(inner) => {
3179 self.on_undef(inner);
3180 }
3181
3182 Node::UnlessGuard(inner) => {
3183 self.on_unless_guard(inner);
3184 }
3185
3186 Node::Until(inner) => {
3187 self.on_until(inner);
3188 }
3189
3190 Node::UntilPost(inner) => {
3191 self.on_until_post(inner);
3192 }
3193
3194 Node::When(inner) => {
3195 self.on_when(inner);
3196 }
3197
3198 Node::While(inner) => {
3199 self.on_while(inner);
3200 }
3201
3202 Node::WhilePost(inner) => {
3203 self.on_while_post(inner);
3204 }
3205
3206 Node::XHeredoc(inner) => {
3207 self.on_x_heredoc(inner);
3208 }
3209
3210 Node::Xstr(inner) => {
3211 self.on_xstr(inner);
3212 }
3213
3214 Node::Yield(inner) => {
3215 self.on_yield(inner);
3216 }
3217
3218 Node::ZSuper(inner) => {
3219 self.on_z_super(inner);
3220 }
3221
3222 }
3223 }
3224}
3225
3226fn visit_node_list(finder: &mut Finder, nodes: &[Node]) {
3227 if let Some(PatternItem::Idx(idx)) = finder.pattern.unshift() {
3228 if let Some(item) = nodes.get(idx) {
3229 finder.visit(item)
3230 }
3231 } else {
3232 // end of the search chain, no match
3233 }
3234}