1#![expect(unused_variables, clippy::match_same_arms, clippy::semicolon_if_nothing_returned)]
11#![allow(clippy::needless_pass_by_ref_mut, clippy::trivially_copy_pass_by_ref)]
12
13use std::cell::Cell;
14
15use oxc_allocator::Vec;
16use oxc_syntax::scope::{ScopeFlags, ScopeId};
17
18use oxc_ast::ast::*;
19use oxc_ast::ast_kind::AstKind;
20
21use walk::*;
22
23pub trait Visit<'a>: Sized {
25 #[inline]
26 fn enter_node(&mut self, kind: AstKind<'a>) {}
27 #[inline]
28 fn leave_node(&mut self, kind: AstKind<'a>) {}
29
30 #[inline]
31 fn enter_scope(&mut self, flags: ScopeFlags, scope_id: &Cell<Option<ScopeId>>) {}
32 #[inline]
33 fn leave_scope(&mut self) {}
34
35 #[inline]
36 fn alloc<T>(&self, t: &T) -> &'a T {
37 unsafe { std::mem::transmute(t) }
41 }
42
43 #[inline]
44 fn visit_program(&mut self, it: &Program<'a>) {
45 walk_program(self, it);
46 }
47
48 #[inline]
49 fn visit_expression(&mut self, it: &Expression<'a>) {
50 walk_expression(self, it);
51 }
52
53 #[inline]
54 fn visit_identifier_name(&mut self, it: &IdentifierName<'a>) {
55 walk_identifier_name(self, it);
56 }
57
58 #[inline]
59 fn visit_identifier_reference(&mut self, it: &IdentifierReference<'a>) {
60 walk_identifier_reference(self, it);
61 }
62
63 #[inline]
64 fn visit_binding_identifier(&mut self, it: &BindingIdentifier<'a>) {
65 walk_binding_identifier(self, it);
66 }
67
68 #[inline]
69 fn visit_label_identifier(&mut self, it: &LabelIdentifier<'a>) {
70 walk_label_identifier(self, it);
71 }
72
73 #[inline]
74 fn visit_this_expression(&mut self, it: &ThisExpression) {
75 walk_this_expression(self, it);
76 }
77
78 #[inline]
79 fn visit_array_expression(&mut self, it: &ArrayExpression<'a>) {
80 walk_array_expression(self, it);
81 }
82
83 #[inline]
84 fn visit_array_expression_element(&mut self, it: &ArrayExpressionElement<'a>) {
85 walk_array_expression_element(self, it);
86 }
87
88 #[inline]
89 fn visit_elision(&mut self, it: &Elision) {
90 walk_elision(self, it);
91 }
92
93 #[inline]
94 fn visit_object_expression(&mut self, it: &ObjectExpression<'a>) {
95 walk_object_expression(self, it);
96 }
97
98 #[inline]
99 fn visit_object_property_kind(&mut self, it: &ObjectPropertyKind<'a>) {
100 walk_object_property_kind(self, it);
101 }
102
103 #[inline]
104 fn visit_object_property(&mut self, it: &ObjectProperty<'a>) {
105 walk_object_property(self, it);
106 }
107
108 #[inline]
109 fn visit_property_key(&mut self, it: &PropertyKey<'a>) {
110 walk_property_key(self, it);
111 }
112
113 #[inline]
114 fn visit_template_literal(&mut self, it: &TemplateLiteral<'a>) {
115 walk_template_literal(self, it);
116 }
117
118 #[inline]
119 fn visit_tagged_template_expression(&mut self, it: &TaggedTemplateExpression<'a>) {
120 walk_tagged_template_expression(self, it);
121 }
122
123 #[inline]
124 fn visit_template_element(&mut self, it: &TemplateElement<'a>) {
125 walk_template_element(self, it);
126 }
127
128 #[inline]
129 fn visit_member_expression(&mut self, it: &MemberExpression<'a>) {
130 walk_member_expression(self, it);
131 }
132
133 #[inline]
134 fn visit_computed_member_expression(&mut self, it: &ComputedMemberExpression<'a>) {
135 walk_computed_member_expression(self, it);
136 }
137
138 #[inline]
139 fn visit_static_member_expression(&mut self, it: &StaticMemberExpression<'a>) {
140 walk_static_member_expression(self, it);
141 }
142
143 #[inline]
144 fn visit_private_field_expression(&mut self, it: &PrivateFieldExpression<'a>) {
145 walk_private_field_expression(self, it);
146 }
147
148 #[inline]
149 fn visit_call_expression(&mut self, it: &CallExpression<'a>) {
150 walk_call_expression(self, it);
151 }
152
153 #[inline]
154 fn visit_new_expression(&mut self, it: &NewExpression<'a>) {
155 walk_new_expression(self, it);
156 }
157
158 #[inline]
159 fn visit_meta_property(&mut self, it: &MetaProperty<'a>) {
160 walk_meta_property(self, it);
161 }
162
163 #[inline]
164 fn visit_spread_element(&mut self, it: &SpreadElement<'a>) {
165 walk_spread_element(self, it);
166 }
167
168 #[inline]
169 fn visit_argument(&mut self, it: &Argument<'a>) {
170 walk_argument(self, it);
171 }
172
173 #[inline]
174 fn visit_update_expression(&mut self, it: &UpdateExpression<'a>) {
175 walk_update_expression(self, it);
176 }
177
178 #[inline]
179 fn visit_unary_expression(&mut self, it: &UnaryExpression<'a>) {
180 walk_unary_expression(self, it);
181 }
182
183 #[inline]
184 fn visit_binary_expression(&mut self, it: &BinaryExpression<'a>) {
185 walk_binary_expression(self, it);
186 }
187
188 #[inline]
189 fn visit_private_in_expression(&mut self, it: &PrivateInExpression<'a>) {
190 walk_private_in_expression(self, it);
191 }
192
193 #[inline]
194 fn visit_logical_expression(&mut self, it: &LogicalExpression<'a>) {
195 walk_logical_expression(self, it);
196 }
197
198 #[inline]
199 fn visit_conditional_expression(&mut self, it: &ConditionalExpression<'a>) {
200 walk_conditional_expression(self, it);
201 }
202
203 #[inline]
204 fn visit_assignment_expression(&mut self, it: &AssignmentExpression<'a>) {
205 walk_assignment_expression(self, it);
206 }
207
208 #[inline]
209 fn visit_assignment_target(&mut self, it: &AssignmentTarget<'a>) {
210 walk_assignment_target(self, it);
211 }
212
213 #[inline]
214 fn visit_simple_assignment_target(&mut self, it: &SimpleAssignmentTarget<'a>) {
215 walk_simple_assignment_target(self, it);
216 }
217
218 #[inline]
219 fn visit_assignment_target_pattern(&mut self, it: &AssignmentTargetPattern<'a>) {
220 walk_assignment_target_pattern(self, it);
221 }
222
223 #[inline]
224 fn visit_array_assignment_target(&mut self, it: &ArrayAssignmentTarget<'a>) {
225 walk_array_assignment_target(self, it);
226 }
227
228 #[inline]
229 fn visit_object_assignment_target(&mut self, it: &ObjectAssignmentTarget<'a>) {
230 walk_object_assignment_target(self, it);
231 }
232
233 #[inline]
234 fn visit_assignment_target_rest(&mut self, it: &AssignmentTargetRest<'a>) {
235 walk_assignment_target_rest(self, it);
236 }
237
238 #[inline]
239 fn visit_assignment_target_maybe_default(&mut self, it: &AssignmentTargetMaybeDefault<'a>) {
240 walk_assignment_target_maybe_default(self, it);
241 }
242
243 #[inline]
244 fn visit_assignment_target_with_default(&mut self, it: &AssignmentTargetWithDefault<'a>) {
245 walk_assignment_target_with_default(self, it);
246 }
247
248 #[inline]
249 fn visit_assignment_target_property(&mut self, it: &AssignmentTargetProperty<'a>) {
250 walk_assignment_target_property(self, it);
251 }
252
253 #[inline]
254 fn visit_assignment_target_property_identifier(
255 &mut self,
256 it: &AssignmentTargetPropertyIdentifier<'a>,
257 ) {
258 walk_assignment_target_property_identifier(self, it);
259 }
260
261 #[inline]
262 fn visit_assignment_target_property_property(
263 &mut self,
264 it: &AssignmentTargetPropertyProperty<'a>,
265 ) {
266 walk_assignment_target_property_property(self, it);
267 }
268
269 #[inline]
270 fn visit_sequence_expression(&mut self, it: &SequenceExpression<'a>) {
271 walk_sequence_expression(self, it);
272 }
273
274 #[inline]
275 fn visit_super(&mut self, it: &Super) {
276 walk_super(self, it);
277 }
278
279 #[inline]
280 fn visit_await_expression(&mut self, it: &AwaitExpression<'a>) {
281 walk_await_expression(self, it);
282 }
283
284 #[inline]
285 fn visit_chain_expression(&mut self, it: &ChainExpression<'a>) {
286 walk_chain_expression(self, it);
287 }
288
289 #[inline]
290 fn visit_chain_element(&mut self, it: &ChainElement<'a>) {
291 walk_chain_element(self, it);
292 }
293
294 #[inline]
295 fn visit_parenthesized_expression(&mut self, it: &ParenthesizedExpression<'a>) {
296 walk_parenthesized_expression(self, it);
297 }
298
299 #[inline]
300 fn visit_statement(&mut self, it: &Statement<'a>) {
301 walk_statement(self, it);
302 }
303
304 #[inline]
305 fn visit_directive(&mut self, it: &Directive<'a>) {
306 walk_directive(self, it);
307 }
308
309 #[inline]
310 fn visit_hashbang(&mut self, it: &Hashbang<'a>) {
311 walk_hashbang(self, it);
312 }
313
314 #[inline]
315 fn visit_block_statement(&mut self, it: &BlockStatement<'a>) {
316 walk_block_statement(self, it);
317 }
318
319 #[inline]
320 fn visit_declaration(&mut self, it: &Declaration<'a>) {
321 walk_declaration(self, it);
322 }
323
324 #[inline]
325 fn visit_variable_declaration(&mut self, it: &VariableDeclaration<'a>) {
326 walk_variable_declaration(self, it);
327 }
328
329 #[inline]
330 fn visit_variable_declarator(&mut self, it: &VariableDeclarator<'a>) {
331 walk_variable_declarator(self, it);
332 }
333
334 #[inline]
335 fn visit_empty_statement(&mut self, it: &EmptyStatement) {
336 walk_empty_statement(self, it);
337 }
338
339 #[inline]
340 fn visit_expression_statement(&mut self, it: &ExpressionStatement<'a>) {
341 walk_expression_statement(self, it);
342 }
343
344 #[inline]
345 fn visit_if_statement(&mut self, it: &IfStatement<'a>) {
346 walk_if_statement(self, it);
347 }
348
349 #[inline]
350 fn visit_do_while_statement(&mut self, it: &DoWhileStatement<'a>) {
351 walk_do_while_statement(self, it);
352 }
353
354 #[inline]
355 fn visit_while_statement(&mut self, it: &WhileStatement<'a>) {
356 walk_while_statement(self, it);
357 }
358
359 #[inline]
360 fn visit_for_statement(&mut self, it: &ForStatement<'a>) {
361 walk_for_statement(self, it);
362 }
363
364 #[inline]
365 fn visit_for_statement_init(&mut self, it: &ForStatementInit<'a>) {
366 walk_for_statement_init(self, it);
367 }
368
369 #[inline]
370 fn visit_for_in_statement(&mut self, it: &ForInStatement<'a>) {
371 walk_for_in_statement(self, it);
372 }
373
374 #[inline]
375 fn visit_for_statement_left(&mut self, it: &ForStatementLeft<'a>) {
376 walk_for_statement_left(self, it);
377 }
378
379 #[inline]
380 fn visit_for_of_statement(&mut self, it: &ForOfStatement<'a>) {
381 walk_for_of_statement(self, it);
382 }
383
384 #[inline]
385 fn visit_continue_statement(&mut self, it: &ContinueStatement<'a>) {
386 walk_continue_statement(self, it);
387 }
388
389 #[inline]
390 fn visit_break_statement(&mut self, it: &BreakStatement<'a>) {
391 walk_break_statement(self, it);
392 }
393
394 #[inline]
395 fn visit_return_statement(&mut self, it: &ReturnStatement<'a>) {
396 walk_return_statement(self, it);
397 }
398
399 #[inline]
400 fn visit_with_statement(&mut self, it: &WithStatement<'a>) {
401 walk_with_statement(self, it);
402 }
403
404 #[inline]
405 fn visit_switch_statement(&mut self, it: &SwitchStatement<'a>) {
406 walk_switch_statement(self, it);
407 }
408
409 #[inline]
410 fn visit_switch_case(&mut self, it: &SwitchCase<'a>) {
411 walk_switch_case(self, it);
412 }
413
414 #[inline]
415 fn visit_labeled_statement(&mut self, it: &LabeledStatement<'a>) {
416 walk_labeled_statement(self, it);
417 }
418
419 #[inline]
420 fn visit_throw_statement(&mut self, it: &ThrowStatement<'a>) {
421 walk_throw_statement(self, it);
422 }
423
424 #[inline]
425 fn visit_try_statement(&mut self, it: &TryStatement<'a>) {
426 walk_try_statement(self, it);
427 }
428
429 #[inline]
430 fn visit_catch_clause(&mut self, it: &CatchClause<'a>) {
431 walk_catch_clause(self, it);
432 }
433
434 #[inline]
435 fn visit_catch_parameter(&mut self, it: &CatchParameter<'a>) {
436 walk_catch_parameter(self, it);
437 }
438
439 #[inline]
440 fn visit_debugger_statement(&mut self, it: &DebuggerStatement) {
441 walk_debugger_statement(self, it);
442 }
443
444 #[inline]
445 fn visit_binding_pattern(&mut self, it: &BindingPattern<'a>) {
446 walk_binding_pattern(self, it);
447 }
448
449 #[inline]
450 fn visit_binding_pattern_kind(&mut self, it: &BindingPatternKind<'a>) {
451 walk_binding_pattern_kind(self, it);
452 }
453
454 #[inline]
455 fn visit_assignment_pattern(&mut self, it: &AssignmentPattern<'a>) {
456 walk_assignment_pattern(self, it);
457 }
458
459 #[inline]
460 fn visit_object_pattern(&mut self, it: &ObjectPattern<'a>) {
461 walk_object_pattern(self, it);
462 }
463
464 #[inline]
465 fn visit_binding_property(&mut self, it: &BindingProperty<'a>) {
466 walk_binding_property(self, it);
467 }
468
469 #[inline]
470 fn visit_array_pattern(&mut self, it: &ArrayPattern<'a>) {
471 walk_array_pattern(self, it);
472 }
473
474 #[inline]
475 fn visit_binding_rest_element(&mut self, it: &BindingRestElement<'a>) {
476 walk_binding_rest_element(self, it);
477 }
478
479 #[inline]
480 fn visit_function(&mut self, it: &Function<'a>, flags: ScopeFlags) {
481 walk_function(self, it, flags);
482 }
483
484 #[inline]
485 fn visit_formal_parameters(&mut self, it: &FormalParameters<'a>) {
486 walk_formal_parameters(self, it);
487 }
488
489 #[inline]
490 fn visit_formal_parameter(&mut self, it: &FormalParameter<'a>) {
491 walk_formal_parameter(self, it);
492 }
493
494 #[inline]
495 fn visit_function_body(&mut self, it: &FunctionBody<'a>) {
496 walk_function_body(self, it);
497 }
498
499 #[inline]
500 fn visit_arrow_function_expression(&mut self, it: &ArrowFunctionExpression<'a>) {
501 walk_arrow_function_expression(self, it);
502 }
503
504 #[inline]
505 fn visit_yield_expression(&mut self, it: &YieldExpression<'a>) {
506 walk_yield_expression(self, it);
507 }
508
509 #[inline]
510 fn visit_class(&mut self, it: &Class<'a>) {
511 walk_class(self, it);
512 }
513
514 #[inline]
515 fn visit_class_body(&mut self, it: &ClassBody<'a>) {
516 walk_class_body(self, it);
517 }
518
519 #[inline]
520 fn visit_class_element(&mut self, it: &ClassElement<'a>) {
521 walk_class_element(self, it);
522 }
523
524 #[inline]
525 fn visit_method_definition(&mut self, it: &MethodDefinition<'a>) {
526 walk_method_definition(self, it);
527 }
528
529 #[inline]
530 fn visit_property_definition(&mut self, it: &PropertyDefinition<'a>) {
531 walk_property_definition(self, it);
532 }
533
534 #[inline]
535 fn visit_private_identifier(&mut self, it: &PrivateIdentifier<'a>) {
536 walk_private_identifier(self, it);
537 }
538
539 #[inline]
540 fn visit_static_block(&mut self, it: &StaticBlock<'a>) {
541 walk_static_block(self, it);
542 }
543
544 #[inline]
545 fn visit_module_declaration(&mut self, it: &ModuleDeclaration<'a>) {
546 walk_module_declaration(self, it);
547 }
548
549 #[inline]
550 fn visit_accessor_property(&mut self, it: &AccessorProperty<'a>) {
551 walk_accessor_property(self, it);
552 }
553
554 #[inline]
555 fn visit_import_expression(&mut self, it: &ImportExpression<'a>) {
556 walk_import_expression(self, it);
557 }
558
559 #[inline]
560 fn visit_import_declaration(&mut self, it: &ImportDeclaration<'a>) {
561 walk_import_declaration(self, it);
562 }
563
564 #[inline]
565 fn visit_import_declaration_specifier(&mut self, it: &ImportDeclarationSpecifier<'a>) {
566 walk_import_declaration_specifier(self, it);
567 }
568
569 #[inline]
570 fn visit_import_specifier(&mut self, it: &ImportSpecifier<'a>) {
571 walk_import_specifier(self, it);
572 }
573
574 #[inline]
575 fn visit_import_default_specifier(&mut self, it: &ImportDefaultSpecifier<'a>) {
576 walk_import_default_specifier(self, it);
577 }
578
579 #[inline]
580 fn visit_import_namespace_specifier(&mut self, it: &ImportNamespaceSpecifier<'a>) {
581 walk_import_namespace_specifier(self, it);
582 }
583
584 #[inline]
585 fn visit_with_clause(&mut self, it: &WithClause<'a>) {
586 walk_with_clause(self, it);
587 }
588
589 #[inline]
590 fn visit_import_attribute(&mut self, it: &ImportAttribute<'a>) {
591 walk_import_attribute(self, it);
592 }
593
594 #[inline]
595 fn visit_import_attribute_key(&mut self, it: &ImportAttributeKey<'a>) {
596 walk_import_attribute_key(self, it);
597 }
598
599 #[inline]
600 fn visit_export_named_declaration(&mut self, it: &ExportNamedDeclaration<'a>) {
601 walk_export_named_declaration(self, it);
602 }
603
604 #[inline]
605 fn visit_export_default_declaration(&mut self, it: &ExportDefaultDeclaration<'a>) {
606 walk_export_default_declaration(self, it);
607 }
608
609 #[inline]
610 fn visit_export_all_declaration(&mut self, it: &ExportAllDeclaration<'a>) {
611 walk_export_all_declaration(self, it);
612 }
613
614 #[inline]
615 fn visit_export_specifier(&mut self, it: &ExportSpecifier<'a>) {
616 walk_export_specifier(self, it);
617 }
618
619 #[inline]
620 fn visit_export_default_declaration_kind(&mut self, it: &ExportDefaultDeclarationKind<'a>) {
621 walk_export_default_declaration_kind(self, it);
622 }
623
624 #[inline]
625 fn visit_module_export_name(&mut self, it: &ModuleExportName<'a>) {
626 walk_module_export_name(self, it);
627 }
628
629 #[inline]
630 fn visit_v_8_intrinsic_expression(&mut self, it: &V8IntrinsicExpression<'a>) {
631 walk_v_8_intrinsic_expression(self, it);
632 }
633
634 #[inline]
635 fn visit_boolean_literal(&mut self, it: &BooleanLiteral) {
636 walk_boolean_literal(self, it);
637 }
638
639 #[inline]
640 fn visit_null_literal(&mut self, it: &NullLiteral) {
641 walk_null_literal(self, it);
642 }
643
644 #[inline]
645 fn visit_numeric_literal(&mut self, it: &NumericLiteral<'a>) {
646 walk_numeric_literal(self, it);
647 }
648
649 #[inline]
650 fn visit_string_literal(&mut self, it: &StringLiteral<'a>) {
651 walk_string_literal(self, it);
652 }
653
654 #[inline]
655 fn visit_big_int_literal(&mut self, it: &BigIntLiteral<'a>) {
656 walk_big_int_literal(self, it);
657 }
658
659 #[inline]
660 fn visit_reg_exp_literal(&mut self, it: &RegExpLiteral<'a>) {
661 walk_reg_exp_literal(self, it);
662 }
663
664 #[inline]
665 fn visit_jsx_element(&mut self, it: &JSXElement<'a>) {
666 walk_jsx_element(self, it);
667 }
668
669 #[inline]
670 fn visit_jsx_opening_element(&mut self, it: &JSXOpeningElement<'a>) {
671 walk_jsx_opening_element(self, it);
672 }
673
674 #[inline]
675 fn visit_jsx_closing_element(&mut self, it: &JSXClosingElement<'a>) {
676 walk_jsx_closing_element(self, it);
677 }
678
679 #[inline]
680 fn visit_jsx_fragment(&mut self, it: &JSXFragment<'a>) {
681 walk_jsx_fragment(self, it);
682 }
683
684 #[inline]
685 fn visit_jsx_opening_fragment(&mut self, it: &JSXOpeningFragment) {
686 walk_jsx_opening_fragment(self, it);
687 }
688
689 #[inline]
690 fn visit_jsx_closing_fragment(&mut self, it: &JSXClosingFragment) {
691 walk_jsx_closing_fragment(self, it);
692 }
693
694 #[inline]
695 fn visit_jsx_element_name(&mut self, it: &JSXElementName<'a>) {
696 walk_jsx_element_name(self, it);
697 }
698
699 #[inline]
700 fn visit_jsx_namespaced_name(&mut self, it: &JSXNamespacedName<'a>) {
701 walk_jsx_namespaced_name(self, it);
702 }
703
704 #[inline]
705 fn visit_jsx_member_expression(&mut self, it: &JSXMemberExpression<'a>) {
706 walk_jsx_member_expression(self, it);
707 }
708
709 #[inline]
710 fn visit_jsx_member_expression_object(&mut self, it: &JSXMemberExpressionObject<'a>) {
711 walk_jsx_member_expression_object(self, it);
712 }
713
714 #[inline]
715 fn visit_jsx_expression_container(&mut self, it: &JSXExpressionContainer<'a>) {
716 walk_jsx_expression_container(self, it);
717 }
718
719 #[inline]
720 fn visit_jsx_expression(&mut self, it: &JSXExpression<'a>) {
721 walk_jsx_expression(self, it);
722 }
723
724 #[inline]
725 fn visit_jsx_empty_expression(&mut self, it: &JSXEmptyExpression) {
726 walk_jsx_empty_expression(self, it);
727 }
728
729 #[inline]
730 fn visit_jsx_attribute_item(&mut self, it: &JSXAttributeItem<'a>) {
731 walk_jsx_attribute_item(self, it);
732 }
733
734 #[inline]
735 fn visit_jsx_attribute(&mut self, it: &JSXAttribute<'a>) {
736 walk_jsx_attribute(self, it);
737 }
738
739 #[inline]
740 fn visit_jsx_spread_attribute(&mut self, it: &JSXSpreadAttribute<'a>) {
741 walk_jsx_spread_attribute(self, it);
742 }
743
744 #[inline]
745 fn visit_jsx_attribute_name(&mut self, it: &JSXAttributeName<'a>) {
746 walk_jsx_attribute_name(self, it);
747 }
748
749 #[inline]
750 fn visit_jsx_attribute_value(&mut self, it: &JSXAttributeValue<'a>) {
751 walk_jsx_attribute_value(self, it);
752 }
753
754 #[inline]
755 fn visit_jsx_identifier(&mut self, it: &JSXIdentifier<'a>) {
756 walk_jsx_identifier(self, it);
757 }
758
759 #[inline]
760 fn visit_jsx_child(&mut self, it: &JSXChild<'a>) {
761 walk_jsx_child(self, it);
762 }
763
764 #[inline]
765 fn visit_jsx_spread_child(&mut self, it: &JSXSpreadChild<'a>) {
766 walk_jsx_spread_child(self, it);
767 }
768
769 #[inline]
770 fn visit_jsx_text(&mut self, it: &JSXText<'a>) {
771 walk_jsx_text(self, it);
772 }
773
774 #[inline]
775 fn visit_ts_this_parameter(&mut self, it: &TSThisParameter<'a>) {
776 walk_ts_this_parameter(self, it);
777 }
778
779 #[inline]
780 fn visit_ts_enum_declaration(&mut self, it: &TSEnumDeclaration<'a>) {
781 walk_ts_enum_declaration(self, it);
782 }
783
784 #[inline]
785 fn visit_ts_enum_body(&mut self, it: &TSEnumBody<'a>) {
786 walk_ts_enum_body(self, it);
787 }
788
789 #[inline]
790 fn visit_ts_enum_member(&mut self, it: &TSEnumMember<'a>) {
791 walk_ts_enum_member(self, it);
792 }
793
794 #[inline]
795 fn visit_ts_enum_member_name(&mut self, it: &TSEnumMemberName<'a>) {
796 walk_ts_enum_member_name(self, it);
797 }
798
799 #[inline]
800 fn visit_ts_type_annotation(&mut self, it: &TSTypeAnnotation<'a>) {
801 walk_ts_type_annotation(self, it);
802 }
803
804 #[inline]
805 fn visit_ts_literal_type(&mut self, it: &TSLiteralType<'a>) {
806 walk_ts_literal_type(self, it);
807 }
808
809 #[inline]
810 fn visit_ts_literal(&mut self, it: &TSLiteral<'a>) {
811 walk_ts_literal(self, it);
812 }
813
814 #[inline]
815 fn visit_ts_type(&mut self, it: &TSType<'a>) {
816 walk_ts_type(self, it);
817 }
818
819 #[inline]
820 fn visit_ts_conditional_type(&mut self, it: &TSConditionalType<'a>) {
821 walk_ts_conditional_type(self, it);
822 }
823
824 #[inline]
825 fn visit_ts_union_type(&mut self, it: &TSUnionType<'a>) {
826 walk_ts_union_type(self, it);
827 }
828
829 #[inline]
830 fn visit_ts_intersection_type(&mut self, it: &TSIntersectionType<'a>) {
831 walk_ts_intersection_type(self, it);
832 }
833
834 #[inline]
835 fn visit_ts_parenthesized_type(&mut self, it: &TSParenthesizedType<'a>) {
836 walk_ts_parenthesized_type(self, it);
837 }
838
839 #[inline]
840 fn visit_ts_type_operator(&mut self, it: &TSTypeOperator<'a>) {
841 walk_ts_type_operator(self, it);
842 }
843
844 #[inline]
845 fn visit_ts_array_type(&mut self, it: &TSArrayType<'a>) {
846 walk_ts_array_type(self, it);
847 }
848
849 #[inline]
850 fn visit_ts_indexed_access_type(&mut self, it: &TSIndexedAccessType<'a>) {
851 walk_ts_indexed_access_type(self, it);
852 }
853
854 #[inline]
855 fn visit_ts_tuple_type(&mut self, it: &TSTupleType<'a>) {
856 walk_ts_tuple_type(self, it);
857 }
858
859 #[inline]
860 fn visit_ts_named_tuple_member(&mut self, it: &TSNamedTupleMember<'a>) {
861 walk_ts_named_tuple_member(self, it);
862 }
863
864 #[inline]
865 fn visit_ts_optional_type(&mut self, it: &TSOptionalType<'a>) {
866 walk_ts_optional_type(self, it);
867 }
868
869 #[inline]
870 fn visit_ts_rest_type(&mut self, it: &TSRestType<'a>) {
871 walk_ts_rest_type(self, it);
872 }
873
874 #[inline]
875 fn visit_ts_tuple_element(&mut self, it: &TSTupleElement<'a>) {
876 walk_ts_tuple_element(self, it);
877 }
878
879 #[inline]
880 fn visit_ts_any_keyword(&mut self, it: &TSAnyKeyword) {
881 walk_ts_any_keyword(self, it);
882 }
883
884 #[inline]
885 fn visit_ts_string_keyword(&mut self, it: &TSStringKeyword) {
886 walk_ts_string_keyword(self, it);
887 }
888
889 #[inline]
890 fn visit_ts_boolean_keyword(&mut self, it: &TSBooleanKeyword) {
891 walk_ts_boolean_keyword(self, it);
892 }
893
894 #[inline]
895 fn visit_ts_number_keyword(&mut self, it: &TSNumberKeyword) {
896 walk_ts_number_keyword(self, it);
897 }
898
899 #[inline]
900 fn visit_ts_never_keyword(&mut self, it: &TSNeverKeyword) {
901 walk_ts_never_keyword(self, it);
902 }
903
904 #[inline]
905 fn visit_ts_intrinsic_keyword(&mut self, it: &TSIntrinsicKeyword) {
906 walk_ts_intrinsic_keyword(self, it);
907 }
908
909 #[inline]
910 fn visit_ts_unknown_keyword(&mut self, it: &TSUnknownKeyword) {
911 walk_ts_unknown_keyword(self, it);
912 }
913
914 #[inline]
915 fn visit_ts_null_keyword(&mut self, it: &TSNullKeyword) {
916 walk_ts_null_keyword(self, it);
917 }
918
919 #[inline]
920 fn visit_ts_undefined_keyword(&mut self, it: &TSUndefinedKeyword) {
921 walk_ts_undefined_keyword(self, it);
922 }
923
924 #[inline]
925 fn visit_ts_void_keyword(&mut self, it: &TSVoidKeyword) {
926 walk_ts_void_keyword(self, it);
927 }
928
929 #[inline]
930 fn visit_ts_symbol_keyword(&mut self, it: &TSSymbolKeyword) {
931 walk_ts_symbol_keyword(self, it);
932 }
933
934 #[inline]
935 fn visit_ts_this_type(&mut self, it: &TSThisType) {
936 walk_ts_this_type(self, it);
937 }
938
939 #[inline]
940 fn visit_ts_object_keyword(&mut self, it: &TSObjectKeyword) {
941 walk_ts_object_keyword(self, it);
942 }
943
944 #[inline]
945 fn visit_ts_big_int_keyword(&mut self, it: &TSBigIntKeyword) {
946 walk_ts_big_int_keyword(self, it);
947 }
948
949 #[inline]
950 fn visit_ts_type_reference(&mut self, it: &TSTypeReference<'a>) {
951 walk_ts_type_reference(self, it);
952 }
953
954 #[inline]
955 fn visit_ts_type_name(&mut self, it: &TSTypeName<'a>) {
956 walk_ts_type_name(self, it);
957 }
958
959 #[inline]
960 fn visit_ts_qualified_name(&mut self, it: &TSQualifiedName<'a>) {
961 walk_ts_qualified_name(self, it);
962 }
963
964 #[inline]
965 fn visit_ts_type_parameter_instantiation(&mut self, it: &TSTypeParameterInstantiation<'a>) {
966 walk_ts_type_parameter_instantiation(self, it);
967 }
968
969 #[inline]
970 fn visit_ts_type_parameter(&mut self, it: &TSTypeParameter<'a>) {
971 walk_ts_type_parameter(self, it);
972 }
973
974 #[inline]
975 fn visit_ts_type_parameter_declaration(&mut self, it: &TSTypeParameterDeclaration<'a>) {
976 walk_ts_type_parameter_declaration(self, it);
977 }
978
979 #[inline]
980 fn visit_ts_type_alias_declaration(&mut self, it: &TSTypeAliasDeclaration<'a>) {
981 walk_ts_type_alias_declaration(self, it);
982 }
983
984 #[inline]
985 fn visit_ts_class_implements(&mut self, it: &TSClassImplements<'a>) {
986 walk_ts_class_implements(self, it);
987 }
988
989 #[inline]
990 fn visit_ts_interface_declaration(&mut self, it: &TSInterfaceDeclaration<'a>) {
991 walk_ts_interface_declaration(self, it);
992 }
993
994 #[inline]
995 fn visit_ts_interface_body(&mut self, it: &TSInterfaceBody<'a>) {
996 walk_ts_interface_body(self, it);
997 }
998
999 #[inline]
1000 fn visit_ts_property_signature(&mut self, it: &TSPropertySignature<'a>) {
1001 walk_ts_property_signature(self, it);
1002 }
1003
1004 #[inline]
1005 fn visit_ts_signature(&mut self, it: &TSSignature<'a>) {
1006 walk_ts_signature(self, it);
1007 }
1008
1009 #[inline]
1010 fn visit_ts_index_signature(&mut self, it: &TSIndexSignature<'a>) {
1011 walk_ts_index_signature(self, it);
1012 }
1013
1014 #[inline]
1015 fn visit_ts_call_signature_declaration(&mut self, it: &TSCallSignatureDeclaration<'a>) {
1016 walk_ts_call_signature_declaration(self, it);
1017 }
1018
1019 #[inline]
1020 fn visit_ts_method_signature(&mut self, it: &TSMethodSignature<'a>) {
1021 walk_ts_method_signature(self, it);
1022 }
1023
1024 #[inline]
1025 fn visit_ts_construct_signature_declaration(
1026 &mut self,
1027 it: &TSConstructSignatureDeclaration<'a>,
1028 ) {
1029 walk_ts_construct_signature_declaration(self, it);
1030 }
1031
1032 #[inline]
1033 fn visit_ts_index_signature_name(&mut self, it: &TSIndexSignatureName<'a>) {
1034 walk_ts_index_signature_name(self, it);
1035 }
1036
1037 #[inline]
1038 fn visit_ts_interface_heritage(&mut self, it: &TSInterfaceHeritage<'a>) {
1039 walk_ts_interface_heritage(self, it);
1040 }
1041
1042 #[inline]
1043 fn visit_ts_type_predicate(&mut self, it: &TSTypePredicate<'a>) {
1044 walk_ts_type_predicate(self, it);
1045 }
1046
1047 #[inline]
1048 fn visit_ts_type_predicate_name(&mut self, it: &TSTypePredicateName<'a>) {
1049 walk_ts_type_predicate_name(self, it);
1050 }
1051
1052 #[inline]
1053 fn visit_ts_module_declaration(&mut self, it: &TSModuleDeclaration<'a>) {
1054 walk_ts_module_declaration(self, it);
1055 }
1056
1057 #[inline]
1058 fn visit_ts_module_declaration_name(&mut self, it: &TSModuleDeclarationName<'a>) {
1059 walk_ts_module_declaration_name(self, it);
1060 }
1061
1062 #[inline]
1063 fn visit_ts_module_declaration_body(&mut self, it: &TSModuleDeclarationBody<'a>) {
1064 walk_ts_module_declaration_body(self, it);
1065 }
1066
1067 #[inline]
1068 fn visit_ts_module_block(&mut self, it: &TSModuleBlock<'a>) {
1069 walk_ts_module_block(self, it);
1070 }
1071
1072 #[inline]
1073 fn visit_ts_type_literal(&mut self, it: &TSTypeLiteral<'a>) {
1074 walk_ts_type_literal(self, it);
1075 }
1076
1077 #[inline]
1078 fn visit_ts_infer_type(&mut self, it: &TSInferType<'a>) {
1079 walk_ts_infer_type(self, it);
1080 }
1081
1082 #[inline]
1083 fn visit_ts_type_query(&mut self, it: &TSTypeQuery<'a>) {
1084 walk_ts_type_query(self, it);
1085 }
1086
1087 #[inline]
1088 fn visit_ts_type_query_expr_name(&mut self, it: &TSTypeQueryExprName<'a>) {
1089 walk_ts_type_query_expr_name(self, it);
1090 }
1091
1092 #[inline]
1093 fn visit_ts_import_type(&mut self, it: &TSImportType<'a>) {
1094 walk_ts_import_type(self, it);
1095 }
1096
1097 #[inline]
1098 fn visit_ts_import_type_qualifier(&mut self, it: &TSImportTypeQualifier<'a>) {
1099 walk_ts_import_type_qualifier(self, it);
1100 }
1101
1102 #[inline]
1103 fn visit_ts_import_type_qualified_name(&mut self, it: &TSImportTypeQualifiedName<'a>) {
1104 walk_ts_import_type_qualified_name(self, it);
1105 }
1106
1107 #[inline]
1108 fn visit_ts_function_type(&mut self, it: &TSFunctionType<'a>) {
1109 walk_ts_function_type(self, it);
1110 }
1111
1112 #[inline]
1113 fn visit_ts_constructor_type(&mut self, it: &TSConstructorType<'a>) {
1114 walk_ts_constructor_type(self, it);
1115 }
1116
1117 #[inline]
1118 fn visit_ts_mapped_type(&mut self, it: &TSMappedType<'a>) {
1119 walk_ts_mapped_type(self, it);
1120 }
1121
1122 #[inline]
1123 fn visit_ts_template_literal_type(&mut self, it: &TSTemplateLiteralType<'a>) {
1124 walk_ts_template_literal_type(self, it);
1125 }
1126
1127 #[inline]
1128 fn visit_ts_as_expression(&mut self, it: &TSAsExpression<'a>) {
1129 walk_ts_as_expression(self, it);
1130 }
1131
1132 #[inline]
1133 fn visit_ts_satisfies_expression(&mut self, it: &TSSatisfiesExpression<'a>) {
1134 walk_ts_satisfies_expression(self, it);
1135 }
1136
1137 #[inline]
1138 fn visit_ts_type_assertion(&mut self, it: &TSTypeAssertion<'a>) {
1139 walk_ts_type_assertion(self, it);
1140 }
1141
1142 #[inline]
1143 fn visit_ts_import_equals_declaration(&mut self, it: &TSImportEqualsDeclaration<'a>) {
1144 walk_ts_import_equals_declaration(self, it);
1145 }
1146
1147 #[inline]
1148 fn visit_ts_module_reference(&mut self, it: &TSModuleReference<'a>) {
1149 walk_ts_module_reference(self, it);
1150 }
1151
1152 #[inline]
1153 fn visit_ts_external_module_reference(&mut self, it: &TSExternalModuleReference<'a>) {
1154 walk_ts_external_module_reference(self, it);
1155 }
1156
1157 #[inline]
1158 fn visit_ts_non_null_expression(&mut self, it: &TSNonNullExpression<'a>) {
1159 walk_ts_non_null_expression(self, it);
1160 }
1161
1162 #[inline]
1163 fn visit_decorator(&mut self, it: &Decorator<'a>) {
1164 walk_decorator(self, it);
1165 }
1166
1167 #[inline]
1168 fn visit_ts_export_assignment(&mut self, it: &TSExportAssignment<'a>) {
1169 walk_ts_export_assignment(self, it);
1170 }
1171
1172 #[inline]
1173 fn visit_ts_namespace_export_declaration(&mut self, it: &TSNamespaceExportDeclaration<'a>) {
1174 walk_ts_namespace_export_declaration(self, it);
1175 }
1176
1177 #[inline]
1178 fn visit_ts_instantiation_expression(&mut self, it: &TSInstantiationExpression<'a>) {
1179 walk_ts_instantiation_expression(self, it);
1180 }
1181
1182 #[inline]
1183 fn visit_js_doc_nullable_type(&mut self, it: &JSDocNullableType<'a>) {
1184 walk_js_doc_nullable_type(self, it);
1185 }
1186
1187 #[inline]
1188 fn visit_js_doc_non_nullable_type(&mut self, it: &JSDocNonNullableType<'a>) {
1189 walk_js_doc_non_nullable_type(self, it);
1190 }
1191
1192 #[inline]
1193 fn visit_js_doc_unknown_type(&mut self, it: &JSDocUnknownType) {
1194 walk_js_doc_unknown_type(self, it);
1195 }
1196
1197 #[inline]
1198 fn visit_span(&mut self, it: &Span) {
1199 walk_span(self, it);
1200 }
1201
1202 #[inline]
1203 fn visit_directives(&mut self, it: &Vec<'a, Directive<'a>>) {
1204 walk_directives(self, it);
1205 }
1206
1207 #[inline]
1208 fn visit_statements(&mut self, it: &Vec<'a, Statement<'a>>) {
1209 walk_statements(self, it);
1210 }
1211
1212 #[inline]
1213 fn visit_array_expression_elements(&mut self, it: &Vec<'a, ArrayExpressionElement<'a>>) {
1214 walk_array_expression_elements(self, it);
1215 }
1216
1217 #[inline]
1218 fn visit_object_property_kinds(&mut self, it: &Vec<'a, ObjectPropertyKind<'a>>) {
1219 walk_object_property_kinds(self, it);
1220 }
1221
1222 #[inline]
1223 fn visit_template_elements(&mut self, it: &Vec<'a, TemplateElement<'a>>) {
1224 walk_template_elements(self, it);
1225 }
1226
1227 #[inline]
1228 fn visit_expressions(&mut self, it: &Vec<'a, Expression<'a>>) {
1229 walk_expressions(self, it);
1230 }
1231
1232 #[inline]
1233 fn visit_arguments(&mut self, it: &Vec<'a, Argument<'a>>) {
1234 walk_arguments(self, it);
1235 }
1236
1237 #[inline]
1238 fn visit_assignment_target_properties(&mut self, it: &Vec<'a, AssignmentTargetProperty<'a>>) {
1239 walk_assignment_target_properties(self, it);
1240 }
1241
1242 #[inline]
1243 fn visit_variable_declarators(&mut self, it: &Vec<'a, VariableDeclarator<'a>>) {
1244 walk_variable_declarators(self, it);
1245 }
1246
1247 #[inline]
1248 fn visit_switch_cases(&mut self, it: &Vec<'a, SwitchCase<'a>>) {
1249 walk_switch_cases(self, it);
1250 }
1251
1252 #[inline]
1253 fn visit_binding_properties(&mut self, it: &Vec<'a, BindingProperty<'a>>) {
1254 walk_binding_properties(self, it);
1255 }
1256
1257 #[inline]
1258 fn visit_formal_parameter_list(&mut self, it: &Vec<'a, FormalParameter<'a>>) {
1259 walk_formal_parameter_list(self, it);
1260 }
1261
1262 #[inline]
1263 fn visit_decorators(&mut self, it: &Vec<'a, Decorator<'a>>) {
1264 walk_decorators(self, it);
1265 }
1266
1267 #[inline]
1268 fn visit_ts_class_implements_list(&mut self, it: &Vec<'a, TSClassImplements<'a>>) {
1269 walk_ts_class_implements_list(self, it);
1270 }
1271
1272 #[inline]
1273 fn visit_class_elements(&mut self, it: &Vec<'a, ClassElement<'a>>) {
1274 walk_class_elements(self, it);
1275 }
1276
1277 #[inline]
1278 fn visit_import_declaration_specifiers(
1279 &mut self,
1280 it: &Vec<'a, ImportDeclarationSpecifier<'a>>,
1281 ) {
1282 walk_import_declaration_specifiers(self, it);
1283 }
1284
1285 #[inline]
1286 fn visit_import_attributes(&mut self, it: &Vec<'a, ImportAttribute<'a>>) {
1287 walk_import_attributes(self, it);
1288 }
1289
1290 #[inline]
1291 fn visit_export_specifiers(&mut self, it: &Vec<'a, ExportSpecifier<'a>>) {
1292 walk_export_specifiers(self, it);
1293 }
1294
1295 #[inline]
1296 fn visit_jsx_children(&mut self, it: &Vec<'a, JSXChild<'a>>) {
1297 walk_jsx_children(self, it);
1298 }
1299
1300 #[inline]
1301 fn visit_jsx_attribute_items(&mut self, it: &Vec<'a, JSXAttributeItem<'a>>) {
1302 walk_jsx_attribute_items(self, it);
1303 }
1304
1305 #[inline]
1306 fn visit_ts_enum_members(&mut self, it: &Vec<'a, TSEnumMember<'a>>) {
1307 walk_ts_enum_members(self, it);
1308 }
1309
1310 #[inline]
1311 fn visit_ts_types(&mut self, it: &Vec<'a, TSType<'a>>) {
1312 walk_ts_types(self, it);
1313 }
1314
1315 #[inline]
1316 fn visit_ts_tuple_elements(&mut self, it: &Vec<'a, TSTupleElement<'a>>) {
1317 walk_ts_tuple_elements(self, it);
1318 }
1319
1320 #[inline]
1321 fn visit_ts_type_parameters(&mut self, it: &Vec<'a, TSTypeParameter<'a>>) {
1322 walk_ts_type_parameters(self, it);
1323 }
1324
1325 #[inline]
1326 fn visit_ts_interface_heritages(&mut self, it: &Vec<'a, TSInterfaceHeritage<'a>>) {
1327 walk_ts_interface_heritages(self, it);
1328 }
1329
1330 #[inline]
1331 fn visit_ts_signatures(&mut self, it: &Vec<'a, TSSignature<'a>>) {
1332 walk_ts_signatures(self, it);
1333 }
1334
1335 #[inline]
1336 fn visit_ts_index_signature_names(&mut self, it: &Vec<'a, TSIndexSignatureName<'a>>) {
1337 walk_ts_index_signature_names(self, it);
1338 }
1339
1340 #[inline]
1341 fn visit_spans(&mut self, it: &Vec<'a, Span>) {
1342 walk_spans(self, it);
1343 }
1344}
1345
1346pub mod walk {
1347 use super::*;
1348
1349 #[inline]
1350 pub fn walk_program<'a, V: Visit<'a>>(visitor: &mut V, it: &Program<'a>) {
1351 let kind = AstKind::Program(visitor.alloc(it));
1352 visitor.enter_node(kind);
1353 visitor.enter_scope(
1354 {
1355 let mut flags = ScopeFlags::Top;
1356 if it.source_type.is_strict() || it.has_use_strict_directive() {
1357 flags |= ScopeFlags::StrictMode;
1358 }
1359 flags
1360 },
1361 &it.scope_id,
1362 );
1363 visitor.visit_span(&it.span);
1364 if let Some(hashbang) = &it.hashbang {
1365 visitor.visit_hashbang(hashbang);
1366 }
1367 visitor.visit_directives(&it.directives);
1368 visitor.visit_statements(&it.body);
1369 visitor.leave_scope();
1370 visitor.leave_node(kind);
1371 }
1372
1373 pub fn walk_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &Expression<'a>) {
1374 match it {
1376 Expression::BooleanLiteral(it) => visitor.visit_boolean_literal(it),
1377 Expression::NullLiteral(it) => visitor.visit_null_literal(it),
1378 Expression::NumericLiteral(it) => visitor.visit_numeric_literal(it),
1379 Expression::BigIntLiteral(it) => visitor.visit_big_int_literal(it),
1380 Expression::RegExpLiteral(it) => visitor.visit_reg_exp_literal(it),
1381 Expression::StringLiteral(it) => visitor.visit_string_literal(it),
1382 Expression::TemplateLiteral(it) => visitor.visit_template_literal(it),
1383 Expression::Identifier(it) => visitor.visit_identifier_reference(it),
1384 Expression::MetaProperty(it) => visitor.visit_meta_property(it),
1385 Expression::Super(it) => visitor.visit_super(it),
1386 Expression::ArrayExpression(it) => visitor.visit_array_expression(it),
1387 Expression::ArrowFunctionExpression(it) => visitor.visit_arrow_function_expression(it),
1388 Expression::AssignmentExpression(it) => visitor.visit_assignment_expression(it),
1389 Expression::AwaitExpression(it) => visitor.visit_await_expression(it),
1390 Expression::BinaryExpression(it) => visitor.visit_binary_expression(it),
1391 Expression::CallExpression(it) => visitor.visit_call_expression(it),
1392 Expression::ChainExpression(it) => visitor.visit_chain_expression(it),
1393 Expression::ClassExpression(it) => visitor.visit_class(it),
1394 Expression::ConditionalExpression(it) => visitor.visit_conditional_expression(it),
1395 Expression::FunctionExpression(it) => {
1396 let flags = ScopeFlags::Function;
1397 visitor.visit_function(it, flags)
1398 }
1399 Expression::ImportExpression(it) => visitor.visit_import_expression(it),
1400 Expression::LogicalExpression(it) => visitor.visit_logical_expression(it),
1401 Expression::NewExpression(it) => visitor.visit_new_expression(it),
1402 Expression::ObjectExpression(it) => visitor.visit_object_expression(it),
1403 Expression::ParenthesizedExpression(it) => visitor.visit_parenthesized_expression(it),
1404 Expression::SequenceExpression(it) => visitor.visit_sequence_expression(it),
1405 Expression::TaggedTemplateExpression(it) => {
1406 visitor.visit_tagged_template_expression(it)
1407 }
1408 Expression::ThisExpression(it) => visitor.visit_this_expression(it),
1409 Expression::UnaryExpression(it) => visitor.visit_unary_expression(it),
1410 Expression::UpdateExpression(it) => visitor.visit_update_expression(it),
1411 Expression::YieldExpression(it) => visitor.visit_yield_expression(it),
1412 Expression::PrivateInExpression(it) => visitor.visit_private_in_expression(it),
1413 Expression::JSXElement(it) => visitor.visit_jsx_element(it),
1414 Expression::JSXFragment(it) => visitor.visit_jsx_fragment(it),
1415 Expression::TSAsExpression(it) => visitor.visit_ts_as_expression(it),
1416 Expression::TSSatisfiesExpression(it) => visitor.visit_ts_satisfies_expression(it),
1417 Expression::TSTypeAssertion(it) => visitor.visit_ts_type_assertion(it),
1418 Expression::TSNonNullExpression(it) => visitor.visit_ts_non_null_expression(it),
1419 Expression::TSInstantiationExpression(it) => {
1420 visitor.visit_ts_instantiation_expression(it)
1421 }
1422 Expression::V8IntrinsicExpression(it) => visitor.visit_v_8_intrinsic_expression(it),
1423 match_member_expression!(Expression) => {
1424 visitor.visit_member_expression(it.to_member_expression())
1425 }
1426 }
1427 }
1428
1429 #[inline]
1430 pub fn walk_identifier_name<'a, V: Visit<'a>>(visitor: &mut V, it: &IdentifierName<'a>) {
1431 let kind = AstKind::IdentifierName(visitor.alloc(it));
1432 visitor.enter_node(kind);
1433 visitor.visit_span(&it.span);
1434 visitor.leave_node(kind);
1435 }
1436
1437 #[inline]
1438 pub fn walk_identifier_reference<'a, V: Visit<'a>>(
1439 visitor: &mut V,
1440 it: &IdentifierReference<'a>,
1441 ) {
1442 let kind = AstKind::IdentifierReference(visitor.alloc(it));
1443 visitor.enter_node(kind);
1444 visitor.visit_span(&it.span);
1445 visitor.leave_node(kind);
1446 }
1447
1448 #[inline]
1449 pub fn walk_binding_identifier<'a, V: Visit<'a>>(visitor: &mut V, it: &BindingIdentifier<'a>) {
1450 let kind = AstKind::BindingIdentifier(visitor.alloc(it));
1451 visitor.enter_node(kind);
1452 visitor.visit_span(&it.span);
1453 visitor.leave_node(kind);
1454 }
1455
1456 #[inline]
1457 pub fn walk_label_identifier<'a, V: Visit<'a>>(visitor: &mut V, it: &LabelIdentifier<'a>) {
1458 let kind = AstKind::LabelIdentifier(visitor.alloc(it));
1459 visitor.enter_node(kind);
1460 visitor.visit_span(&it.span);
1461 visitor.leave_node(kind);
1462 }
1463
1464 #[inline]
1465 pub fn walk_this_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &ThisExpression) {
1466 let kind = AstKind::ThisExpression(visitor.alloc(it));
1467 visitor.enter_node(kind);
1468 visitor.visit_span(&it.span);
1469 visitor.leave_node(kind);
1470 }
1471
1472 #[inline]
1473 pub fn walk_array_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &ArrayExpression<'a>) {
1474 let kind = AstKind::ArrayExpression(visitor.alloc(it));
1475 visitor.enter_node(kind);
1476 visitor.visit_span(&it.span);
1477 visitor.visit_array_expression_elements(&it.elements);
1478 visitor.leave_node(kind);
1479 }
1480
1481 #[inline]
1482 pub fn walk_array_expression_element<'a, V: Visit<'a>>(
1483 visitor: &mut V,
1484 it: &ArrayExpressionElement<'a>,
1485 ) {
1486 match it {
1488 ArrayExpressionElement::SpreadElement(it) => visitor.visit_spread_element(it),
1489 ArrayExpressionElement::Elision(it) => visitor.visit_elision(it),
1490 match_expression!(ArrayExpressionElement) => {
1491 visitor.visit_expression(it.to_expression())
1492 }
1493 }
1494 }
1495
1496 #[inline]
1497 pub fn walk_elision<'a, V: Visit<'a>>(visitor: &mut V, it: &Elision) {
1498 let kind = AstKind::Elision(visitor.alloc(it));
1499 visitor.enter_node(kind);
1500 visitor.visit_span(&it.span);
1501 visitor.leave_node(kind);
1502 }
1503
1504 #[inline]
1505 pub fn walk_object_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &ObjectExpression<'a>) {
1506 let kind = AstKind::ObjectExpression(visitor.alloc(it));
1507 visitor.enter_node(kind);
1508 visitor.visit_span(&it.span);
1509 visitor.visit_object_property_kinds(&it.properties);
1510 visitor.leave_node(kind);
1511 }
1512
1513 #[inline]
1514 pub fn walk_object_property_kind<'a, V: Visit<'a>>(
1515 visitor: &mut V,
1516 it: &ObjectPropertyKind<'a>,
1517 ) {
1518 match it {
1520 ObjectPropertyKind::ObjectProperty(it) => visitor.visit_object_property(it),
1521 ObjectPropertyKind::SpreadProperty(it) => visitor.visit_spread_element(it),
1522 }
1523 }
1524
1525 #[inline]
1526 pub fn walk_object_property<'a, V: Visit<'a>>(visitor: &mut V, it: &ObjectProperty<'a>) {
1527 let kind = AstKind::ObjectProperty(visitor.alloc(it));
1528 visitor.enter_node(kind);
1529 visitor.visit_span(&it.span);
1530 visitor.visit_property_key(&it.key);
1531 visitor.visit_expression(&it.value);
1532 visitor.leave_node(kind);
1533 }
1534
1535 #[inline]
1536 pub fn walk_property_key<'a, V: Visit<'a>>(visitor: &mut V, it: &PropertyKey<'a>) {
1537 match it {
1539 PropertyKey::StaticIdentifier(it) => visitor.visit_identifier_name(it),
1540 PropertyKey::PrivateIdentifier(it) => visitor.visit_private_identifier(it),
1541 match_expression!(PropertyKey) => visitor.visit_expression(it.to_expression()),
1542 }
1543 }
1544
1545 #[inline]
1546 pub fn walk_template_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &TemplateLiteral<'a>) {
1547 let kind = AstKind::TemplateLiteral(visitor.alloc(it));
1548 visitor.enter_node(kind);
1549 visitor.visit_span(&it.span);
1550 visitor.visit_template_elements(&it.quasis);
1551 visitor.visit_expressions(&it.expressions);
1552 visitor.leave_node(kind);
1553 }
1554
1555 #[inline]
1556 pub fn walk_tagged_template_expression<'a, V: Visit<'a>>(
1557 visitor: &mut V,
1558 it: &TaggedTemplateExpression<'a>,
1559 ) {
1560 let kind = AstKind::TaggedTemplateExpression(visitor.alloc(it));
1561 visitor.enter_node(kind);
1562 visitor.visit_span(&it.span);
1563 visitor.visit_expression(&it.tag);
1564 if let Some(type_arguments) = &it.type_arguments {
1565 visitor.visit_ts_type_parameter_instantiation(type_arguments);
1566 }
1567 visitor.visit_template_literal(&it.quasi);
1568 visitor.leave_node(kind);
1569 }
1570
1571 #[inline]
1572 pub fn walk_template_element<'a, V: Visit<'a>>(visitor: &mut V, it: &TemplateElement<'a>) {
1573 let kind = AstKind::TemplateElement(visitor.alloc(it));
1574 visitor.enter_node(kind);
1575 visitor.visit_span(&it.span);
1576 visitor.leave_node(kind);
1577 }
1578
1579 #[inline]
1580 pub fn walk_member_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &MemberExpression<'a>) {
1581 match it {
1583 MemberExpression::ComputedMemberExpression(it) => {
1584 visitor.visit_computed_member_expression(it)
1585 }
1586 MemberExpression::StaticMemberExpression(it) => {
1587 visitor.visit_static_member_expression(it)
1588 }
1589 MemberExpression::PrivateFieldExpression(it) => {
1590 visitor.visit_private_field_expression(it)
1591 }
1592 }
1593 }
1594
1595 #[inline]
1596 pub fn walk_computed_member_expression<'a, V: Visit<'a>>(
1597 visitor: &mut V,
1598 it: &ComputedMemberExpression<'a>,
1599 ) {
1600 let kind = AstKind::ComputedMemberExpression(visitor.alloc(it));
1601 visitor.enter_node(kind);
1602 visitor.visit_span(&it.span);
1603 visitor.visit_expression(&it.object);
1604 visitor.visit_expression(&it.expression);
1605 visitor.leave_node(kind);
1606 }
1607
1608 #[inline]
1609 pub fn walk_static_member_expression<'a, V: Visit<'a>>(
1610 visitor: &mut V,
1611 it: &StaticMemberExpression<'a>,
1612 ) {
1613 let kind = AstKind::StaticMemberExpression(visitor.alloc(it));
1614 visitor.enter_node(kind);
1615 visitor.visit_span(&it.span);
1616 visitor.visit_expression(&it.object);
1617 visitor.visit_identifier_name(&it.property);
1618 visitor.leave_node(kind);
1619 }
1620
1621 #[inline]
1622 pub fn walk_private_field_expression<'a, V: Visit<'a>>(
1623 visitor: &mut V,
1624 it: &PrivateFieldExpression<'a>,
1625 ) {
1626 let kind = AstKind::PrivateFieldExpression(visitor.alloc(it));
1627 visitor.enter_node(kind);
1628 visitor.visit_span(&it.span);
1629 visitor.visit_expression(&it.object);
1630 visitor.visit_private_identifier(&it.field);
1631 visitor.leave_node(kind);
1632 }
1633
1634 #[inline]
1635 pub fn walk_call_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &CallExpression<'a>) {
1636 let kind = AstKind::CallExpression(visitor.alloc(it));
1637 visitor.enter_node(kind);
1638 visitor.visit_span(&it.span);
1639 visitor.visit_expression(&it.callee);
1640 if let Some(type_arguments) = &it.type_arguments {
1641 visitor.visit_ts_type_parameter_instantiation(type_arguments);
1642 }
1643 visitor.visit_arguments(&it.arguments);
1644 visitor.leave_node(kind);
1645 }
1646
1647 #[inline]
1648 pub fn walk_new_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &NewExpression<'a>) {
1649 let kind = AstKind::NewExpression(visitor.alloc(it));
1650 visitor.enter_node(kind);
1651 visitor.visit_span(&it.span);
1652 visitor.visit_expression(&it.callee);
1653 if let Some(type_arguments) = &it.type_arguments {
1654 visitor.visit_ts_type_parameter_instantiation(type_arguments);
1655 }
1656 visitor.visit_arguments(&it.arguments);
1657 visitor.leave_node(kind);
1658 }
1659
1660 #[inline]
1661 pub fn walk_meta_property<'a, V: Visit<'a>>(visitor: &mut V, it: &MetaProperty<'a>) {
1662 let kind = AstKind::MetaProperty(visitor.alloc(it));
1663 visitor.enter_node(kind);
1664 visitor.visit_span(&it.span);
1665 visitor.visit_identifier_name(&it.meta);
1666 visitor.visit_identifier_name(&it.property);
1667 visitor.leave_node(kind);
1668 }
1669
1670 #[inline]
1671 pub fn walk_spread_element<'a, V: Visit<'a>>(visitor: &mut V, it: &SpreadElement<'a>) {
1672 let kind = AstKind::SpreadElement(visitor.alloc(it));
1673 visitor.enter_node(kind);
1674 visitor.visit_span(&it.span);
1675 visitor.visit_expression(&it.argument);
1676 visitor.leave_node(kind);
1677 }
1678
1679 #[inline]
1680 pub fn walk_argument<'a, V: Visit<'a>>(visitor: &mut V, it: &Argument<'a>) {
1681 let kind = AstKind::Argument(visitor.alloc(it));
1682 visitor.enter_node(kind);
1683 match it {
1684 Argument::SpreadElement(it) => visitor.visit_spread_element(it),
1685 match_expression!(Argument) => visitor.visit_expression(it.to_expression()),
1686 }
1687 visitor.leave_node(kind);
1688 }
1689
1690 #[inline]
1691 pub fn walk_update_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &UpdateExpression<'a>) {
1692 let kind = AstKind::UpdateExpression(visitor.alloc(it));
1693 visitor.enter_node(kind);
1694 visitor.visit_span(&it.span);
1695 visitor.visit_simple_assignment_target(&it.argument);
1696 visitor.leave_node(kind);
1697 }
1698
1699 #[inline]
1700 pub fn walk_unary_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &UnaryExpression<'a>) {
1701 let kind = AstKind::UnaryExpression(visitor.alloc(it));
1702 visitor.enter_node(kind);
1703 visitor.visit_span(&it.span);
1704 visitor.visit_expression(&it.argument);
1705 visitor.leave_node(kind);
1706 }
1707
1708 #[inline]
1709 pub fn walk_binary_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &BinaryExpression<'a>) {
1710 let kind = AstKind::BinaryExpression(visitor.alloc(it));
1711 visitor.enter_node(kind);
1712 visitor.visit_span(&it.span);
1713 visitor.visit_expression(&it.left);
1714 visitor.visit_expression(&it.right);
1715 visitor.leave_node(kind);
1716 }
1717
1718 #[inline]
1719 pub fn walk_private_in_expression<'a, V: Visit<'a>>(
1720 visitor: &mut V,
1721 it: &PrivateInExpression<'a>,
1722 ) {
1723 let kind = AstKind::PrivateInExpression(visitor.alloc(it));
1724 visitor.enter_node(kind);
1725 visitor.visit_span(&it.span);
1726 visitor.visit_private_identifier(&it.left);
1727 visitor.visit_expression(&it.right);
1728 visitor.leave_node(kind);
1729 }
1730
1731 #[inline]
1732 pub fn walk_logical_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &LogicalExpression<'a>) {
1733 let kind = AstKind::LogicalExpression(visitor.alloc(it));
1734 visitor.enter_node(kind);
1735 visitor.visit_span(&it.span);
1736 visitor.visit_expression(&it.left);
1737 visitor.visit_expression(&it.right);
1738 visitor.leave_node(kind);
1739 }
1740
1741 #[inline]
1742 pub fn walk_conditional_expression<'a, V: Visit<'a>>(
1743 visitor: &mut V,
1744 it: &ConditionalExpression<'a>,
1745 ) {
1746 let kind = AstKind::ConditionalExpression(visitor.alloc(it));
1747 visitor.enter_node(kind);
1748 visitor.visit_span(&it.span);
1749 visitor.visit_expression(&it.test);
1750 visitor.visit_expression(&it.consequent);
1751 visitor.visit_expression(&it.alternate);
1752 visitor.leave_node(kind);
1753 }
1754
1755 #[inline]
1756 pub fn walk_assignment_expression<'a, V: Visit<'a>>(
1757 visitor: &mut V,
1758 it: &AssignmentExpression<'a>,
1759 ) {
1760 let kind = AstKind::AssignmentExpression(visitor.alloc(it));
1761 visitor.enter_node(kind);
1762 visitor.visit_span(&it.span);
1763 visitor.visit_assignment_target(&it.left);
1764 visitor.visit_expression(&it.right);
1765 visitor.leave_node(kind);
1766 }
1767
1768 #[inline]
1769 pub fn walk_assignment_target<'a, V: Visit<'a>>(visitor: &mut V, it: &AssignmentTarget<'a>) {
1770 match it {
1772 match_simple_assignment_target!(AssignmentTarget) => {
1773 visitor.visit_simple_assignment_target(it.to_simple_assignment_target())
1774 }
1775 match_assignment_target_pattern!(AssignmentTarget) => {
1776 visitor.visit_assignment_target_pattern(it.to_assignment_target_pattern())
1777 }
1778 }
1779 }
1780
1781 pub fn walk_simple_assignment_target<'a, V: Visit<'a>>(
1782 visitor: &mut V,
1783 it: &SimpleAssignmentTarget<'a>,
1784 ) {
1785 match it {
1787 SimpleAssignmentTarget::AssignmentTargetIdentifier(it) => {
1788 visitor.visit_identifier_reference(it)
1789 }
1790 SimpleAssignmentTarget::TSAsExpression(it) => visitor.visit_ts_as_expression(it),
1791 SimpleAssignmentTarget::TSSatisfiesExpression(it) => {
1792 visitor.visit_ts_satisfies_expression(it)
1793 }
1794 SimpleAssignmentTarget::TSNonNullExpression(it) => {
1795 visitor.visit_ts_non_null_expression(it)
1796 }
1797 SimpleAssignmentTarget::TSTypeAssertion(it) => visitor.visit_ts_type_assertion(it),
1798 match_member_expression!(SimpleAssignmentTarget) => {
1799 visitor.visit_member_expression(it.to_member_expression())
1800 }
1801 }
1802 }
1803
1804 #[inline]
1805 pub fn walk_assignment_target_pattern<'a, V: Visit<'a>>(
1806 visitor: &mut V,
1807 it: &AssignmentTargetPattern<'a>,
1808 ) {
1809 match it {
1811 AssignmentTargetPattern::ArrayAssignmentTarget(it) => {
1812 visitor.visit_array_assignment_target(it)
1813 }
1814 AssignmentTargetPattern::ObjectAssignmentTarget(it) => {
1815 visitor.visit_object_assignment_target(it)
1816 }
1817 }
1818 }
1819
1820 #[inline]
1821 pub fn walk_array_assignment_target<'a, V: Visit<'a>>(
1822 visitor: &mut V,
1823 it: &ArrayAssignmentTarget<'a>,
1824 ) {
1825 let kind = AstKind::ArrayAssignmentTarget(visitor.alloc(it));
1826 visitor.enter_node(kind);
1827 visitor.visit_span(&it.span);
1828 for el in it.elements.iter().flatten() {
1829 visitor.visit_assignment_target_maybe_default(el);
1830 }
1831 if let Some(rest) = &it.rest {
1832 visitor.visit_assignment_target_rest(rest);
1833 }
1834 visitor.leave_node(kind);
1835 }
1836
1837 #[inline]
1838 pub fn walk_object_assignment_target<'a, V: Visit<'a>>(
1839 visitor: &mut V,
1840 it: &ObjectAssignmentTarget<'a>,
1841 ) {
1842 let kind = AstKind::ObjectAssignmentTarget(visitor.alloc(it));
1843 visitor.enter_node(kind);
1844 visitor.visit_span(&it.span);
1845 visitor.visit_assignment_target_properties(&it.properties);
1846 if let Some(rest) = &it.rest {
1847 visitor.visit_assignment_target_rest(rest);
1848 }
1849 visitor.leave_node(kind);
1850 }
1851
1852 #[inline]
1853 pub fn walk_assignment_target_rest<'a, V: Visit<'a>>(
1854 visitor: &mut V,
1855 it: &AssignmentTargetRest<'a>,
1856 ) {
1857 let kind = AstKind::AssignmentTargetRest(visitor.alloc(it));
1858 visitor.enter_node(kind);
1859 visitor.visit_span(&it.span);
1860 visitor.visit_assignment_target(&it.target);
1861 visitor.leave_node(kind);
1862 }
1863
1864 #[inline]
1865 pub fn walk_assignment_target_maybe_default<'a, V: Visit<'a>>(
1866 visitor: &mut V,
1867 it: &AssignmentTargetMaybeDefault<'a>,
1868 ) {
1869 match it {
1871 AssignmentTargetMaybeDefault::AssignmentTargetWithDefault(it) => {
1872 visitor.visit_assignment_target_with_default(it)
1873 }
1874 match_assignment_target!(AssignmentTargetMaybeDefault) => {
1875 visitor.visit_assignment_target(it.to_assignment_target())
1876 }
1877 }
1878 }
1879
1880 #[inline]
1881 pub fn walk_assignment_target_with_default<'a, V: Visit<'a>>(
1882 visitor: &mut V,
1883 it: &AssignmentTargetWithDefault<'a>,
1884 ) {
1885 let kind = AstKind::AssignmentTargetWithDefault(visitor.alloc(it));
1886 visitor.enter_node(kind);
1887 visitor.visit_span(&it.span);
1888 visitor.visit_assignment_target(&it.binding);
1889 visitor.visit_expression(&it.init);
1890 visitor.leave_node(kind);
1891 }
1892
1893 #[inline]
1894 pub fn walk_assignment_target_property<'a, V: Visit<'a>>(
1895 visitor: &mut V,
1896 it: &AssignmentTargetProperty<'a>,
1897 ) {
1898 match it {
1900 AssignmentTargetProperty::AssignmentTargetPropertyIdentifier(it) => {
1901 visitor.visit_assignment_target_property_identifier(it)
1902 }
1903 AssignmentTargetProperty::AssignmentTargetPropertyProperty(it) => {
1904 visitor.visit_assignment_target_property_property(it)
1905 }
1906 }
1907 }
1908
1909 #[inline]
1910 pub fn walk_assignment_target_property_identifier<'a, V: Visit<'a>>(
1911 visitor: &mut V,
1912 it: &AssignmentTargetPropertyIdentifier<'a>,
1913 ) {
1914 let kind = AstKind::AssignmentTargetPropertyIdentifier(visitor.alloc(it));
1915 visitor.enter_node(kind);
1916 visitor.visit_span(&it.span);
1917 visitor.visit_identifier_reference(&it.binding);
1918 if let Some(init) = &it.init {
1919 visitor.visit_expression(init);
1920 }
1921 visitor.leave_node(kind);
1922 }
1923
1924 #[inline]
1925 pub fn walk_assignment_target_property_property<'a, V: Visit<'a>>(
1926 visitor: &mut V,
1927 it: &AssignmentTargetPropertyProperty<'a>,
1928 ) {
1929 let kind = AstKind::AssignmentTargetPropertyProperty(visitor.alloc(it));
1930 visitor.enter_node(kind);
1931 visitor.visit_span(&it.span);
1932 visitor.visit_property_key(&it.name);
1933 visitor.visit_assignment_target_maybe_default(&it.binding);
1934 visitor.leave_node(kind);
1935 }
1936
1937 #[inline]
1938 pub fn walk_sequence_expression<'a, V: Visit<'a>>(
1939 visitor: &mut V,
1940 it: &SequenceExpression<'a>,
1941 ) {
1942 let kind = AstKind::SequenceExpression(visitor.alloc(it));
1943 visitor.enter_node(kind);
1944 visitor.visit_span(&it.span);
1945 visitor.visit_expressions(&it.expressions);
1946 visitor.leave_node(kind);
1947 }
1948
1949 #[inline]
1950 pub fn walk_super<'a, V: Visit<'a>>(visitor: &mut V, it: &Super) {
1951 let kind = AstKind::Super(visitor.alloc(it));
1952 visitor.enter_node(kind);
1953 visitor.visit_span(&it.span);
1954 visitor.leave_node(kind);
1955 }
1956
1957 #[inline]
1958 pub fn walk_await_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &AwaitExpression<'a>) {
1959 let kind = AstKind::AwaitExpression(visitor.alloc(it));
1960 visitor.enter_node(kind);
1961 visitor.visit_span(&it.span);
1962 visitor.visit_expression(&it.argument);
1963 visitor.leave_node(kind);
1964 }
1965
1966 #[inline]
1967 pub fn walk_chain_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &ChainExpression<'a>) {
1968 let kind = AstKind::ChainExpression(visitor.alloc(it));
1969 visitor.enter_node(kind);
1970 visitor.visit_span(&it.span);
1971 visitor.visit_chain_element(&it.expression);
1972 visitor.leave_node(kind);
1973 }
1974
1975 #[inline]
1976 pub fn walk_chain_element<'a, V: Visit<'a>>(visitor: &mut V, it: &ChainElement<'a>) {
1977 match it {
1979 ChainElement::CallExpression(it) => visitor.visit_call_expression(it),
1980 ChainElement::TSNonNullExpression(it) => visitor.visit_ts_non_null_expression(it),
1981 match_member_expression!(ChainElement) => {
1982 visitor.visit_member_expression(it.to_member_expression())
1983 }
1984 }
1985 }
1986
1987 #[inline]
1988 pub fn walk_parenthesized_expression<'a, V: Visit<'a>>(
1989 visitor: &mut V,
1990 it: &ParenthesizedExpression<'a>,
1991 ) {
1992 let kind = AstKind::ParenthesizedExpression(visitor.alloc(it));
1993 visitor.enter_node(kind);
1994 visitor.visit_span(&it.span);
1995 visitor.visit_expression(&it.expression);
1996 visitor.leave_node(kind);
1997 }
1998
1999 pub fn walk_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &Statement<'a>) {
2000 match it {
2002 Statement::BlockStatement(it) => visitor.visit_block_statement(it),
2003 Statement::BreakStatement(it) => visitor.visit_break_statement(it),
2004 Statement::ContinueStatement(it) => visitor.visit_continue_statement(it),
2005 Statement::DebuggerStatement(it) => visitor.visit_debugger_statement(it),
2006 Statement::DoWhileStatement(it) => visitor.visit_do_while_statement(it),
2007 Statement::EmptyStatement(it) => visitor.visit_empty_statement(it),
2008 Statement::ExpressionStatement(it) => visitor.visit_expression_statement(it),
2009 Statement::ForInStatement(it) => visitor.visit_for_in_statement(it),
2010 Statement::ForOfStatement(it) => visitor.visit_for_of_statement(it),
2011 Statement::ForStatement(it) => visitor.visit_for_statement(it),
2012 Statement::IfStatement(it) => visitor.visit_if_statement(it),
2013 Statement::LabeledStatement(it) => visitor.visit_labeled_statement(it),
2014 Statement::ReturnStatement(it) => visitor.visit_return_statement(it),
2015 Statement::SwitchStatement(it) => visitor.visit_switch_statement(it),
2016 Statement::ThrowStatement(it) => visitor.visit_throw_statement(it),
2017 Statement::TryStatement(it) => visitor.visit_try_statement(it),
2018 Statement::WhileStatement(it) => visitor.visit_while_statement(it),
2019 Statement::WithStatement(it) => visitor.visit_with_statement(it),
2020 match_declaration!(Statement) => visitor.visit_declaration(it.to_declaration()),
2021 match_module_declaration!(Statement) => {
2022 visitor.visit_module_declaration(it.to_module_declaration())
2023 }
2024 }
2025 }
2026
2027 #[inline]
2028 pub fn walk_directive<'a, V: Visit<'a>>(visitor: &mut V, it: &Directive<'a>) {
2029 let kind = AstKind::Directive(visitor.alloc(it));
2030 visitor.enter_node(kind);
2031 visitor.visit_span(&it.span);
2032 visitor.visit_string_literal(&it.expression);
2033 visitor.leave_node(kind);
2034 }
2035
2036 #[inline]
2037 pub fn walk_hashbang<'a, V: Visit<'a>>(visitor: &mut V, it: &Hashbang<'a>) {
2038 let kind = AstKind::Hashbang(visitor.alloc(it));
2039 visitor.enter_node(kind);
2040 visitor.visit_span(&it.span);
2041 visitor.leave_node(kind);
2042 }
2043
2044 #[inline]
2045 pub fn walk_block_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &BlockStatement<'a>) {
2046 let kind = AstKind::BlockStatement(visitor.alloc(it));
2047 visitor.enter_node(kind);
2048 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2049 visitor.visit_span(&it.span);
2050 visitor.visit_statements(&it.body);
2051 visitor.leave_scope();
2052 visitor.leave_node(kind);
2053 }
2054
2055 pub fn walk_declaration<'a, V: Visit<'a>>(visitor: &mut V, it: &Declaration<'a>) {
2056 match it {
2058 Declaration::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
2059 Declaration::FunctionDeclaration(it) => {
2060 let flags = ScopeFlags::Function;
2061 visitor.visit_function(it, flags)
2062 }
2063 Declaration::ClassDeclaration(it) => visitor.visit_class(it),
2064 Declaration::TSTypeAliasDeclaration(it) => visitor.visit_ts_type_alias_declaration(it),
2065 Declaration::TSInterfaceDeclaration(it) => visitor.visit_ts_interface_declaration(it),
2066 Declaration::TSEnumDeclaration(it) => visitor.visit_ts_enum_declaration(it),
2067 Declaration::TSModuleDeclaration(it) => visitor.visit_ts_module_declaration(it),
2068 Declaration::TSImportEqualsDeclaration(it) => {
2069 visitor.visit_ts_import_equals_declaration(it)
2070 }
2071 }
2072 }
2073
2074 #[inline]
2075 pub fn walk_variable_declaration<'a, V: Visit<'a>>(
2076 visitor: &mut V,
2077 it: &VariableDeclaration<'a>,
2078 ) {
2079 let kind = AstKind::VariableDeclaration(visitor.alloc(it));
2080 visitor.enter_node(kind);
2081 visitor.visit_span(&it.span);
2082 visitor.visit_variable_declarators(&it.declarations);
2083 visitor.leave_node(kind);
2084 }
2085
2086 #[inline]
2087 pub fn walk_variable_declarator<'a, V: Visit<'a>>(
2088 visitor: &mut V,
2089 it: &VariableDeclarator<'a>,
2090 ) {
2091 let kind = AstKind::VariableDeclarator(visitor.alloc(it));
2092 visitor.enter_node(kind);
2093 visitor.visit_span(&it.span);
2094 visitor.visit_binding_pattern(&it.id);
2095 if let Some(init) = &it.init {
2096 visitor.visit_expression(init);
2097 }
2098 visitor.leave_node(kind);
2099 }
2100
2101 #[inline]
2102 pub fn walk_empty_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &EmptyStatement) {
2103 let kind = AstKind::EmptyStatement(visitor.alloc(it));
2104 visitor.enter_node(kind);
2105 visitor.visit_span(&it.span);
2106 visitor.leave_node(kind);
2107 }
2108
2109 #[inline]
2110 pub fn walk_expression_statement<'a, V: Visit<'a>>(
2111 visitor: &mut V,
2112 it: &ExpressionStatement<'a>,
2113 ) {
2114 let kind = AstKind::ExpressionStatement(visitor.alloc(it));
2115 visitor.enter_node(kind);
2116 visitor.visit_span(&it.span);
2117 visitor.visit_expression(&it.expression);
2118 visitor.leave_node(kind);
2119 }
2120
2121 #[inline]
2122 pub fn walk_if_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &IfStatement<'a>) {
2123 let kind = AstKind::IfStatement(visitor.alloc(it));
2124 visitor.enter_node(kind);
2125 visitor.visit_span(&it.span);
2126 visitor.visit_expression(&it.test);
2127 visitor.visit_statement(&it.consequent);
2128 if let Some(alternate) = &it.alternate {
2129 visitor.visit_statement(alternate);
2130 }
2131 visitor.leave_node(kind);
2132 }
2133
2134 #[inline]
2135 pub fn walk_do_while_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &DoWhileStatement<'a>) {
2136 let kind = AstKind::DoWhileStatement(visitor.alloc(it));
2137 visitor.enter_node(kind);
2138 visitor.visit_span(&it.span);
2139 visitor.visit_statement(&it.body);
2140 visitor.visit_expression(&it.test);
2141 visitor.leave_node(kind);
2142 }
2143
2144 #[inline]
2145 pub fn walk_while_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &WhileStatement<'a>) {
2146 let kind = AstKind::WhileStatement(visitor.alloc(it));
2147 visitor.enter_node(kind);
2148 visitor.visit_span(&it.span);
2149 visitor.visit_expression(&it.test);
2150 visitor.visit_statement(&it.body);
2151 visitor.leave_node(kind);
2152 }
2153
2154 #[inline]
2155 pub fn walk_for_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &ForStatement<'a>) {
2156 let kind = AstKind::ForStatement(visitor.alloc(it));
2157 visitor.enter_node(kind);
2158 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2159 visitor.visit_span(&it.span);
2160 if let Some(init) = &it.init {
2161 visitor.visit_for_statement_init(init);
2162 }
2163 if let Some(test) = &it.test {
2164 visitor.visit_expression(test);
2165 }
2166 if let Some(update) = &it.update {
2167 visitor.visit_expression(update);
2168 }
2169 visitor.visit_statement(&it.body);
2170 visitor.leave_scope();
2171 visitor.leave_node(kind);
2172 }
2173
2174 #[inline]
2175 pub fn walk_for_statement_init<'a, V: Visit<'a>>(visitor: &mut V, it: &ForStatementInit<'a>) {
2176 match it {
2178 ForStatementInit::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
2179 match_expression!(ForStatementInit) => visitor.visit_expression(it.to_expression()),
2180 }
2181 }
2182
2183 #[inline]
2184 pub fn walk_for_in_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &ForInStatement<'a>) {
2185 let kind = AstKind::ForInStatement(visitor.alloc(it));
2186 visitor.enter_node(kind);
2187 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2188 visitor.visit_span(&it.span);
2189 visitor.visit_for_statement_left(&it.left);
2190 visitor.visit_expression(&it.right);
2191 visitor.visit_statement(&it.body);
2192 visitor.leave_scope();
2193 visitor.leave_node(kind);
2194 }
2195
2196 #[inline]
2197 pub fn walk_for_statement_left<'a, V: Visit<'a>>(visitor: &mut V, it: &ForStatementLeft<'a>) {
2198 match it {
2200 ForStatementLeft::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
2201 match_assignment_target!(ForStatementLeft) => {
2202 visitor.visit_assignment_target(it.to_assignment_target())
2203 }
2204 }
2205 }
2206
2207 #[inline]
2208 pub fn walk_for_of_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &ForOfStatement<'a>) {
2209 let kind = AstKind::ForOfStatement(visitor.alloc(it));
2210 visitor.enter_node(kind);
2211 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2212 visitor.visit_span(&it.span);
2213 visitor.visit_for_statement_left(&it.left);
2214 visitor.visit_expression(&it.right);
2215 visitor.visit_statement(&it.body);
2216 visitor.leave_scope();
2217 visitor.leave_node(kind);
2218 }
2219
2220 #[inline]
2221 pub fn walk_continue_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &ContinueStatement<'a>) {
2222 let kind = AstKind::ContinueStatement(visitor.alloc(it));
2223 visitor.enter_node(kind);
2224 visitor.visit_span(&it.span);
2225 if let Some(label) = &it.label {
2226 visitor.visit_label_identifier(label);
2227 }
2228 visitor.leave_node(kind);
2229 }
2230
2231 #[inline]
2232 pub fn walk_break_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &BreakStatement<'a>) {
2233 let kind = AstKind::BreakStatement(visitor.alloc(it));
2234 visitor.enter_node(kind);
2235 visitor.visit_span(&it.span);
2236 if let Some(label) = &it.label {
2237 visitor.visit_label_identifier(label);
2238 }
2239 visitor.leave_node(kind);
2240 }
2241
2242 #[inline]
2243 pub fn walk_return_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &ReturnStatement<'a>) {
2244 let kind = AstKind::ReturnStatement(visitor.alloc(it));
2245 visitor.enter_node(kind);
2246 visitor.visit_span(&it.span);
2247 if let Some(argument) = &it.argument {
2248 visitor.visit_expression(argument);
2249 }
2250 visitor.leave_node(kind);
2251 }
2252
2253 #[inline]
2254 pub fn walk_with_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &WithStatement<'a>) {
2255 let kind = AstKind::WithStatement(visitor.alloc(it));
2256 visitor.enter_node(kind);
2257 visitor.visit_span(&it.span);
2258 visitor.visit_expression(&it.object);
2259 visitor.visit_statement(&it.body);
2260 visitor.leave_node(kind);
2261 }
2262
2263 #[inline]
2264 pub fn walk_switch_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &SwitchStatement<'a>) {
2265 let kind = AstKind::SwitchStatement(visitor.alloc(it));
2266 visitor.enter_node(kind);
2267 visitor.visit_span(&it.span);
2268 visitor.visit_expression(&it.discriminant);
2269 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2270 visitor.visit_switch_cases(&it.cases);
2271 visitor.leave_scope();
2272 visitor.leave_node(kind);
2273 }
2274
2275 #[inline]
2276 pub fn walk_switch_case<'a, V: Visit<'a>>(visitor: &mut V, it: &SwitchCase<'a>) {
2277 let kind = AstKind::SwitchCase(visitor.alloc(it));
2278 visitor.enter_node(kind);
2279 visitor.visit_span(&it.span);
2280 if let Some(test) = &it.test {
2281 visitor.visit_expression(test);
2282 }
2283 visitor.visit_statements(&it.consequent);
2284 visitor.leave_node(kind);
2285 }
2286
2287 #[inline]
2288 pub fn walk_labeled_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &LabeledStatement<'a>) {
2289 let kind = AstKind::LabeledStatement(visitor.alloc(it));
2290 visitor.enter_node(kind);
2291 visitor.visit_span(&it.span);
2292 visitor.visit_label_identifier(&it.label);
2293 visitor.visit_statement(&it.body);
2294 visitor.leave_node(kind);
2295 }
2296
2297 #[inline]
2298 pub fn walk_throw_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &ThrowStatement<'a>) {
2299 let kind = AstKind::ThrowStatement(visitor.alloc(it));
2300 visitor.enter_node(kind);
2301 visitor.visit_span(&it.span);
2302 visitor.visit_expression(&it.argument);
2303 visitor.leave_node(kind);
2304 }
2305
2306 #[inline]
2307 pub fn walk_try_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &TryStatement<'a>) {
2308 let kind = AstKind::TryStatement(visitor.alloc(it));
2309 visitor.enter_node(kind);
2310 visitor.visit_span(&it.span);
2311 visitor.visit_block_statement(&it.block);
2312 if let Some(handler) = &it.handler {
2313 visitor.visit_catch_clause(handler);
2314 }
2315 if let Some(finalizer) = &it.finalizer {
2316 visitor.visit_block_statement(finalizer);
2317 }
2318 visitor.leave_node(kind);
2319 }
2320
2321 #[inline]
2322 pub fn walk_catch_clause<'a, V: Visit<'a>>(visitor: &mut V, it: &CatchClause<'a>) {
2323 let kind = AstKind::CatchClause(visitor.alloc(it));
2324 visitor.enter_node(kind);
2325 visitor.enter_scope(ScopeFlags::CatchClause, &it.scope_id);
2326 visitor.visit_span(&it.span);
2327 if let Some(param) = &it.param {
2328 visitor.visit_catch_parameter(param);
2329 }
2330 visitor.visit_block_statement(&it.body);
2331 visitor.leave_scope();
2332 visitor.leave_node(kind);
2333 }
2334
2335 #[inline]
2336 pub fn walk_catch_parameter<'a, V: Visit<'a>>(visitor: &mut V, it: &CatchParameter<'a>) {
2337 let kind = AstKind::CatchParameter(visitor.alloc(it));
2338 visitor.enter_node(kind);
2339 visitor.visit_span(&it.span);
2340 visitor.visit_binding_pattern(&it.pattern);
2341 visitor.leave_node(kind);
2342 }
2343
2344 #[inline]
2345 pub fn walk_debugger_statement<'a, V: Visit<'a>>(visitor: &mut V, it: &DebuggerStatement) {
2346 let kind = AstKind::DebuggerStatement(visitor.alloc(it));
2347 visitor.enter_node(kind);
2348 visitor.visit_span(&it.span);
2349 visitor.leave_node(kind);
2350 }
2351
2352 #[inline]
2353 pub fn walk_binding_pattern<'a, V: Visit<'a>>(visitor: &mut V, it: &BindingPattern<'a>) {
2354 visitor.visit_binding_pattern_kind(&it.kind);
2356 if let Some(type_annotation) = &it.type_annotation {
2357 visitor.visit_ts_type_annotation(type_annotation);
2358 }
2359 }
2360
2361 #[inline]
2362 pub fn walk_binding_pattern_kind<'a, V: Visit<'a>>(
2363 visitor: &mut V,
2364 it: &BindingPatternKind<'a>,
2365 ) {
2366 match it {
2368 BindingPatternKind::BindingIdentifier(it) => visitor.visit_binding_identifier(it),
2369 BindingPatternKind::ObjectPattern(it) => visitor.visit_object_pattern(it),
2370 BindingPatternKind::ArrayPattern(it) => visitor.visit_array_pattern(it),
2371 BindingPatternKind::AssignmentPattern(it) => visitor.visit_assignment_pattern(it),
2372 }
2373 }
2374
2375 #[inline]
2376 pub fn walk_assignment_pattern<'a, V: Visit<'a>>(visitor: &mut V, it: &AssignmentPattern<'a>) {
2377 let kind = AstKind::AssignmentPattern(visitor.alloc(it));
2378 visitor.enter_node(kind);
2379 visitor.visit_span(&it.span);
2380 visitor.visit_binding_pattern(&it.left);
2381 visitor.visit_expression(&it.right);
2382 visitor.leave_node(kind);
2383 }
2384
2385 #[inline]
2386 pub fn walk_object_pattern<'a, V: Visit<'a>>(visitor: &mut V, it: &ObjectPattern<'a>) {
2387 let kind = AstKind::ObjectPattern(visitor.alloc(it));
2388 visitor.enter_node(kind);
2389 visitor.visit_span(&it.span);
2390 visitor.visit_binding_properties(&it.properties);
2391 if let Some(rest) = &it.rest {
2392 visitor.visit_binding_rest_element(rest);
2393 }
2394 visitor.leave_node(kind);
2395 }
2396
2397 #[inline]
2398 pub fn walk_binding_property<'a, V: Visit<'a>>(visitor: &mut V, it: &BindingProperty<'a>) {
2399 let kind = AstKind::BindingProperty(visitor.alloc(it));
2400 visitor.enter_node(kind);
2401 visitor.visit_span(&it.span);
2402 visitor.visit_property_key(&it.key);
2403 visitor.visit_binding_pattern(&it.value);
2404 visitor.leave_node(kind);
2405 }
2406
2407 #[inline]
2408 pub fn walk_array_pattern<'a, V: Visit<'a>>(visitor: &mut V, it: &ArrayPattern<'a>) {
2409 let kind = AstKind::ArrayPattern(visitor.alloc(it));
2410 visitor.enter_node(kind);
2411 visitor.visit_span(&it.span);
2412 for el in it.elements.iter().flatten() {
2413 visitor.visit_binding_pattern(el);
2414 }
2415 if let Some(rest) = &it.rest {
2416 visitor.visit_binding_rest_element(rest);
2417 }
2418 visitor.leave_node(kind);
2419 }
2420
2421 #[inline]
2422 pub fn walk_binding_rest_element<'a, V: Visit<'a>>(
2423 visitor: &mut V,
2424 it: &BindingRestElement<'a>,
2425 ) {
2426 let kind = AstKind::BindingRestElement(visitor.alloc(it));
2427 visitor.enter_node(kind);
2428 visitor.visit_span(&it.span);
2429 visitor.visit_binding_pattern(&it.argument);
2430 visitor.leave_node(kind);
2431 }
2432
2433 pub fn walk_function<'a, V: Visit<'a>>(visitor: &mut V, it: &Function<'a>, flags: ScopeFlags) {
2434 let kind = AstKind::Function(visitor.alloc(it));
2435 visitor.enter_node(kind);
2436 visitor.enter_scope(
2437 {
2438 let mut flags = flags;
2439 if it.has_use_strict_directive() {
2440 flags |= ScopeFlags::StrictMode;
2441 }
2442 flags
2443 },
2444 &it.scope_id,
2445 );
2446 visitor.visit_span(&it.span);
2447 if let Some(id) = &it.id {
2448 visitor.visit_binding_identifier(id);
2449 }
2450 if let Some(type_parameters) = &it.type_parameters {
2451 visitor.visit_ts_type_parameter_declaration(type_parameters);
2452 }
2453 if let Some(this_param) = &it.this_param {
2454 visitor.visit_ts_this_parameter(this_param);
2455 }
2456 visitor.visit_formal_parameters(&it.params);
2457 if let Some(return_type) = &it.return_type {
2458 visitor.visit_ts_type_annotation(return_type);
2459 }
2460 if let Some(body) = &it.body {
2461 visitor.visit_function_body(body);
2462 }
2463 visitor.leave_scope();
2464 visitor.leave_node(kind);
2465 }
2466
2467 #[inline]
2468 pub fn walk_formal_parameters<'a, V: Visit<'a>>(visitor: &mut V, it: &FormalParameters<'a>) {
2469 let kind = AstKind::FormalParameters(visitor.alloc(it));
2470 visitor.enter_node(kind);
2471 visitor.visit_span(&it.span);
2472 visitor.visit_formal_parameter_list(&it.items);
2473 if let Some(rest) = &it.rest {
2474 visitor.visit_binding_rest_element(rest);
2475 }
2476 visitor.leave_node(kind);
2477 }
2478
2479 #[inline]
2480 pub fn walk_formal_parameter<'a, V: Visit<'a>>(visitor: &mut V, it: &FormalParameter<'a>) {
2481 let kind = AstKind::FormalParameter(visitor.alloc(it));
2482 visitor.enter_node(kind);
2483 visitor.visit_span(&it.span);
2484 visitor.visit_decorators(&it.decorators);
2485 visitor.visit_binding_pattern(&it.pattern);
2486 visitor.leave_node(kind);
2487 }
2488
2489 #[inline]
2490 pub fn walk_function_body<'a, V: Visit<'a>>(visitor: &mut V, it: &FunctionBody<'a>) {
2491 let kind = AstKind::FunctionBody(visitor.alloc(it));
2492 visitor.enter_node(kind);
2493 visitor.visit_span(&it.span);
2494 visitor.visit_directives(&it.directives);
2495 visitor.visit_statements(&it.statements);
2496 visitor.leave_node(kind);
2497 }
2498
2499 #[inline]
2500 pub fn walk_arrow_function_expression<'a, V: Visit<'a>>(
2501 visitor: &mut V,
2502 it: &ArrowFunctionExpression<'a>,
2503 ) {
2504 let kind = AstKind::ArrowFunctionExpression(visitor.alloc(it));
2505 visitor.enter_node(kind);
2506 visitor.enter_scope(
2507 {
2508 let mut flags = ScopeFlags::Function | ScopeFlags::Arrow;
2509 if it.has_use_strict_directive() {
2510 flags |= ScopeFlags::StrictMode;
2511 }
2512 flags
2513 },
2514 &it.scope_id,
2515 );
2516 visitor.visit_span(&it.span);
2517 if let Some(type_parameters) = &it.type_parameters {
2518 visitor.visit_ts_type_parameter_declaration(type_parameters);
2519 }
2520 visitor.visit_formal_parameters(&it.params);
2521 if let Some(return_type) = &it.return_type {
2522 visitor.visit_ts_type_annotation(return_type);
2523 }
2524 visitor.visit_function_body(&it.body);
2525 visitor.leave_scope();
2526 visitor.leave_node(kind);
2527 }
2528
2529 #[inline]
2530 pub fn walk_yield_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &YieldExpression<'a>) {
2531 let kind = AstKind::YieldExpression(visitor.alloc(it));
2532 visitor.enter_node(kind);
2533 visitor.visit_span(&it.span);
2534 if let Some(argument) = &it.argument {
2535 visitor.visit_expression(argument);
2536 }
2537 visitor.leave_node(kind);
2538 }
2539
2540 pub fn walk_class<'a, V: Visit<'a>>(visitor: &mut V, it: &Class<'a>) {
2541 let kind = AstKind::Class(visitor.alloc(it));
2542 visitor.enter_node(kind);
2543 visitor.visit_span(&it.span);
2544 visitor.visit_decorators(&it.decorators);
2545 if let Some(id) = &it.id {
2546 visitor.visit_binding_identifier(id);
2547 }
2548 visitor.enter_scope(ScopeFlags::StrictMode, &it.scope_id);
2549 if let Some(type_parameters) = &it.type_parameters {
2550 visitor.visit_ts_type_parameter_declaration(type_parameters);
2551 }
2552 if let Some(super_class) = &it.super_class {
2553 visitor.visit_expression(super_class);
2554 }
2555 if let Some(super_type_arguments) = &it.super_type_arguments {
2556 visitor.visit_ts_type_parameter_instantiation(super_type_arguments);
2557 }
2558 visitor.visit_ts_class_implements_list(&it.implements);
2559 visitor.visit_class_body(&it.body);
2560 visitor.leave_scope();
2561 visitor.leave_node(kind);
2562 }
2563
2564 #[inline]
2565 pub fn walk_class_body<'a, V: Visit<'a>>(visitor: &mut V, it: &ClassBody<'a>) {
2566 let kind = AstKind::ClassBody(visitor.alloc(it));
2567 visitor.enter_node(kind);
2568 visitor.visit_span(&it.span);
2569 visitor.visit_class_elements(&it.body);
2570 visitor.leave_node(kind);
2571 }
2572
2573 #[inline]
2574 pub fn walk_class_element<'a, V: Visit<'a>>(visitor: &mut V, it: &ClassElement<'a>) {
2575 match it {
2577 ClassElement::StaticBlock(it) => visitor.visit_static_block(it),
2578 ClassElement::MethodDefinition(it) => visitor.visit_method_definition(it),
2579 ClassElement::PropertyDefinition(it) => visitor.visit_property_definition(it),
2580 ClassElement::AccessorProperty(it) => visitor.visit_accessor_property(it),
2581 ClassElement::TSIndexSignature(it) => visitor.visit_ts_index_signature(it),
2582 }
2583 }
2584
2585 #[inline]
2586 pub fn walk_method_definition<'a, V: Visit<'a>>(visitor: &mut V, it: &MethodDefinition<'a>) {
2587 let kind = AstKind::MethodDefinition(visitor.alloc(it));
2588 visitor.enter_node(kind);
2589 visitor.visit_span(&it.span);
2590 visitor.visit_decorators(&it.decorators);
2591 visitor.visit_property_key(&it.key);
2592 {
2593 let flags = match it.kind {
2594 MethodDefinitionKind::Get => ScopeFlags::Function | ScopeFlags::GetAccessor,
2595 MethodDefinitionKind::Set => ScopeFlags::Function | ScopeFlags::SetAccessor,
2596 MethodDefinitionKind::Constructor => ScopeFlags::Function | ScopeFlags::Constructor,
2597 MethodDefinitionKind::Method => ScopeFlags::Function,
2598 };
2599 visitor.visit_function(&it.value, flags);
2600 }
2601 visitor.leave_node(kind);
2602 }
2603
2604 #[inline]
2605 pub fn walk_property_definition<'a, V: Visit<'a>>(
2606 visitor: &mut V,
2607 it: &PropertyDefinition<'a>,
2608 ) {
2609 let kind = AstKind::PropertyDefinition(visitor.alloc(it));
2610 visitor.enter_node(kind);
2611 visitor.visit_span(&it.span);
2612 visitor.visit_decorators(&it.decorators);
2613 visitor.visit_property_key(&it.key);
2614 if let Some(type_annotation) = &it.type_annotation {
2615 visitor.visit_ts_type_annotation(type_annotation);
2616 }
2617 if let Some(value) = &it.value {
2618 visitor.visit_expression(value);
2619 }
2620 visitor.leave_node(kind);
2621 }
2622
2623 #[inline]
2624 pub fn walk_private_identifier<'a, V: Visit<'a>>(visitor: &mut V, it: &PrivateIdentifier<'a>) {
2625 let kind = AstKind::PrivateIdentifier(visitor.alloc(it));
2626 visitor.enter_node(kind);
2627 visitor.visit_span(&it.span);
2628 visitor.leave_node(kind);
2629 }
2630
2631 #[inline]
2632 pub fn walk_static_block<'a, V: Visit<'a>>(visitor: &mut V, it: &StaticBlock<'a>) {
2633 let kind = AstKind::StaticBlock(visitor.alloc(it));
2634 visitor.enter_node(kind);
2635 visitor.enter_scope(ScopeFlags::ClassStaticBlock, &it.scope_id);
2636 visitor.visit_span(&it.span);
2637 visitor.visit_statements(&it.body);
2638 visitor.leave_scope();
2639 visitor.leave_node(kind);
2640 }
2641
2642 pub fn walk_module_declaration<'a, V: Visit<'a>>(visitor: &mut V, it: &ModuleDeclaration<'a>) {
2643 match it {
2645 ModuleDeclaration::ImportDeclaration(it) => visitor.visit_import_declaration(it),
2646 ModuleDeclaration::ExportAllDeclaration(it) => visitor.visit_export_all_declaration(it),
2647 ModuleDeclaration::ExportDefaultDeclaration(it) => {
2648 visitor.visit_export_default_declaration(it)
2649 }
2650 ModuleDeclaration::ExportNamedDeclaration(it) => {
2651 visitor.visit_export_named_declaration(it)
2652 }
2653 ModuleDeclaration::TSExportAssignment(it) => visitor.visit_ts_export_assignment(it),
2654 ModuleDeclaration::TSNamespaceExportDeclaration(it) => {
2655 visitor.visit_ts_namespace_export_declaration(it)
2656 }
2657 }
2658 }
2659
2660 #[inline]
2661 pub fn walk_accessor_property<'a, V: Visit<'a>>(visitor: &mut V, it: &AccessorProperty<'a>) {
2662 let kind = AstKind::AccessorProperty(visitor.alloc(it));
2663 visitor.enter_node(kind);
2664 visitor.visit_span(&it.span);
2665 visitor.visit_decorators(&it.decorators);
2666 visitor.visit_property_key(&it.key);
2667 if let Some(type_annotation) = &it.type_annotation {
2668 visitor.visit_ts_type_annotation(type_annotation);
2669 }
2670 if let Some(value) = &it.value {
2671 visitor.visit_expression(value);
2672 }
2673 visitor.leave_node(kind);
2674 }
2675
2676 #[inline]
2677 pub fn walk_import_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &ImportExpression<'a>) {
2678 let kind = AstKind::ImportExpression(visitor.alloc(it));
2679 visitor.enter_node(kind);
2680 visitor.visit_span(&it.span);
2681 visitor.visit_expression(&it.source);
2682 if let Some(options) = &it.options {
2683 visitor.visit_expression(options);
2684 }
2685 visitor.leave_node(kind);
2686 }
2687
2688 #[inline]
2689 pub fn walk_import_declaration<'a, V: Visit<'a>>(visitor: &mut V, it: &ImportDeclaration<'a>) {
2690 let kind = AstKind::ImportDeclaration(visitor.alloc(it));
2691 visitor.enter_node(kind);
2692 visitor.visit_span(&it.span);
2693 if let Some(specifiers) = &it.specifiers {
2694 visitor.visit_import_declaration_specifiers(specifiers);
2695 }
2696 visitor.visit_string_literal(&it.source);
2697 if let Some(with_clause) = &it.with_clause {
2698 visitor.visit_with_clause(with_clause);
2699 }
2700 visitor.leave_node(kind);
2701 }
2702
2703 #[inline]
2704 pub fn walk_import_declaration_specifier<'a, V: Visit<'a>>(
2705 visitor: &mut V,
2706 it: &ImportDeclarationSpecifier<'a>,
2707 ) {
2708 match it {
2710 ImportDeclarationSpecifier::ImportSpecifier(it) => visitor.visit_import_specifier(it),
2711 ImportDeclarationSpecifier::ImportDefaultSpecifier(it) => {
2712 visitor.visit_import_default_specifier(it)
2713 }
2714 ImportDeclarationSpecifier::ImportNamespaceSpecifier(it) => {
2715 visitor.visit_import_namespace_specifier(it)
2716 }
2717 }
2718 }
2719
2720 #[inline]
2721 pub fn walk_import_specifier<'a, V: Visit<'a>>(visitor: &mut V, it: &ImportSpecifier<'a>) {
2722 let kind = AstKind::ImportSpecifier(visitor.alloc(it));
2723 visitor.enter_node(kind);
2724 visitor.visit_span(&it.span);
2725 visitor.visit_module_export_name(&it.imported);
2726 visitor.visit_binding_identifier(&it.local);
2727 visitor.leave_node(kind);
2728 }
2729
2730 #[inline]
2731 pub fn walk_import_default_specifier<'a, V: Visit<'a>>(
2732 visitor: &mut V,
2733 it: &ImportDefaultSpecifier<'a>,
2734 ) {
2735 let kind = AstKind::ImportDefaultSpecifier(visitor.alloc(it));
2736 visitor.enter_node(kind);
2737 visitor.visit_span(&it.span);
2738 visitor.visit_binding_identifier(&it.local);
2739 visitor.leave_node(kind);
2740 }
2741
2742 #[inline]
2743 pub fn walk_import_namespace_specifier<'a, V: Visit<'a>>(
2744 visitor: &mut V,
2745 it: &ImportNamespaceSpecifier<'a>,
2746 ) {
2747 let kind = AstKind::ImportNamespaceSpecifier(visitor.alloc(it));
2748 visitor.enter_node(kind);
2749 visitor.visit_span(&it.span);
2750 visitor.visit_binding_identifier(&it.local);
2751 visitor.leave_node(kind);
2752 }
2753
2754 #[inline]
2755 pub fn walk_with_clause<'a, V: Visit<'a>>(visitor: &mut V, it: &WithClause<'a>) {
2756 let kind = AstKind::WithClause(visitor.alloc(it));
2757 visitor.enter_node(kind);
2758 visitor.visit_span(&it.span);
2759 visitor.visit_import_attributes(&it.with_entries);
2760 visitor.leave_node(kind);
2761 }
2762
2763 #[inline]
2764 pub fn walk_import_attribute<'a, V: Visit<'a>>(visitor: &mut V, it: &ImportAttribute<'a>) {
2765 let kind = AstKind::ImportAttribute(visitor.alloc(it));
2766 visitor.enter_node(kind);
2767 visitor.visit_span(&it.span);
2768 visitor.visit_import_attribute_key(&it.key);
2769 visitor.visit_string_literal(&it.value);
2770 visitor.leave_node(kind);
2771 }
2772
2773 #[inline]
2774 pub fn walk_import_attribute_key<'a, V: Visit<'a>>(
2775 visitor: &mut V,
2776 it: &ImportAttributeKey<'a>,
2777 ) {
2778 match it {
2780 ImportAttributeKey::Identifier(it) => visitor.visit_identifier_name(it),
2781 ImportAttributeKey::StringLiteral(it) => visitor.visit_string_literal(it),
2782 }
2783 }
2784
2785 #[inline]
2786 pub fn walk_export_named_declaration<'a, V: Visit<'a>>(
2787 visitor: &mut V,
2788 it: &ExportNamedDeclaration<'a>,
2789 ) {
2790 let kind = AstKind::ExportNamedDeclaration(visitor.alloc(it));
2791 visitor.enter_node(kind);
2792 visitor.visit_span(&it.span);
2793 if let Some(declaration) = &it.declaration {
2794 visitor.visit_declaration(declaration);
2795 }
2796 visitor.visit_export_specifiers(&it.specifiers);
2797 if let Some(source) = &it.source {
2798 visitor.visit_string_literal(source);
2799 }
2800 if let Some(with_clause) = &it.with_clause {
2801 visitor.visit_with_clause(with_clause);
2802 }
2803 visitor.leave_node(kind);
2804 }
2805
2806 #[inline]
2807 pub fn walk_export_default_declaration<'a, V: Visit<'a>>(
2808 visitor: &mut V,
2809 it: &ExportDefaultDeclaration<'a>,
2810 ) {
2811 let kind = AstKind::ExportDefaultDeclaration(visitor.alloc(it));
2812 visitor.enter_node(kind);
2813 visitor.visit_span(&it.span);
2814 visitor.visit_export_default_declaration_kind(&it.declaration);
2815 visitor.leave_node(kind);
2816 }
2817
2818 #[inline]
2819 pub fn walk_export_all_declaration<'a, V: Visit<'a>>(
2820 visitor: &mut V,
2821 it: &ExportAllDeclaration<'a>,
2822 ) {
2823 let kind = AstKind::ExportAllDeclaration(visitor.alloc(it));
2824 visitor.enter_node(kind);
2825 visitor.visit_span(&it.span);
2826 if let Some(exported) = &it.exported {
2827 visitor.visit_module_export_name(exported);
2828 }
2829 visitor.visit_string_literal(&it.source);
2830 if let Some(with_clause) = &it.with_clause {
2831 visitor.visit_with_clause(with_clause);
2832 }
2833 visitor.leave_node(kind);
2834 }
2835
2836 #[inline]
2837 pub fn walk_export_specifier<'a, V: Visit<'a>>(visitor: &mut V, it: &ExportSpecifier<'a>) {
2838 let kind = AstKind::ExportSpecifier(visitor.alloc(it));
2839 visitor.enter_node(kind);
2840 visitor.visit_span(&it.span);
2841 visitor.visit_module_export_name(&it.local);
2842 visitor.visit_module_export_name(&it.exported);
2843 visitor.leave_node(kind);
2844 }
2845
2846 #[inline]
2847 pub fn walk_export_default_declaration_kind<'a, V: Visit<'a>>(
2848 visitor: &mut V,
2849 it: &ExportDefaultDeclarationKind<'a>,
2850 ) {
2851 match it {
2853 ExportDefaultDeclarationKind::FunctionDeclaration(it) => {
2854 let flags = ScopeFlags::Function;
2855 visitor.visit_function(it, flags)
2856 }
2857 ExportDefaultDeclarationKind::ClassDeclaration(it) => visitor.visit_class(it),
2858 ExportDefaultDeclarationKind::TSInterfaceDeclaration(it) => {
2859 visitor.visit_ts_interface_declaration(it)
2860 }
2861 match_expression!(ExportDefaultDeclarationKind) => {
2862 visitor.visit_expression(it.to_expression())
2863 }
2864 }
2865 }
2866
2867 #[inline]
2868 pub fn walk_module_export_name<'a, V: Visit<'a>>(visitor: &mut V, it: &ModuleExportName<'a>) {
2869 match it {
2871 ModuleExportName::IdentifierName(it) => visitor.visit_identifier_name(it),
2872 ModuleExportName::IdentifierReference(it) => visitor.visit_identifier_reference(it),
2873 ModuleExportName::StringLiteral(it) => visitor.visit_string_literal(it),
2874 }
2875 }
2876
2877 #[inline]
2878 pub fn walk_v_8_intrinsic_expression<'a, V: Visit<'a>>(
2879 visitor: &mut V,
2880 it: &V8IntrinsicExpression<'a>,
2881 ) {
2882 let kind = AstKind::V8IntrinsicExpression(visitor.alloc(it));
2883 visitor.enter_node(kind);
2884 visitor.visit_span(&it.span);
2885 visitor.visit_identifier_name(&it.name);
2886 visitor.visit_arguments(&it.arguments);
2887 visitor.leave_node(kind);
2888 }
2889
2890 #[inline]
2891 pub fn walk_boolean_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &BooleanLiteral) {
2892 let kind = AstKind::BooleanLiteral(visitor.alloc(it));
2893 visitor.enter_node(kind);
2894 visitor.visit_span(&it.span);
2895 visitor.leave_node(kind);
2896 }
2897
2898 #[inline]
2899 pub fn walk_null_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &NullLiteral) {
2900 let kind = AstKind::NullLiteral(visitor.alloc(it));
2901 visitor.enter_node(kind);
2902 visitor.visit_span(&it.span);
2903 visitor.leave_node(kind);
2904 }
2905
2906 #[inline]
2907 pub fn walk_numeric_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &NumericLiteral<'a>) {
2908 let kind = AstKind::NumericLiteral(visitor.alloc(it));
2909 visitor.enter_node(kind);
2910 visitor.visit_span(&it.span);
2911 visitor.leave_node(kind);
2912 }
2913
2914 #[inline]
2915 pub fn walk_string_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &StringLiteral<'a>) {
2916 let kind = AstKind::StringLiteral(visitor.alloc(it));
2917 visitor.enter_node(kind);
2918 visitor.visit_span(&it.span);
2919 visitor.leave_node(kind);
2920 }
2921
2922 #[inline]
2923 pub fn walk_big_int_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &BigIntLiteral<'a>) {
2924 let kind = AstKind::BigIntLiteral(visitor.alloc(it));
2925 visitor.enter_node(kind);
2926 visitor.visit_span(&it.span);
2927 visitor.leave_node(kind);
2928 }
2929
2930 #[inline]
2931 pub fn walk_reg_exp_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &RegExpLiteral<'a>) {
2932 let kind = AstKind::RegExpLiteral(visitor.alloc(it));
2933 visitor.enter_node(kind);
2934 visitor.visit_span(&it.span);
2935 visitor.leave_node(kind);
2936 }
2937
2938 #[inline]
2939 pub fn walk_jsx_element<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXElement<'a>) {
2940 let kind = AstKind::JSXElement(visitor.alloc(it));
2941 visitor.enter_node(kind);
2942 visitor.visit_span(&it.span);
2943 visitor.visit_jsx_opening_element(&it.opening_element);
2944 visitor.visit_jsx_children(&it.children);
2945 if let Some(closing_element) = &it.closing_element {
2946 visitor.visit_jsx_closing_element(closing_element);
2947 }
2948 visitor.leave_node(kind);
2949 }
2950
2951 #[inline]
2952 pub fn walk_jsx_opening_element<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXOpeningElement<'a>) {
2953 let kind = AstKind::JSXOpeningElement(visitor.alloc(it));
2954 visitor.enter_node(kind);
2955 visitor.visit_span(&it.span);
2956 visitor.visit_jsx_element_name(&it.name);
2957 if let Some(type_arguments) = &it.type_arguments {
2958 visitor.visit_ts_type_parameter_instantiation(type_arguments);
2959 }
2960 visitor.visit_jsx_attribute_items(&it.attributes);
2961 visitor.leave_node(kind);
2962 }
2963
2964 #[inline]
2965 pub fn walk_jsx_closing_element<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXClosingElement<'a>) {
2966 let kind = AstKind::JSXClosingElement(visitor.alloc(it));
2967 visitor.enter_node(kind);
2968 visitor.visit_span(&it.span);
2969 visitor.visit_jsx_element_name(&it.name);
2970 visitor.leave_node(kind);
2971 }
2972
2973 #[inline]
2974 pub fn walk_jsx_fragment<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXFragment<'a>) {
2975 let kind = AstKind::JSXFragment(visitor.alloc(it));
2976 visitor.enter_node(kind);
2977 visitor.visit_span(&it.span);
2978 visitor.visit_jsx_opening_fragment(&it.opening_fragment);
2979 visitor.visit_jsx_children(&it.children);
2980 visitor.visit_jsx_closing_fragment(&it.closing_fragment);
2981 visitor.leave_node(kind);
2982 }
2983
2984 #[inline]
2985 pub fn walk_jsx_opening_fragment<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXOpeningFragment) {
2986 let kind = AstKind::JSXOpeningFragment(visitor.alloc(it));
2987 visitor.enter_node(kind);
2988 visitor.visit_span(&it.span);
2989 visitor.leave_node(kind);
2990 }
2991
2992 #[inline]
2993 pub fn walk_jsx_closing_fragment<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXClosingFragment) {
2994 let kind = AstKind::JSXClosingFragment(visitor.alloc(it));
2995 visitor.enter_node(kind);
2996 visitor.visit_span(&it.span);
2997 visitor.leave_node(kind);
2998 }
2999
3000 #[inline]
3001 pub fn walk_jsx_element_name<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXElementName<'a>) {
3002 match it {
3004 JSXElementName::Identifier(it) => visitor.visit_jsx_identifier(it),
3005 JSXElementName::IdentifierReference(it) => visitor.visit_identifier_reference(it),
3006 JSXElementName::NamespacedName(it) => visitor.visit_jsx_namespaced_name(it),
3007 JSXElementName::MemberExpression(it) => visitor.visit_jsx_member_expression(it),
3008 JSXElementName::ThisExpression(it) => visitor.visit_this_expression(it),
3009 }
3010 }
3011
3012 #[inline]
3013 pub fn walk_jsx_namespaced_name<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXNamespacedName<'a>) {
3014 let kind = AstKind::JSXNamespacedName(visitor.alloc(it));
3015 visitor.enter_node(kind);
3016 visitor.visit_span(&it.span);
3017 visitor.visit_jsx_identifier(&it.namespace);
3018 visitor.visit_jsx_identifier(&it.name);
3019 visitor.leave_node(kind);
3020 }
3021
3022 #[inline]
3023 pub fn walk_jsx_member_expression<'a, V: Visit<'a>>(
3024 visitor: &mut V,
3025 it: &JSXMemberExpression<'a>,
3026 ) {
3027 let kind = AstKind::JSXMemberExpression(visitor.alloc(it));
3028 visitor.enter_node(kind);
3029 visitor.visit_span(&it.span);
3030 visitor.visit_jsx_member_expression_object(&it.object);
3031 visitor.visit_jsx_identifier(&it.property);
3032 visitor.leave_node(kind);
3033 }
3034
3035 #[inline]
3036 pub fn walk_jsx_member_expression_object<'a, V: Visit<'a>>(
3037 visitor: &mut V,
3038 it: &JSXMemberExpressionObject<'a>,
3039 ) {
3040 match it {
3042 JSXMemberExpressionObject::IdentifierReference(it) => {
3043 visitor.visit_identifier_reference(it)
3044 }
3045 JSXMemberExpressionObject::MemberExpression(it) => {
3046 visitor.visit_jsx_member_expression(it)
3047 }
3048 JSXMemberExpressionObject::ThisExpression(it) => visitor.visit_this_expression(it),
3049 }
3050 }
3051
3052 #[inline]
3053 pub fn walk_jsx_expression_container<'a, V: Visit<'a>>(
3054 visitor: &mut V,
3055 it: &JSXExpressionContainer<'a>,
3056 ) {
3057 let kind = AstKind::JSXExpressionContainer(visitor.alloc(it));
3058 visitor.enter_node(kind);
3059 visitor.visit_span(&it.span);
3060 visitor.visit_jsx_expression(&it.expression);
3061 visitor.leave_node(kind);
3062 }
3063
3064 #[inline]
3065 pub fn walk_jsx_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXExpression<'a>) {
3066 match it {
3068 JSXExpression::EmptyExpression(it) => visitor.visit_jsx_empty_expression(it),
3069 match_expression!(JSXExpression) => visitor.visit_expression(it.to_expression()),
3070 }
3071 }
3072
3073 #[inline]
3074 pub fn walk_jsx_empty_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXEmptyExpression) {
3075 let kind = AstKind::JSXEmptyExpression(visitor.alloc(it));
3076 visitor.enter_node(kind);
3077 visitor.visit_span(&it.span);
3078 visitor.leave_node(kind);
3079 }
3080
3081 #[inline]
3082 pub fn walk_jsx_attribute_item<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXAttributeItem<'a>) {
3083 match it {
3085 JSXAttributeItem::Attribute(it) => visitor.visit_jsx_attribute(it),
3086 JSXAttributeItem::SpreadAttribute(it) => visitor.visit_jsx_spread_attribute(it),
3087 }
3088 }
3089
3090 #[inline]
3091 pub fn walk_jsx_attribute<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXAttribute<'a>) {
3092 let kind = AstKind::JSXAttribute(visitor.alloc(it));
3093 visitor.enter_node(kind);
3094 visitor.visit_span(&it.span);
3095 visitor.visit_jsx_attribute_name(&it.name);
3096 if let Some(value) = &it.value {
3097 visitor.visit_jsx_attribute_value(value);
3098 }
3099 visitor.leave_node(kind);
3100 }
3101
3102 #[inline]
3103 pub fn walk_jsx_spread_attribute<'a, V: Visit<'a>>(
3104 visitor: &mut V,
3105 it: &JSXSpreadAttribute<'a>,
3106 ) {
3107 let kind = AstKind::JSXSpreadAttribute(visitor.alloc(it));
3108 visitor.enter_node(kind);
3109 visitor.visit_span(&it.span);
3110 visitor.visit_expression(&it.argument);
3111 visitor.leave_node(kind);
3112 }
3113
3114 #[inline]
3115 pub fn walk_jsx_attribute_name<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXAttributeName<'a>) {
3116 match it {
3118 JSXAttributeName::Identifier(it) => visitor.visit_jsx_identifier(it),
3119 JSXAttributeName::NamespacedName(it) => visitor.visit_jsx_namespaced_name(it),
3120 }
3121 }
3122
3123 #[inline]
3124 pub fn walk_jsx_attribute_value<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXAttributeValue<'a>) {
3125 match it {
3127 JSXAttributeValue::StringLiteral(it) => visitor.visit_string_literal(it),
3128 JSXAttributeValue::ExpressionContainer(it) => {
3129 visitor.visit_jsx_expression_container(it)
3130 }
3131 JSXAttributeValue::Element(it) => visitor.visit_jsx_element(it),
3132 JSXAttributeValue::Fragment(it) => visitor.visit_jsx_fragment(it),
3133 }
3134 }
3135
3136 #[inline]
3137 pub fn walk_jsx_identifier<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXIdentifier<'a>) {
3138 let kind = AstKind::JSXIdentifier(visitor.alloc(it));
3139 visitor.enter_node(kind);
3140 visitor.visit_span(&it.span);
3141 visitor.leave_node(kind);
3142 }
3143
3144 #[inline]
3145 pub fn walk_jsx_child<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXChild<'a>) {
3146 match it {
3148 JSXChild::Text(it) => visitor.visit_jsx_text(it),
3149 JSXChild::Element(it) => visitor.visit_jsx_element(it),
3150 JSXChild::Fragment(it) => visitor.visit_jsx_fragment(it),
3151 JSXChild::ExpressionContainer(it) => visitor.visit_jsx_expression_container(it),
3152 JSXChild::Spread(it) => visitor.visit_jsx_spread_child(it),
3153 }
3154 }
3155
3156 #[inline]
3157 pub fn walk_jsx_spread_child<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXSpreadChild<'a>) {
3158 let kind = AstKind::JSXSpreadChild(visitor.alloc(it));
3159 visitor.enter_node(kind);
3160 visitor.visit_span(&it.span);
3161 visitor.visit_expression(&it.expression);
3162 visitor.leave_node(kind);
3163 }
3164
3165 #[inline]
3166 pub fn walk_jsx_text<'a, V: Visit<'a>>(visitor: &mut V, it: &JSXText<'a>) {
3167 let kind = AstKind::JSXText(visitor.alloc(it));
3168 visitor.enter_node(kind);
3169 visitor.visit_span(&it.span);
3170 visitor.leave_node(kind);
3171 }
3172
3173 #[inline]
3174 pub fn walk_ts_this_parameter<'a, V: Visit<'a>>(visitor: &mut V, it: &TSThisParameter<'a>) {
3175 let kind = AstKind::TSThisParameter(visitor.alloc(it));
3176 visitor.enter_node(kind);
3177 visitor.visit_span(&it.span);
3178 visitor.visit_span(&it.this_span);
3179 if let Some(type_annotation) = &it.type_annotation {
3180 visitor.visit_ts_type_annotation(type_annotation);
3181 }
3182 visitor.leave_node(kind);
3183 }
3184
3185 #[inline]
3186 pub fn walk_ts_enum_declaration<'a, V: Visit<'a>>(visitor: &mut V, it: &TSEnumDeclaration<'a>) {
3187 let kind = AstKind::TSEnumDeclaration(visitor.alloc(it));
3188 visitor.enter_node(kind);
3189 visitor.visit_span(&it.span);
3190 visitor.visit_binding_identifier(&it.id);
3191 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3192 visitor.visit_ts_enum_body(&it.body);
3193 visitor.leave_scope();
3194 visitor.leave_node(kind);
3195 }
3196
3197 #[inline]
3198 pub fn walk_ts_enum_body<'a, V: Visit<'a>>(visitor: &mut V, it: &TSEnumBody<'a>) {
3199 let kind = AstKind::TSEnumBody(visitor.alloc(it));
3200 visitor.enter_node(kind);
3201 visitor.visit_span(&it.span);
3202 visitor.visit_ts_enum_members(&it.members);
3203 visitor.leave_node(kind);
3204 }
3205
3206 #[inline]
3207 pub fn walk_ts_enum_member<'a, V: Visit<'a>>(visitor: &mut V, it: &TSEnumMember<'a>) {
3208 let kind = AstKind::TSEnumMember(visitor.alloc(it));
3209 visitor.enter_node(kind);
3210 visitor.visit_span(&it.span);
3211 visitor.visit_ts_enum_member_name(&it.id);
3212 if let Some(initializer) = &it.initializer {
3213 visitor.visit_expression(initializer);
3214 }
3215 visitor.leave_node(kind);
3216 }
3217
3218 #[inline]
3219 pub fn walk_ts_enum_member_name<'a, V: Visit<'a>>(visitor: &mut V, it: &TSEnumMemberName<'a>) {
3220 match it {
3222 TSEnumMemberName::Identifier(it) => visitor.visit_identifier_name(it),
3223 TSEnumMemberName::String(it) => visitor.visit_string_literal(it),
3224 TSEnumMemberName::ComputedString(it) => visitor.visit_string_literal(it),
3225 TSEnumMemberName::ComputedTemplateString(it) => visitor.visit_template_literal(it),
3226 }
3227 }
3228
3229 #[inline]
3230 pub fn walk_ts_type_annotation<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeAnnotation<'a>) {
3231 let kind = AstKind::TSTypeAnnotation(visitor.alloc(it));
3232 visitor.enter_node(kind);
3233 visitor.visit_span(&it.span);
3234 visitor.visit_ts_type(&it.type_annotation);
3235 visitor.leave_node(kind);
3236 }
3237
3238 #[inline]
3239 pub fn walk_ts_literal_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSLiteralType<'a>) {
3240 let kind = AstKind::TSLiteralType(visitor.alloc(it));
3241 visitor.enter_node(kind);
3242 visitor.visit_span(&it.span);
3243 visitor.visit_ts_literal(&it.literal);
3244 visitor.leave_node(kind);
3245 }
3246
3247 pub fn walk_ts_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &TSLiteral<'a>) {
3248 match it {
3250 TSLiteral::BooleanLiteral(it) => visitor.visit_boolean_literal(it),
3251 TSLiteral::NumericLiteral(it) => visitor.visit_numeric_literal(it),
3252 TSLiteral::BigIntLiteral(it) => visitor.visit_big_int_literal(it),
3253 TSLiteral::StringLiteral(it) => visitor.visit_string_literal(it),
3254 TSLiteral::TemplateLiteral(it) => visitor.visit_template_literal(it),
3255 TSLiteral::UnaryExpression(it) => visitor.visit_unary_expression(it),
3256 }
3257 }
3258
3259 pub fn walk_ts_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSType<'a>) {
3260 match it {
3262 TSType::TSAnyKeyword(it) => visitor.visit_ts_any_keyword(it),
3263 TSType::TSBigIntKeyword(it) => visitor.visit_ts_big_int_keyword(it),
3264 TSType::TSBooleanKeyword(it) => visitor.visit_ts_boolean_keyword(it),
3265 TSType::TSIntrinsicKeyword(it) => visitor.visit_ts_intrinsic_keyword(it),
3266 TSType::TSNeverKeyword(it) => visitor.visit_ts_never_keyword(it),
3267 TSType::TSNullKeyword(it) => visitor.visit_ts_null_keyword(it),
3268 TSType::TSNumberKeyword(it) => visitor.visit_ts_number_keyword(it),
3269 TSType::TSObjectKeyword(it) => visitor.visit_ts_object_keyword(it),
3270 TSType::TSStringKeyword(it) => visitor.visit_ts_string_keyword(it),
3271 TSType::TSSymbolKeyword(it) => visitor.visit_ts_symbol_keyword(it),
3272 TSType::TSUndefinedKeyword(it) => visitor.visit_ts_undefined_keyword(it),
3273 TSType::TSUnknownKeyword(it) => visitor.visit_ts_unknown_keyword(it),
3274 TSType::TSVoidKeyword(it) => visitor.visit_ts_void_keyword(it),
3275 TSType::TSArrayType(it) => visitor.visit_ts_array_type(it),
3276 TSType::TSConditionalType(it) => visitor.visit_ts_conditional_type(it),
3277 TSType::TSConstructorType(it) => visitor.visit_ts_constructor_type(it),
3278 TSType::TSFunctionType(it) => visitor.visit_ts_function_type(it),
3279 TSType::TSImportType(it) => visitor.visit_ts_import_type(it),
3280 TSType::TSIndexedAccessType(it) => visitor.visit_ts_indexed_access_type(it),
3281 TSType::TSInferType(it) => visitor.visit_ts_infer_type(it),
3282 TSType::TSIntersectionType(it) => visitor.visit_ts_intersection_type(it),
3283 TSType::TSLiteralType(it) => visitor.visit_ts_literal_type(it),
3284 TSType::TSMappedType(it) => visitor.visit_ts_mapped_type(it),
3285 TSType::TSNamedTupleMember(it) => visitor.visit_ts_named_tuple_member(it),
3286 TSType::TSTemplateLiteralType(it) => visitor.visit_ts_template_literal_type(it),
3287 TSType::TSThisType(it) => visitor.visit_ts_this_type(it),
3288 TSType::TSTupleType(it) => visitor.visit_ts_tuple_type(it),
3289 TSType::TSTypeLiteral(it) => visitor.visit_ts_type_literal(it),
3290 TSType::TSTypeOperatorType(it) => visitor.visit_ts_type_operator(it),
3291 TSType::TSTypePredicate(it) => visitor.visit_ts_type_predicate(it),
3292 TSType::TSTypeQuery(it) => visitor.visit_ts_type_query(it),
3293 TSType::TSTypeReference(it) => visitor.visit_ts_type_reference(it),
3294 TSType::TSUnionType(it) => visitor.visit_ts_union_type(it),
3295 TSType::TSParenthesizedType(it) => visitor.visit_ts_parenthesized_type(it),
3296 TSType::JSDocNullableType(it) => visitor.visit_js_doc_nullable_type(it),
3297 TSType::JSDocNonNullableType(it) => visitor.visit_js_doc_non_nullable_type(it),
3298 TSType::JSDocUnknownType(it) => visitor.visit_js_doc_unknown_type(it),
3299 }
3300 }
3301
3302 #[inline]
3303 pub fn walk_ts_conditional_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSConditionalType<'a>) {
3304 let kind = AstKind::TSConditionalType(visitor.alloc(it));
3305 visitor.enter_node(kind);
3306 visitor.visit_span(&it.span);
3307 visitor.visit_ts_type(&it.check_type);
3308 visitor.enter_scope(ScopeFlags::TsConditional, &it.scope_id);
3309 visitor.visit_ts_type(&it.extends_type);
3310 visitor.visit_ts_type(&it.true_type);
3311 visitor.leave_scope();
3312 visitor.visit_ts_type(&it.false_type);
3313 visitor.leave_node(kind);
3314 }
3315
3316 #[inline]
3317 pub fn walk_ts_union_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSUnionType<'a>) {
3318 let kind = AstKind::TSUnionType(visitor.alloc(it));
3319 visitor.enter_node(kind);
3320 visitor.visit_span(&it.span);
3321 visitor.visit_ts_types(&it.types);
3322 visitor.leave_node(kind);
3323 }
3324
3325 #[inline]
3326 pub fn walk_ts_intersection_type<'a, V: Visit<'a>>(
3327 visitor: &mut V,
3328 it: &TSIntersectionType<'a>,
3329 ) {
3330 let kind = AstKind::TSIntersectionType(visitor.alloc(it));
3331 visitor.enter_node(kind);
3332 visitor.visit_span(&it.span);
3333 visitor.visit_ts_types(&it.types);
3334 visitor.leave_node(kind);
3335 }
3336
3337 #[inline]
3338 pub fn walk_ts_parenthesized_type<'a, V: Visit<'a>>(
3339 visitor: &mut V,
3340 it: &TSParenthesizedType<'a>,
3341 ) {
3342 let kind = AstKind::TSParenthesizedType(visitor.alloc(it));
3343 visitor.enter_node(kind);
3344 visitor.visit_span(&it.span);
3345 visitor.visit_ts_type(&it.type_annotation);
3346 visitor.leave_node(kind);
3347 }
3348
3349 #[inline]
3350 pub fn walk_ts_type_operator<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeOperator<'a>) {
3351 let kind = AstKind::TSTypeOperator(visitor.alloc(it));
3352 visitor.enter_node(kind);
3353 visitor.visit_span(&it.span);
3354 visitor.visit_ts_type(&it.type_annotation);
3355 visitor.leave_node(kind);
3356 }
3357
3358 #[inline]
3359 pub fn walk_ts_array_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSArrayType<'a>) {
3360 let kind = AstKind::TSArrayType(visitor.alloc(it));
3361 visitor.enter_node(kind);
3362 visitor.visit_span(&it.span);
3363 visitor.visit_ts_type(&it.element_type);
3364 visitor.leave_node(kind);
3365 }
3366
3367 #[inline]
3368 pub fn walk_ts_indexed_access_type<'a, V: Visit<'a>>(
3369 visitor: &mut V,
3370 it: &TSIndexedAccessType<'a>,
3371 ) {
3372 let kind = AstKind::TSIndexedAccessType(visitor.alloc(it));
3373 visitor.enter_node(kind);
3374 visitor.visit_span(&it.span);
3375 visitor.visit_ts_type(&it.object_type);
3376 visitor.visit_ts_type(&it.index_type);
3377 visitor.leave_node(kind);
3378 }
3379
3380 #[inline]
3381 pub fn walk_ts_tuple_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTupleType<'a>) {
3382 let kind = AstKind::TSTupleType(visitor.alloc(it));
3383 visitor.enter_node(kind);
3384 visitor.visit_span(&it.span);
3385 visitor.visit_ts_tuple_elements(&it.element_types);
3386 visitor.leave_node(kind);
3387 }
3388
3389 #[inline]
3390 pub fn walk_ts_named_tuple_member<'a, V: Visit<'a>>(
3391 visitor: &mut V,
3392 it: &TSNamedTupleMember<'a>,
3393 ) {
3394 let kind = AstKind::TSNamedTupleMember(visitor.alloc(it));
3395 visitor.enter_node(kind);
3396 visitor.visit_span(&it.span);
3397 visitor.visit_identifier_name(&it.label);
3398 visitor.visit_ts_tuple_element(&it.element_type);
3399 visitor.leave_node(kind);
3400 }
3401
3402 #[inline]
3403 pub fn walk_ts_optional_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSOptionalType<'a>) {
3404 let kind = AstKind::TSOptionalType(visitor.alloc(it));
3405 visitor.enter_node(kind);
3406 visitor.visit_span(&it.span);
3407 visitor.visit_ts_type(&it.type_annotation);
3408 visitor.leave_node(kind);
3409 }
3410
3411 #[inline]
3412 pub fn walk_ts_rest_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSRestType<'a>) {
3413 let kind = AstKind::TSRestType(visitor.alloc(it));
3414 visitor.enter_node(kind);
3415 visitor.visit_span(&it.span);
3416 visitor.visit_ts_type(&it.type_annotation);
3417 visitor.leave_node(kind);
3418 }
3419
3420 #[inline]
3421 pub fn walk_ts_tuple_element<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTupleElement<'a>) {
3422 match it {
3424 TSTupleElement::TSOptionalType(it) => visitor.visit_ts_optional_type(it),
3425 TSTupleElement::TSRestType(it) => visitor.visit_ts_rest_type(it),
3426 match_ts_type!(TSTupleElement) => visitor.visit_ts_type(it.to_ts_type()),
3427 }
3428 }
3429
3430 #[inline]
3431 pub fn walk_ts_any_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSAnyKeyword) {
3432 let kind = AstKind::TSAnyKeyword(visitor.alloc(it));
3433 visitor.enter_node(kind);
3434 visitor.visit_span(&it.span);
3435 visitor.leave_node(kind);
3436 }
3437
3438 #[inline]
3439 pub fn walk_ts_string_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSStringKeyword) {
3440 let kind = AstKind::TSStringKeyword(visitor.alloc(it));
3441 visitor.enter_node(kind);
3442 visitor.visit_span(&it.span);
3443 visitor.leave_node(kind);
3444 }
3445
3446 #[inline]
3447 pub fn walk_ts_boolean_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSBooleanKeyword) {
3448 let kind = AstKind::TSBooleanKeyword(visitor.alloc(it));
3449 visitor.enter_node(kind);
3450 visitor.visit_span(&it.span);
3451 visitor.leave_node(kind);
3452 }
3453
3454 #[inline]
3455 pub fn walk_ts_number_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSNumberKeyword) {
3456 let kind = AstKind::TSNumberKeyword(visitor.alloc(it));
3457 visitor.enter_node(kind);
3458 visitor.visit_span(&it.span);
3459 visitor.leave_node(kind);
3460 }
3461
3462 #[inline]
3463 pub fn walk_ts_never_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSNeverKeyword) {
3464 let kind = AstKind::TSNeverKeyword(visitor.alloc(it));
3465 visitor.enter_node(kind);
3466 visitor.visit_span(&it.span);
3467 visitor.leave_node(kind);
3468 }
3469
3470 #[inline]
3471 pub fn walk_ts_intrinsic_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSIntrinsicKeyword) {
3472 let kind = AstKind::TSIntrinsicKeyword(visitor.alloc(it));
3473 visitor.enter_node(kind);
3474 visitor.visit_span(&it.span);
3475 visitor.leave_node(kind);
3476 }
3477
3478 #[inline]
3479 pub fn walk_ts_unknown_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSUnknownKeyword) {
3480 let kind = AstKind::TSUnknownKeyword(visitor.alloc(it));
3481 visitor.enter_node(kind);
3482 visitor.visit_span(&it.span);
3483 visitor.leave_node(kind);
3484 }
3485
3486 #[inline]
3487 pub fn walk_ts_null_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSNullKeyword) {
3488 let kind = AstKind::TSNullKeyword(visitor.alloc(it));
3489 visitor.enter_node(kind);
3490 visitor.visit_span(&it.span);
3491 visitor.leave_node(kind);
3492 }
3493
3494 #[inline]
3495 pub fn walk_ts_undefined_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSUndefinedKeyword) {
3496 let kind = AstKind::TSUndefinedKeyword(visitor.alloc(it));
3497 visitor.enter_node(kind);
3498 visitor.visit_span(&it.span);
3499 visitor.leave_node(kind);
3500 }
3501
3502 #[inline]
3503 pub fn walk_ts_void_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSVoidKeyword) {
3504 let kind = AstKind::TSVoidKeyword(visitor.alloc(it));
3505 visitor.enter_node(kind);
3506 visitor.visit_span(&it.span);
3507 visitor.leave_node(kind);
3508 }
3509
3510 #[inline]
3511 pub fn walk_ts_symbol_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSSymbolKeyword) {
3512 let kind = AstKind::TSSymbolKeyword(visitor.alloc(it));
3513 visitor.enter_node(kind);
3514 visitor.visit_span(&it.span);
3515 visitor.leave_node(kind);
3516 }
3517
3518 #[inline]
3519 pub fn walk_ts_this_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSThisType) {
3520 let kind = AstKind::TSThisType(visitor.alloc(it));
3521 visitor.enter_node(kind);
3522 visitor.visit_span(&it.span);
3523 visitor.leave_node(kind);
3524 }
3525
3526 #[inline]
3527 pub fn walk_ts_object_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSObjectKeyword) {
3528 let kind = AstKind::TSObjectKeyword(visitor.alloc(it));
3529 visitor.enter_node(kind);
3530 visitor.visit_span(&it.span);
3531 visitor.leave_node(kind);
3532 }
3533
3534 #[inline]
3535 pub fn walk_ts_big_int_keyword<'a, V: Visit<'a>>(visitor: &mut V, it: &TSBigIntKeyword) {
3536 let kind = AstKind::TSBigIntKeyword(visitor.alloc(it));
3537 visitor.enter_node(kind);
3538 visitor.visit_span(&it.span);
3539 visitor.leave_node(kind);
3540 }
3541
3542 #[inline]
3543 pub fn walk_ts_type_reference<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeReference<'a>) {
3544 let kind = AstKind::TSTypeReference(visitor.alloc(it));
3545 visitor.enter_node(kind);
3546 visitor.visit_span(&it.span);
3547 visitor.visit_ts_type_name(&it.type_name);
3548 if let Some(type_arguments) = &it.type_arguments {
3549 visitor.visit_ts_type_parameter_instantiation(type_arguments);
3550 }
3551 visitor.leave_node(kind);
3552 }
3553
3554 #[inline]
3555 pub fn walk_ts_type_name<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeName<'a>) {
3556 match it {
3558 TSTypeName::IdentifierReference(it) => visitor.visit_identifier_reference(it),
3559 TSTypeName::QualifiedName(it) => visitor.visit_ts_qualified_name(it),
3560 TSTypeName::ThisExpression(it) => visitor.visit_this_expression(it),
3561 }
3562 }
3563
3564 #[inline]
3565 pub fn walk_ts_qualified_name<'a, V: Visit<'a>>(visitor: &mut V, it: &TSQualifiedName<'a>) {
3566 let kind = AstKind::TSQualifiedName(visitor.alloc(it));
3567 visitor.enter_node(kind);
3568 visitor.visit_span(&it.span);
3569 visitor.visit_ts_type_name(&it.left);
3570 visitor.visit_identifier_name(&it.right);
3571 visitor.leave_node(kind);
3572 }
3573
3574 #[inline]
3575 pub fn walk_ts_type_parameter_instantiation<'a, V: Visit<'a>>(
3576 visitor: &mut V,
3577 it: &TSTypeParameterInstantiation<'a>,
3578 ) {
3579 let kind = AstKind::TSTypeParameterInstantiation(visitor.alloc(it));
3580 visitor.enter_node(kind);
3581 visitor.visit_span(&it.span);
3582 visitor.visit_ts_types(&it.params);
3583 visitor.leave_node(kind);
3584 }
3585
3586 #[inline]
3587 pub fn walk_ts_type_parameter<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeParameter<'a>) {
3588 let kind = AstKind::TSTypeParameter(visitor.alloc(it));
3589 visitor.enter_node(kind);
3590 visitor.visit_span(&it.span);
3591 visitor.visit_binding_identifier(&it.name);
3592 if let Some(constraint) = &it.constraint {
3593 visitor.visit_ts_type(constraint);
3594 }
3595 if let Some(default) = &it.default {
3596 visitor.visit_ts_type(default);
3597 }
3598 visitor.leave_node(kind);
3599 }
3600
3601 #[inline]
3602 pub fn walk_ts_type_parameter_declaration<'a, V: Visit<'a>>(
3603 visitor: &mut V,
3604 it: &TSTypeParameterDeclaration<'a>,
3605 ) {
3606 let kind = AstKind::TSTypeParameterDeclaration(visitor.alloc(it));
3607 visitor.enter_node(kind);
3608 visitor.visit_span(&it.span);
3609 visitor.visit_ts_type_parameters(&it.params);
3610 visitor.leave_node(kind);
3611 }
3612
3613 #[inline]
3614 pub fn walk_ts_type_alias_declaration<'a, V: Visit<'a>>(
3615 visitor: &mut V,
3616 it: &TSTypeAliasDeclaration<'a>,
3617 ) {
3618 let kind = AstKind::TSTypeAliasDeclaration(visitor.alloc(it));
3619 visitor.enter_node(kind);
3620 visitor.visit_span(&it.span);
3621 visitor.visit_binding_identifier(&it.id);
3622 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3623 if let Some(type_parameters) = &it.type_parameters {
3624 visitor.visit_ts_type_parameter_declaration(type_parameters);
3625 }
3626 visitor.visit_ts_type(&it.type_annotation);
3627 visitor.leave_scope();
3628 visitor.leave_node(kind);
3629 }
3630
3631 #[inline]
3632 pub fn walk_ts_class_implements<'a, V: Visit<'a>>(visitor: &mut V, it: &TSClassImplements<'a>) {
3633 let kind = AstKind::TSClassImplements(visitor.alloc(it));
3634 visitor.enter_node(kind);
3635 visitor.visit_span(&it.span);
3636 visitor.visit_ts_type_name(&it.expression);
3637 if let Some(type_arguments) = &it.type_arguments {
3638 visitor.visit_ts_type_parameter_instantiation(type_arguments);
3639 }
3640 visitor.leave_node(kind);
3641 }
3642
3643 #[inline]
3644 pub fn walk_ts_interface_declaration<'a, V: Visit<'a>>(
3645 visitor: &mut V,
3646 it: &TSInterfaceDeclaration<'a>,
3647 ) {
3648 let kind = AstKind::TSInterfaceDeclaration(visitor.alloc(it));
3649 visitor.enter_node(kind);
3650 visitor.visit_span(&it.span);
3651 visitor.visit_binding_identifier(&it.id);
3652 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3653 if let Some(type_parameters) = &it.type_parameters {
3654 visitor.visit_ts_type_parameter_declaration(type_parameters);
3655 }
3656 visitor.visit_ts_interface_heritages(&it.extends);
3657 visitor.visit_ts_interface_body(&it.body);
3658 visitor.leave_scope();
3659 visitor.leave_node(kind);
3660 }
3661
3662 #[inline]
3663 pub fn walk_ts_interface_body<'a, V: Visit<'a>>(visitor: &mut V, it: &TSInterfaceBody<'a>) {
3664 let kind = AstKind::TSInterfaceBody(visitor.alloc(it));
3665 visitor.enter_node(kind);
3666 visitor.visit_span(&it.span);
3667 visitor.visit_ts_signatures(&it.body);
3668 visitor.leave_node(kind);
3669 }
3670
3671 #[inline]
3672 pub fn walk_ts_property_signature<'a, V: Visit<'a>>(
3673 visitor: &mut V,
3674 it: &TSPropertySignature<'a>,
3675 ) {
3676 let kind = AstKind::TSPropertySignature(visitor.alloc(it));
3677 visitor.enter_node(kind);
3678 visitor.visit_span(&it.span);
3679 visitor.visit_property_key(&it.key);
3680 if let Some(type_annotation) = &it.type_annotation {
3681 visitor.visit_ts_type_annotation(type_annotation);
3682 }
3683 visitor.leave_node(kind);
3684 }
3685
3686 #[inline]
3687 pub fn walk_ts_signature<'a, V: Visit<'a>>(visitor: &mut V, it: &TSSignature<'a>) {
3688 match it {
3690 TSSignature::TSIndexSignature(it) => visitor.visit_ts_index_signature(it),
3691 TSSignature::TSPropertySignature(it) => visitor.visit_ts_property_signature(it),
3692 TSSignature::TSCallSignatureDeclaration(it) => {
3693 visitor.visit_ts_call_signature_declaration(it)
3694 }
3695 TSSignature::TSConstructSignatureDeclaration(it) => {
3696 visitor.visit_ts_construct_signature_declaration(it)
3697 }
3698 TSSignature::TSMethodSignature(it) => visitor.visit_ts_method_signature(it),
3699 }
3700 }
3701
3702 #[inline]
3703 pub fn walk_ts_index_signature<'a, V: Visit<'a>>(visitor: &mut V, it: &TSIndexSignature<'a>) {
3704 let kind = AstKind::TSIndexSignature(visitor.alloc(it));
3705 visitor.enter_node(kind);
3706 visitor.visit_span(&it.span);
3707 visitor.visit_ts_index_signature_names(&it.parameters);
3708 visitor.visit_ts_type_annotation(&it.type_annotation);
3709 visitor.leave_node(kind);
3710 }
3711
3712 #[inline]
3713 pub fn walk_ts_call_signature_declaration<'a, V: Visit<'a>>(
3714 visitor: &mut V,
3715 it: &TSCallSignatureDeclaration<'a>,
3716 ) {
3717 let kind = AstKind::TSCallSignatureDeclaration(visitor.alloc(it));
3718 visitor.enter_node(kind);
3719 visitor.visit_span(&it.span);
3720 if let Some(type_parameters) = &it.type_parameters {
3721 visitor.visit_ts_type_parameter_declaration(type_parameters);
3722 }
3723 if let Some(this_param) = &it.this_param {
3724 visitor.visit_ts_this_parameter(this_param);
3725 }
3726 visitor.visit_formal_parameters(&it.params);
3727 if let Some(return_type) = &it.return_type {
3728 visitor.visit_ts_type_annotation(return_type);
3729 }
3730 visitor.leave_node(kind);
3731 }
3732
3733 pub fn walk_ts_method_signature<'a, V: Visit<'a>>(visitor: &mut V, it: &TSMethodSignature<'a>) {
3734 let kind = AstKind::TSMethodSignature(visitor.alloc(it));
3735 visitor.enter_node(kind);
3736 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3737 visitor.visit_span(&it.span);
3738 visitor.visit_property_key(&it.key);
3739 if let Some(type_parameters) = &it.type_parameters {
3740 visitor.visit_ts_type_parameter_declaration(type_parameters);
3741 }
3742 if let Some(this_param) = &it.this_param {
3743 visitor.visit_ts_this_parameter(this_param);
3744 }
3745 visitor.visit_formal_parameters(&it.params);
3746 if let Some(return_type) = &it.return_type {
3747 visitor.visit_ts_type_annotation(return_type);
3748 }
3749 visitor.leave_scope();
3750 visitor.leave_node(kind);
3751 }
3752
3753 #[inline]
3754 pub fn walk_ts_construct_signature_declaration<'a, V: Visit<'a>>(
3755 visitor: &mut V,
3756 it: &TSConstructSignatureDeclaration<'a>,
3757 ) {
3758 let kind = AstKind::TSConstructSignatureDeclaration(visitor.alloc(it));
3759 visitor.enter_node(kind);
3760 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3761 visitor.visit_span(&it.span);
3762 if let Some(type_parameters) = &it.type_parameters {
3763 visitor.visit_ts_type_parameter_declaration(type_parameters);
3764 }
3765 visitor.visit_formal_parameters(&it.params);
3766 if let Some(return_type) = &it.return_type {
3767 visitor.visit_ts_type_annotation(return_type);
3768 }
3769 visitor.leave_scope();
3770 visitor.leave_node(kind);
3771 }
3772
3773 #[inline]
3774 pub fn walk_ts_index_signature_name<'a, V: Visit<'a>>(
3775 visitor: &mut V,
3776 it: &TSIndexSignatureName<'a>,
3777 ) {
3778 let kind = AstKind::TSIndexSignatureName(visitor.alloc(it));
3779 visitor.enter_node(kind);
3780 visitor.visit_span(&it.span);
3781 visitor.visit_ts_type_annotation(&it.type_annotation);
3782 visitor.leave_node(kind);
3783 }
3784
3785 #[inline]
3786 pub fn walk_ts_interface_heritage<'a, V: Visit<'a>>(
3787 visitor: &mut V,
3788 it: &TSInterfaceHeritage<'a>,
3789 ) {
3790 let kind = AstKind::TSInterfaceHeritage(visitor.alloc(it));
3791 visitor.enter_node(kind);
3792 visitor.visit_span(&it.span);
3793 visitor.visit_expression(&it.expression);
3794 if let Some(type_arguments) = &it.type_arguments {
3795 visitor.visit_ts_type_parameter_instantiation(type_arguments);
3796 }
3797 visitor.leave_node(kind);
3798 }
3799
3800 #[inline]
3801 pub fn walk_ts_type_predicate<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypePredicate<'a>) {
3802 let kind = AstKind::TSTypePredicate(visitor.alloc(it));
3803 visitor.enter_node(kind);
3804 visitor.visit_span(&it.span);
3805 visitor.visit_ts_type_predicate_name(&it.parameter_name);
3806 if let Some(type_annotation) = &it.type_annotation {
3807 visitor.visit_ts_type_annotation(type_annotation);
3808 }
3809 visitor.leave_node(kind);
3810 }
3811
3812 #[inline]
3813 pub fn walk_ts_type_predicate_name<'a, V: Visit<'a>>(
3814 visitor: &mut V,
3815 it: &TSTypePredicateName<'a>,
3816 ) {
3817 match it {
3819 TSTypePredicateName::Identifier(it) => visitor.visit_identifier_name(it),
3820 TSTypePredicateName::This(it) => visitor.visit_ts_this_type(it),
3821 }
3822 }
3823
3824 #[inline]
3825 pub fn walk_ts_module_declaration<'a, V: Visit<'a>>(
3826 visitor: &mut V,
3827 it: &TSModuleDeclaration<'a>,
3828 ) {
3829 let kind = AstKind::TSModuleDeclaration(visitor.alloc(it));
3830 visitor.enter_node(kind);
3831 visitor.visit_span(&it.span);
3832 visitor.visit_ts_module_declaration_name(&it.id);
3833 visitor.enter_scope(
3834 {
3835 let mut flags = ScopeFlags::TsModuleBlock;
3836 if it.body.as_ref().is_some_and(TSModuleDeclarationBody::has_use_strict_directive) {
3837 flags |= ScopeFlags::StrictMode;
3838 }
3839 flags
3840 },
3841 &it.scope_id,
3842 );
3843 if let Some(body) = &it.body {
3844 visitor.visit_ts_module_declaration_body(body);
3845 }
3846 visitor.leave_scope();
3847 visitor.leave_node(kind);
3848 }
3849
3850 #[inline]
3851 pub fn walk_ts_module_declaration_name<'a, V: Visit<'a>>(
3852 visitor: &mut V,
3853 it: &TSModuleDeclarationName<'a>,
3854 ) {
3855 match it {
3857 TSModuleDeclarationName::Identifier(it) => visitor.visit_binding_identifier(it),
3858 TSModuleDeclarationName::StringLiteral(it) => visitor.visit_string_literal(it),
3859 }
3860 }
3861
3862 #[inline]
3863 pub fn walk_ts_module_declaration_body<'a, V: Visit<'a>>(
3864 visitor: &mut V,
3865 it: &TSModuleDeclarationBody<'a>,
3866 ) {
3867 match it {
3869 TSModuleDeclarationBody::TSModuleDeclaration(it) => {
3870 visitor.visit_ts_module_declaration(it)
3871 }
3872 TSModuleDeclarationBody::TSModuleBlock(it) => visitor.visit_ts_module_block(it),
3873 }
3874 }
3875
3876 #[inline]
3877 pub fn walk_ts_module_block<'a, V: Visit<'a>>(visitor: &mut V, it: &TSModuleBlock<'a>) {
3878 let kind = AstKind::TSModuleBlock(visitor.alloc(it));
3879 visitor.enter_node(kind);
3880 visitor.visit_span(&it.span);
3881 visitor.visit_directives(&it.directives);
3882 visitor.visit_statements(&it.body);
3883 visitor.leave_node(kind);
3884 }
3885
3886 #[inline]
3887 pub fn walk_ts_type_literal<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeLiteral<'a>) {
3888 let kind = AstKind::TSTypeLiteral(visitor.alloc(it));
3889 visitor.enter_node(kind);
3890 visitor.visit_span(&it.span);
3891 visitor.visit_ts_signatures(&it.members);
3892 visitor.leave_node(kind);
3893 }
3894
3895 #[inline]
3896 pub fn walk_ts_infer_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSInferType<'a>) {
3897 let kind = AstKind::TSInferType(visitor.alloc(it));
3898 visitor.enter_node(kind);
3899 visitor.visit_span(&it.span);
3900 visitor.visit_ts_type_parameter(&it.type_parameter);
3901 visitor.leave_node(kind);
3902 }
3903
3904 #[inline]
3905 pub fn walk_ts_type_query<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeQuery<'a>) {
3906 let kind = AstKind::TSTypeQuery(visitor.alloc(it));
3907 visitor.enter_node(kind);
3908 visitor.visit_span(&it.span);
3909 visitor.visit_ts_type_query_expr_name(&it.expr_name);
3910 if let Some(type_arguments) = &it.type_arguments {
3911 visitor.visit_ts_type_parameter_instantiation(type_arguments);
3912 }
3913 visitor.leave_node(kind);
3914 }
3915
3916 #[inline]
3917 pub fn walk_ts_type_query_expr_name<'a, V: Visit<'a>>(
3918 visitor: &mut V,
3919 it: &TSTypeQueryExprName<'a>,
3920 ) {
3921 match it {
3923 TSTypeQueryExprName::TSImportType(it) => visitor.visit_ts_import_type(it),
3924 match_ts_type_name!(TSTypeQueryExprName) => {
3925 visitor.visit_ts_type_name(it.to_ts_type_name())
3926 }
3927 }
3928 }
3929
3930 #[inline]
3931 pub fn walk_ts_import_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSImportType<'a>) {
3932 let kind = AstKind::TSImportType(visitor.alloc(it));
3933 visitor.enter_node(kind);
3934 visitor.visit_span(&it.span);
3935 visitor.visit_ts_type(&it.argument);
3936 if let Some(options) = &it.options {
3937 visitor.visit_object_expression(options);
3938 }
3939 if let Some(qualifier) = &it.qualifier {
3940 visitor.visit_ts_import_type_qualifier(qualifier);
3941 }
3942 if let Some(type_arguments) = &it.type_arguments {
3943 visitor.visit_ts_type_parameter_instantiation(type_arguments);
3944 }
3945 visitor.leave_node(kind);
3946 }
3947
3948 #[inline]
3949 pub fn walk_ts_import_type_qualifier<'a, V: Visit<'a>>(
3950 visitor: &mut V,
3951 it: &TSImportTypeQualifier<'a>,
3952 ) {
3953 match it {
3955 TSImportTypeQualifier::Identifier(it) => visitor.visit_identifier_name(it),
3956 TSImportTypeQualifier::QualifiedName(it) => {
3957 visitor.visit_ts_import_type_qualified_name(it)
3958 }
3959 }
3960 }
3961
3962 #[inline]
3963 pub fn walk_ts_import_type_qualified_name<'a, V: Visit<'a>>(
3964 visitor: &mut V,
3965 it: &TSImportTypeQualifiedName<'a>,
3966 ) {
3967 let kind = AstKind::TSImportTypeQualifiedName(visitor.alloc(it));
3968 visitor.enter_node(kind);
3969 visitor.visit_span(&it.span);
3970 visitor.visit_ts_import_type_qualifier(&it.left);
3971 visitor.visit_identifier_name(&it.right);
3972 visitor.leave_node(kind);
3973 }
3974
3975 #[inline]
3976 pub fn walk_ts_function_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSFunctionType<'a>) {
3977 let kind = AstKind::TSFunctionType(visitor.alloc(it));
3978 visitor.enter_node(kind);
3979 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3980 visitor.visit_span(&it.span);
3981 if let Some(type_parameters) = &it.type_parameters {
3982 visitor.visit_ts_type_parameter_declaration(type_parameters);
3983 }
3984 if let Some(this_param) = &it.this_param {
3985 visitor.visit_ts_this_parameter(this_param);
3986 }
3987 visitor.visit_formal_parameters(&it.params);
3988 visitor.visit_ts_type_annotation(&it.return_type);
3989 visitor.leave_scope();
3990 visitor.leave_node(kind);
3991 }
3992
3993 #[inline]
3994 pub fn walk_ts_constructor_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSConstructorType<'a>) {
3995 let kind = AstKind::TSConstructorType(visitor.alloc(it));
3996 visitor.enter_node(kind);
3997 visitor.visit_span(&it.span);
3998 if let Some(type_parameters) = &it.type_parameters {
3999 visitor.visit_ts_type_parameter_declaration(type_parameters);
4000 }
4001 visitor.visit_formal_parameters(&it.params);
4002 visitor.visit_ts_type_annotation(&it.return_type);
4003 visitor.leave_node(kind);
4004 }
4005
4006 #[inline]
4007 pub fn walk_ts_mapped_type<'a, V: Visit<'a>>(visitor: &mut V, it: &TSMappedType<'a>) {
4008 let kind = AstKind::TSMappedType(visitor.alloc(it));
4009 visitor.enter_node(kind);
4010 visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
4011 visitor.visit_span(&it.span);
4012 visitor.visit_ts_type_parameter(&it.type_parameter);
4013 if let Some(name_type) = &it.name_type {
4014 visitor.visit_ts_type(name_type);
4015 }
4016 if let Some(type_annotation) = &it.type_annotation {
4017 visitor.visit_ts_type(type_annotation);
4018 }
4019 visitor.leave_scope();
4020 visitor.leave_node(kind);
4021 }
4022
4023 #[inline]
4024 pub fn walk_ts_template_literal_type<'a, V: Visit<'a>>(
4025 visitor: &mut V,
4026 it: &TSTemplateLiteralType<'a>,
4027 ) {
4028 let kind = AstKind::TSTemplateLiteralType(visitor.alloc(it));
4029 visitor.enter_node(kind);
4030 visitor.visit_span(&it.span);
4031 visitor.visit_template_elements(&it.quasis);
4032 visitor.visit_ts_types(&it.types);
4033 visitor.leave_node(kind);
4034 }
4035
4036 #[inline]
4037 pub fn walk_ts_as_expression<'a, V: Visit<'a>>(visitor: &mut V, it: &TSAsExpression<'a>) {
4038 let kind = AstKind::TSAsExpression(visitor.alloc(it));
4039 visitor.enter_node(kind);
4040 visitor.visit_span(&it.span);
4041 visitor.visit_expression(&it.expression);
4042 visitor.visit_ts_type(&it.type_annotation);
4043 visitor.leave_node(kind);
4044 }
4045
4046 #[inline]
4047 pub fn walk_ts_satisfies_expression<'a, V: Visit<'a>>(
4048 visitor: &mut V,
4049 it: &TSSatisfiesExpression<'a>,
4050 ) {
4051 let kind = AstKind::TSSatisfiesExpression(visitor.alloc(it));
4052 visitor.enter_node(kind);
4053 visitor.visit_span(&it.span);
4054 visitor.visit_expression(&it.expression);
4055 visitor.visit_ts_type(&it.type_annotation);
4056 visitor.leave_node(kind);
4057 }
4058
4059 #[inline]
4060 pub fn walk_ts_type_assertion<'a, V: Visit<'a>>(visitor: &mut V, it: &TSTypeAssertion<'a>) {
4061 let kind = AstKind::TSTypeAssertion(visitor.alloc(it));
4062 visitor.enter_node(kind);
4063 visitor.visit_span(&it.span);
4064 visitor.visit_ts_type(&it.type_annotation);
4065 visitor.visit_expression(&it.expression);
4066 visitor.leave_node(kind);
4067 }
4068
4069 #[inline]
4070 pub fn walk_ts_import_equals_declaration<'a, V: Visit<'a>>(
4071 visitor: &mut V,
4072 it: &TSImportEqualsDeclaration<'a>,
4073 ) {
4074 let kind = AstKind::TSImportEqualsDeclaration(visitor.alloc(it));
4075 visitor.enter_node(kind);
4076 visitor.visit_span(&it.span);
4077 visitor.visit_binding_identifier(&it.id);
4078 visitor.visit_ts_module_reference(&it.module_reference);
4079 visitor.leave_node(kind);
4080 }
4081
4082 #[inline]
4083 pub fn walk_ts_module_reference<'a, V: Visit<'a>>(visitor: &mut V, it: &TSModuleReference<'a>) {
4084 match it {
4086 TSModuleReference::ExternalModuleReference(it) => {
4087 visitor.visit_ts_external_module_reference(it)
4088 }
4089 match_ts_type_name!(TSModuleReference) => {
4090 visitor.visit_ts_type_name(it.to_ts_type_name())
4091 }
4092 }
4093 }
4094
4095 #[inline]
4096 pub fn walk_ts_external_module_reference<'a, V: Visit<'a>>(
4097 visitor: &mut V,
4098 it: &TSExternalModuleReference<'a>,
4099 ) {
4100 let kind = AstKind::TSExternalModuleReference(visitor.alloc(it));
4101 visitor.enter_node(kind);
4102 visitor.visit_span(&it.span);
4103 visitor.visit_string_literal(&it.expression);
4104 visitor.leave_node(kind);
4105 }
4106
4107 #[inline]
4108 pub fn walk_ts_non_null_expression<'a, V: Visit<'a>>(
4109 visitor: &mut V,
4110 it: &TSNonNullExpression<'a>,
4111 ) {
4112 let kind = AstKind::TSNonNullExpression(visitor.alloc(it));
4113 visitor.enter_node(kind);
4114 visitor.visit_span(&it.span);
4115 visitor.visit_expression(&it.expression);
4116 visitor.leave_node(kind);
4117 }
4118
4119 #[inline]
4120 pub fn walk_decorator<'a, V: Visit<'a>>(visitor: &mut V, it: &Decorator<'a>) {
4121 let kind = AstKind::Decorator(visitor.alloc(it));
4122 visitor.enter_node(kind);
4123 visitor.visit_span(&it.span);
4124 visitor.visit_expression(&it.expression);
4125 visitor.leave_node(kind);
4126 }
4127
4128 #[inline]
4129 pub fn walk_ts_export_assignment<'a, V: Visit<'a>>(
4130 visitor: &mut V,
4131 it: &TSExportAssignment<'a>,
4132 ) {
4133 let kind = AstKind::TSExportAssignment(visitor.alloc(it));
4134 visitor.enter_node(kind);
4135 visitor.visit_span(&it.span);
4136 visitor.visit_expression(&it.expression);
4137 visitor.leave_node(kind);
4138 }
4139
4140 #[inline]
4141 pub fn walk_ts_namespace_export_declaration<'a, V: Visit<'a>>(
4142 visitor: &mut V,
4143 it: &TSNamespaceExportDeclaration<'a>,
4144 ) {
4145 let kind = AstKind::TSNamespaceExportDeclaration(visitor.alloc(it));
4146 visitor.enter_node(kind);
4147 visitor.visit_span(&it.span);
4148 visitor.visit_identifier_name(&it.id);
4149 visitor.leave_node(kind);
4150 }
4151
4152 #[inline]
4153 pub fn walk_ts_instantiation_expression<'a, V: Visit<'a>>(
4154 visitor: &mut V,
4155 it: &TSInstantiationExpression<'a>,
4156 ) {
4157 let kind = AstKind::TSInstantiationExpression(visitor.alloc(it));
4158 visitor.enter_node(kind);
4159 visitor.visit_span(&it.span);
4160 visitor.visit_expression(&it.expression);
4161 visitor.visit_ts_type_parameter_instantiation(&it.type_arguments);
4162 visitor.leave_node(kind);
4163 }
4164
4165 #[inline]
4166 pub fn walk_js_doc_nullable_type<'a, V: Visit<'a>>(
4167 visitor: &mut V,
4168 it: &JSDocNullableType<'a>,
4169 ) {
4170 let kind = AstKind::JSDocNullableType(visitor.alloc(it));
4171 visitor.enter_node(kind);
4172 visitor.visit_span(&it.span);
4173 visitor.visit_ts_type(&it.type_annotation);
4174 visitor.leave_node(kind);
4175 }
4176
4177 #[inline]
4178 pub fn walk_js_doc_non_nullable_type<'a, V: Visit<'a>>(
4179 visitor: &mut V,
4180 it: &JSDocNonNullableType<'a>,
4181 ) {
4182 let kind = AstKind::JSDocNonNullableType(visitor.alloc(it));
4183 visitor.enter_node(kind);
4184 visitor.visit_span(&it.span);
4185 visitor.visit_ts_type(&it.type_annotation);
4186 visitor.leave_node(kind);
4187 }
4188
4189 #[inline]
4190 pub fn walk_js_doc_unknown_type<'a, V: Visit<'a>>(visitor: &mut V, it: &JSDocUnknownType) {
4191 let kind = AstKind::JSDocUnknownType(visitor.alloc(it));
4192 visitor.enter_node(kind);
4193 visitor.visit_span(&it.span);
4194 visitor.leave_node(kind);
4195 }
4196
4197 #[inline]
4198 pub fn walk_span<'a, V: Visit<'a>>(visitor: &mut V, it: &Span) {
4199 }
4201
4202 #[inline]
4203 pub fn walk_directives<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, Directive<'a>>) {
4204 for el in it {
4205 visitor.visit_directive(el);
4206 }
4207 }
4208
4209 #[inline]
4210 pub fn walk_statements<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, Statement<'a>>) {
4211 for el in it {
4212 visitor.visit_statement(el);
4213 }
4214 }
4215
4216 #[inline]
4217 pub fn walk_array_expression_elements<'a, V: Visit<'a>>(
4218 visitor: &mut V,
4219 it: &Vec<'a, ArrayExpressionElement<'a>>,
4220 ) {
4221 for el in it {
4222 visitor.visit_array_expression_element(el);
4223 }
4224 }
4225
4226 #[inline]
4227 pub fn walk_object_property_kinds<'a, V: Visit<'a>>(
4228 visitor: &mut V,
4229 it: &Vec<'a, ObjectPropertyKind<'a>>,
4230 ) {
4231 for el in it {
4232 visitor.visit_object_property_kind(el);
4233 }
4234 }
4235
4236 #[inline]
4237 pub fn walk_template_elements<'a, V: Visit<'a>>(
4238 visitor: &mut V,
4239 it: &Vec<'a, TemplateElement<'a>>,
4240 ) {
4241 for el in it {
4242 visitor.visit_template_element(el);
4243 }
4244 }
4245
4246 #[inline]
4247 pub fn walk_expressions<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, Expression<'a>>) {
4248 for el in it {
4249 visitor.visit_expression(el);
4250 }
4251 }
4252
4253 #[inline]
4254 pub fn walk_arguments<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, Argument<'a>>) {
4255 for el in it {
4256 visitor.visit_argument(el);
4257 }
4258 }
4259
4260 #[inline]
4261 pub fn walk_assignment_target_properties<'a, V: Visit<'a>>(
4262 visitor: &mut V,
4263 it: &Vec<'a, AssignmentTargetProperty<'a>>,
4264 ) {
4265 for el in it {
4266 visitor.visit_assignment_target_property(el);
4267 }
4268 }
4269
4270 #[inline]
4271 pub fn walk_variable_declarators<'a, V: Visit<'a>>(
4272 visitor: &mut V,
4273 it: &Vec<'a, VariableDeclarator<'a>>,
4274 ) {
4275 for el in it {
4276 visitor.visit_variable_declarator(el);
4277 }
4278 }
4279
4280 #[inline]
4281 pub fn walk_switch_cases<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, SwitchCase<'a>>) {
4282 for el in it {
4283 visitor.visit_switch_case(el);
4284 }
4285 }
4286
4287 #[inline]
4288 pub fn walk_binding_properties<'a, V: Visit<'a>>(
4289 visitor: &mut V,
4290 it: &Vec<'a, BindingProperty<'a>>,
4291 ) {
4292 for el in it {
4293 visitor.visit_binding_property(el);
4294 }
4295 }
4296
4297 #[inline]
4298 pub fn walk_formal_parameter_list<'a, V: Visit<'a>>(
4299 visitor: &mut V,
4300 it: &Vec<'a, FormalParameter<'a>>,
4301 ) {
4302 for el in it {
4303 visitor.visit_formal_parameter(el);
4304 }
4305 }
4306
4307 #[inline]
4308 pub fn walk_decorators<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, Decorator<'a>>) {
4309 for el in it {
4310 visitor.visit_decorator(el);
4311 }
4312 }
4313
4314 #[inline]
4315 pub fn walk_ts_class_implements_list<'a, V: Visit<'a>>(
4316 visitor: &mut V,
4317 it: &Vec<'a, TSClassImplements<'a>>,
4318 ) {
4319 for el in it {
4320 visitor.visit_ts_class_implements(el);
4321 }
4322 }
4323
4324 #[inline]
4325 pub fn walk_class_elements<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, ClassElement<'a>>) {
4326 for el in it {
4327 visitor.visit_class_element(el);
4328 }
4329 }
4330
4331 #[inline]
4332 pub fn walk_import_declaration_specifiers<'a, V: Visit<'a>>(
4333 visitor: &mut V,
4334 it: &Vec<'a, ImportDeclarationSpecifier<'a>>,
4335 ) {
4336 for el in it {
4337 visitor.visit_import_declaration_specifier(el);
4338 }
4339 }
4340
4341 #[inline]
4342 pub fn walk_import_attributes<'a, V: Visit<'a>>(
4343 visitor: &mut V,
4344 it: &Vec<'a, ImportAttribute<'a>>,
4345 ) {
4346 for el in it {
4347 visitor.visit_import_attribute(el);
4348 }
4349 }
4350
4351 #[inline]
4352 pub fn walk_export_specifiers<'a, V: Visit<'a>>(
4353 visitor: &mut V,
4354 it: &Vec<'a, ExportSpecifier<'a>>,
4355 ) {
4356 for el in it {
4357 visitor.visit_export_specifier(el);
4358 }
4359 }
4360
4361 #[inline]
4362 pub fn walk_jsx_children<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, JSXChild<'a>>) {
4363 for el in it {
4364 visitor.visit_jsx_child(el);
4365 }
4366 }
4367
4368 #[inline]
4369 pub fn walk_jsx_attribute_items<'a, V: Visit<'a>>(
4370 visitor: &mut V,
4371 it: &Vec<'a, JSXAttributeItem<'a>>,
4372 ) {
4373 for el in it {
4374 visitor.visit_jsx_attribute_item(el);
4375 }
4376 }
4377
4378 #[inline]
4379 pub fn walk_ts_enum_members<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, TSEnumMember<'a>>) {
4380 for el in it {
4381 visitor.visit_ts_enum_member(el);
4382 }
4383 }
4384
4385 #[inline]
4386 pub fn walk_ts_types<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, TSType<'a>>) {
4387 for el in it {
4388 visitor.visit_ts_type(el);
4389 }
4390 }
4391
4392 #[inline]
4393 pub fn walk_ts_tuple_elements<'a, V: Visit<'a>>(
4394 visitor: &mut V,
4395 it: &Vec<'a, TSTupleElement<'a>>,
4396 ) {
4397 for el in it {
4398 visitor.visit_ts_tuple_element(el);
4399 }
4400 }
4401
4402 #[inline]
4403 pub fn walk_ts_type_parameters<'a, V: Visit<'a>>(
4404 visitor: &mut V,
4405 it: &Vec<'a, TSTypeParameter<'a>>,
4406 ) {
4407 for el in it {
4408 visitor.visit_ts_type_parameter(el);
4409 }
4410 }
4411
4412 #[inline]
4413 pub fn walk_ts_interface_heritages<'a, V: Visit<'a>>(
4414 visitor: &mut V,
4415 it: &Vec<'a, TSInterfaceHeritage<'a>>,
4416 ) {
4417 for el in it {
4418 visitor.visit_ts_interface_heritage(el);
4419 }
4420 }
4421
4422 #[inline]
4423 pub fn walk_ts_signatures<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, TSSignature<'a>>) {
4424 for el in it {
4425 visitor.visit_ts_signature(el);
4426 }
4427 }
4428
4429 #[inline]
4430 pub fn walk_ts_index_signature_names<'a, V: Visit<'a>>(
4431 visitor: &mut V,
4432 it: &Vec<'a, TSIndexSignatureName<'a>>,
4433 ) {
4434 for el in it {
4435 visitor.visit_ts_index_signature_name(el);
4436 }
4437 }
4438
4439 #[inline]
4440 pub fn walk_spans<'a, V: Visit<'a>>(visitor: &mut V, it: &Vec<'a, Span>) {
4441 for el in it {
4442 visitor.visit_span(el);
4443 }
4444 }
4445}