oxc_ast_visit/generated/
visit_mut.rs

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