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_import_type_qualifier(&mut self, it: &mut TSImportTypeQualifier<'a>) {
1091        walk_ts_import_type_qualifier(self, it);
1092    }
1093
1094    #[inline]
1095    fn visit_ts_import_type_qualified_name(&mut self, it: &mut TSImportTypeQualifiedName<'a>) {
1096        walk_ts_import_type_qualified_name(self, it);
1097    }
1098
1099    #[inline]
1100    fn visit_ts_function_type(&mut self, it: &mut TSFunctionType<'a>) {
1101        walk_ts_function_type(self, it);
1102    }
1103
1104    #[inline]
1105    fn visit_ts_constructor_type(&mut self, it: &mut TSConstructorType<'a>) {
1106        walk_ts_constructor_type(self, it);
1107    }
1108
1109    #[inline]
1110    fn visit_ts_mapped_type(&mut self, it: &mut TSMappedType<'a>) {
1111        walk_ts_mapped_type(self, it);
1112    }
1113
1114    #[inline]
1115    fn visit_ts_template_literal_type(&mut self, it: &mut TSTemplateLiteralType<'a>) {
1116        walk_ts_template_literal_type(self, it);
1117    }
1118
1119    #[inline]
1120    fn visit_ts_as_expression(&mut self, it: &mut TSAsExpression<'a>) {
1121        walk_ts_as_expression(self, it);
1122    }
1123
1124    #[inline]
1125    fn visit_ts_satisfies_expression(&mut self, it: &mut TSSatisfiesExpression<'a>) {
1126        walk_ts_satisfies_expression(self, it);
1127    }
1128
1129    #[inline]
1130    fn visit_ts_type_assertion(&mut self, it: &mut TSTypeAssertion<'a>) {
1131        walk_ts_type_assertion(self, it);
1132    }
1133
1134    #[inline]
1135    fn visit_ts_import_equals_declaration(&mut self, it: &mut TSImportEqualsDeclaration<'a>) {
1136        walk_ts_import_equals_declaration(self, it);
1137    }
1138
1139    #[inline]
1140    fn visit_ts_module_reference(&mut self, it: &mut TSModuleReference<'a>) {
1141        walk_ts_module_reference(self, it);
1142    }
1143
1144    #[inline]
1145    fn visit_ts_external_module_reference(&mut self, it: &mut TSExternalModuleReference<'a>) {
1146        walk_ts_external_module_reference(self, it);
1147    }
1148
1149    #[inline]
1150    fn visit_ts_non_null_expression(&mut self, it: &mut TSNonNullExpression<'a>) {
1151        walk_ts_non_null_expression(self, it);
1152    }
1153
1154    #[inline]
1155    fn visit_decorator(&mut self, it: &mut Decorator<'a>) {
1156        walk_decorator(self, it);
1157    }
1158
1159    #[inline]
1160    fn visit_ts_export_assignment(&mut self, it: &mut TSExportAssignment<'a>) {
1161        walk_ts_export_assignment(self, it);
1162    }
1163
1164    #[inline]
1165    fn visit_ts_namespace_export_declaration(&mut self, it: &mut TSNamespaceExportDeclaration<'a>) {
1166        walk_ts_namespace_export_declaration(self, it);
1167    }
1168
1169    #[inline]
1170    fn visit_ts_instantiation_expression(&mut self, it: &mut TSInstantiationExpression<'a>) {
1171        walk_ts_instantiation_expression(self, it);
1172    }
1173
1174    #[inline]
1175    fn visit_js_doc_nullable_type(&mut self, it: &mut JSDocNullableType<'a>) {
1176        walk_js_doc_nullable_type(self, it);
1177    }
1178
1179    #[inline]
1180    fn visit_js_doc_non_nullable_type(&mut self, it: &mut JSDocNonNullableType<'a>) {
1181        walk_js_doc_non_nullable_type(self, it);
1182    }
1183
1184    #[inline]
1185    fn visit_js_doc_unknown_type(&mut self, it: &mut JSDocUnknownType) {
1186        walk_js_doc_unknown_type(self, it);
1187    }
1188
1189    #[inline]
1190    fn visit_span(&mut self, it: &mut Span) {
1191        walk_span(self, it);
1192    }
1193
1194    #[inline]
1195    fn visit_directives(&mut self, it: &mut Vec<'a, Directive<'a>>) {
1196        walk_directives(self, it);
1197    }
1198
1199    #[inline]
1200    fn visit_statements(&mut self, it: &mut Vec<'a, Statement<'a>>) {
1201        walk_statements(self, it);
1202    }
1203
1204    #[inline]
1205    fn visit_array_expression_elements(&mut self, it: &mut Vec<'a, ArrayExpressionElement<'a>>) {
1206        walk_array_expression_elements(self, it);
1207    }
1208
1209    #[inline]
1210    fn visit_object_property_kinds(&mut self, it: &mut Vec<'a, ObjectPropertyKind<'a>>) {
1211        walk_object_property_kinds(self, it);
1212    }
1213
1214    #[inline]
1215    fn visit_template_elements(&mut self, it: &mut Vec<'a, TemplateElement<'a>>) {
1216        walk_template_elements(self, it);
1217    }
1218
1219    #[inline]
1220    fn visit_expressions(&mut self, it: &mut Vec<'a, Expression<'a>>) {
1221        walk_expressions(self, it);
1222    }
1223
1224    #[inline]
1225    fn visit_arguments(&mut self, it: &mut Vec<'a, Argument<'a>>) {
1226        walk_arguments(self, it);
1227    }
1228
1229    #[inline]
1230    fn visit_assignment_target_properties(
1231        &mut self,
1232        it: &mut Vec<'a, AssignmentTargetProperty<'a>>,
1233    ) {
1234        walk_assignment_target_properties(self, it);
1235    }
1236
1237    #[inline]
1238    fn visit_variable_declarators(&mut self, it: &mut Vec<'a, VariableDeclarator<'a>>) {
1239        walk_variable_declarators(self, it);
1240    }
1241
1242    #[inline]
1243    fn visit_switch_cases(&mut self, it: &mut Vec<'a, SwitchCase<'a>>) {
1244        walk_switch_cases(self, it);
1245    }
1246
1247    #[inline]
1248    fn visit_binding_properties(&mut self, it: &mut Vec<'a, BindingProperty<'a>>) {
1249        walk_binding_properties(self, it);
1250    }
1251
1252    #[inline]
1253    fn visit_formal_parameter_list(&mut self, it: &mut Vec<'a, FormalParameter<'a>>) {
1254        walk_formal_parameter_list(self, it);
1255    }
1256
1257    #[inline]
1258    fn visit_decorators(&mut self, it: &mut Vec<'a, Decorator<'a>>) {
1259        walk_decorators(self, it);
1260    }
1261
1262    #[inline]
1263    fn visit_ts_class_implements_list(&mut self, it: &mut Vec<'a, TSClassImplements<'a>>) {
1264        walk_ts_class_implements_list(self, it);
1265    }
1266
1267    #[inline]
1268    fn visit_class_elements(&mut self, it: &mut Vec<'a, ClassElement<'a>>) {
1269        walk_class_elements(self, it);
1270    }
1271
1272    #[inline]
1273    fn visit_import_declaration_specifiers(
1274        &mut self,
1275        it: &mut Vec<'a, ImportDeclarationSpecifier<'a>>,
1276    ) {
1277        walk_import_declaration_specifiers(self, it);
1278    }
1279
1280    #[inline]
1281    fn visit_import_attributes(&mut self, it: &mut Vec<'a, ImportAttribute<'a>>) {
1282        walk_import_attributes(self, it);
1283    }
1284
1285    #[inline]
1286    fn visit_export_specifiers(&mut self, it: &mut Vec<'a, ExportSpecifier<'a>>) {
1287        walk_export_specifiers(self, it);
1288    }
1289
1290    #[inline]
1291    fn visit_jsx_children(&mut self, it: &mut Vec<'a, JSXChild<'a>>) {
1292        walk_jsx_children(self, it);
1293    }
1294
1295    #[inline]
1296    fn visit_jsx_attribute_items(&mut self, it: &mut Vec<'a, JSXAttributeItem<'a>>) {
1297        walk_jsx_attribute_items(self, it);
1298    }
1299
1300    #[inline]
1301    fn visit_ts_enum_members(&mut self, it: &mut Vec<'a, TSEnumMember<'a>>) {
1302        walk_ts_enum_members(self, it);
1303    }
1304
1305    #[inline]
1306    fn visit_ts_types(&mut self, it: &mut Vec<'a, TSType<'a>>) {
1307        walk_ts_types(self, it);
1308    }
1309
1310    #[inline]
1311    fn visit_ts_tuple_elements(&mut self, it: &mut Vec<'a, TSTupleElement<'a>>) {
1312        walk_ts_tuple_elements(self, it);
1313    }
1314
1315    #[inline]
1316    fn visit_ts_type_parameters(&mut self, it: &mut Vec<'a, TSTypeParameter<'a>>) {
1317        walk_ts_type_parameters(self, it);
1318    }
1319
1320    #[inline]
1321    fn visit_ts_interface_heritages(&mut self, it: &mut Vec<'a, TSInterfaceHeritage<'a>>) {
1322        walk_ts_interface_heritages(self, it);
1323    }
1324
1325    #[inline]
1326    fn visit_ts_signatures(&mut self, it: &mut Vec<'a, TSSignature<'a>>) {
1327        walk_ts_signatures(self, it);
1328    }
1329
1330    #[inline]
1331    fn visit_ts_index_signature_names(&mut self, it: &mut Vec<'a, TSIndexSignatureName<'a>>) {
1332        walk_ts_index_signature_names(self, it);
1333    }
1334
1335    #[inline]
1336    fn visit_spans(&mut self, it: &mut Vec<'a, Span>) {
1337        walk_spans(self, it);
1338    }
1339}
1340
1341pub mod walk_mut {
1342    use super::*;
1343
1344    #[inline]
1345    pub fn walk_program<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Program<'a>) {
1346        let kind = AstType::Program;
1347        visitor.enter_node(kind);
1348        visitor.enter_scope(
1349            {
1350                let mut flags = ScopeFlags::Top;
1351                if it.source_type.is_strict() || it.has_use_strict_directive() {
1352                    flags |= ScopeFlags::StrictMode;
1353                }
1354                flags
1355            },
1356            &it.scope_id,
1357        );
1358        visitor.visit_span(&mut it.span);
1359        if let Some(hashbang) = &mut it.hashbang {
1360            visitor.visit_hashbang(hashbang);
1361        }
1362        visitor.visit_directives(&mut it.directives);
1363        visitor.visit_statements(&mut it.body);
1364        visitor.leave_scope();
1365        visitor.leave_node(kind);
1366    }
1367
1368    pub fn walk_expression<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Expression<'a>) {
1369        // No `AstType` for this type
1370        match it {
1371            Expression::BooleanLiteral(it) => visitor.visit_boolean_literal(it),
1372            Expression::NullLiteral(it) => visitor.visit_null_literal(it),
1373            Expression::NumericLiteral(it) => visitor.visit_numeric_literal(it),
1374            Expression::BigIntLiteral(it) => visitor.visit_big_int_literal(it),
1375            Expression::RegExpLiteral(it) => visitor.visit_reg_exp_literal(it),
1376            Expression::StringLiteral(it) => visitor.visit_string_literal(it),
1377            Expression::TemplateLiteral(it) => visitor.visit_template_literal(it),
1378            Expression::Identifier(it) => visitor.visit_identifier_reference(it),
1379            Expression::MetaProperty(it) => visitor.visit_meta_property(it),
1380            Expression::Super(it) => visitor.visit_super(it),
1381            Expression::ArrayExpression(it) => visitor.visit_array_expression(it),
1382            Expression::ArrowFunctionExpression(it) => visitor.visit_arrow_function_expression(it),
1383            Expression::AssignmentExpression(it) => visitor.visit_assignment_expression(it),
1384            Expression::AwaitExpression(it) => visitor.visit_await_expression(it),
1385            Expression::BinaryExpression(it) => visitor.visit_binary_expression(it),
1386            Expression::CallExpression(it) => visitor.visit_call_expression(it),
1387            Expression::ChainExpression(it) => visitor.visit_chain_expression(it),
1388            Expression::ClassExpression(it) => visitor.visit_class(it),
1389            Expression::ConditionalExpression(it) => visitor.visit_conditional_expression(it),
1390            Expression::FunctionExpression(it) => {
1391                let flags = ScopeFlags::Function;
1392                visitor.visit_function(it, flags)
1393            }
1394            Expression::ImportExpression(it) => visitor.visit_import_expression(it),
1395            Expression::LogicalExpression(it) => visitor.visit_logical_expression(it),
1396            Expression::NewExpression(it) => visitor.visit_new_expression(it),
1397            Expression::ObjectExpression(it) => visitor.visit_object_expression(it),
1398            Expression::ParenthesizedExpression(it) => visitor.visit_parenthesized_expression(it),
1399            Expression::SequenceExpression(it) => visitor.visit_sequence_expression(it),
1400            Expression::TaggedTemplateExpression(it) => {
1401                visitor.visit_tagged_template_expression(it)
1402            }
1403            Expression::ThisExpression(it) => visitor.visit_this_expression(it),
1404            Expression::UnaryExpression(it) => visitor.visit_unary_expression(it),
1405            Expression::UpdateExpression(it) => visitor.visit_update_expression(it),
1406            Expression::YieldExpression(it) => visitor.visit_yield_expression(it),
1407            Expression::PrivateInExpression(it) => visitor.visit_private_in_expression(it),
1408            Expression::JSXElement(it) => visitor.visit_jsx_element(it),
1409            Expression::JSXFragment(it) => visitor.visit_jsx_fragment(it),
1410            Expression::TSAsExpression(it) => visitor.visit_ts_as_expression(it),
1411            Expression::TSSatisfiesExpression(it) => visitor.visit_ts_satisfies_expression(it),
1412            Expression::TSTypeAssertion(it) => visitor.visit_ts_type_assertion(it),
1413            Expression::TSNonNullExpression(it) => visitor.visit_ts_non_null_expression(it),
1414            Expression::TSInstantiationExpression(it) => {
1415                visitor.visit_ts_instantiation_expression(it)
1416            }
1417            Expression::V8IntrinsicExpression(it) => visitor.visit_v_8_intrinsic_expression(it),
1418            match_member_expression!(Expression) => {
1419                visitor.visit_member_expression(it.to_member_expression_mut())
1420            }
1421        }
1422    }
1423
1424    #[inline]
1425    pub fn walk_identifier_name<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut IdentifierName<'a>) {
1426        let kind = AstType::IdentifierName;
1427        visitor.enter_node(kind);
1428        visitor.visit_span(&mut it.span);
1429        visitor.leave_node(kind);
1430    }
1431
1432    #[inline]
1433    pub fn walk_identifier_reference<'a, V: VisitMut<'a>>(
1434        visitor: &mut V,
1435        it: &mut IdentifierReference<'a>,
1436    ) {
1437        let kind = AstType::IdentifierReference;
1438        visitor.enter_node(kind);
1439        visitor.visit_span(&mut it.span);
1440        visitor.leave_node(kind);
1441    }
1442
1443    #[inline]
1444    pub fn walk_binding_identifier<'a, V: VisitMut<'a>>(
1445        visitor: &mut V,
1446        it: &mut BindingIdentifier<'a>,
1447    ) {
1448        let kind = AstType::BindingIdentifier;
1449        visitor.enter_node(kind);
1450        visitor.visit_span(&mut it.span);
1451        visitor.leave_node(kind);
1452    }
1453
1454    #[inline]
1455    pub fn walk_label_identifier<'a, V: VisitMut<'a>>(
1456        visitor: &mut V,
1457        it: &mut LabelIdentifier<'a>,
1458    ) {
1459        let kind = AstType::LabelIdentifier;
1460        visitor.enter_node(kind);
1461        visitor.visit_span(&mut it.span);
1462        visitor.leave_node(kind);
1463    }
1464
1465    #[inline]
1466    pub fn walk_this_expression<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ThisExpression) {
1467        let kind = AstType::ThisExpression;
1468        visitor.enter_node(kind);
1469        visitor.visit_span(&mut it.span);
1470        visitor.leave_node(kind);
1471    }
1472
1473    #[inline]
1474    pub fn walk_array_expression<'a, V: VisitMut<'a>>(
1475        visitor: &mut V,
1476        it: &mut ArrayExpression<'a>,
1477    ) {
1478        let kind = AstType::ArrayExpression;
1479        visitor.enter_node(kind);
1480        visitor.visit_span(&mut it.span);
1481        visitor.visit_array_expression_elements(&mut it.elements);
1482        visitor.leave_node(kind);
1483    }
1484
1485    #[inline]
1486    pub fn walk_array_expression_element<'a, V: VisitMut<'a>>(
1487        visitor: &mut V,
1488        it: &mut ArrayExpressionElement<'a>,
1489    ) {
1490        // No `AstType` for this type
1491        match it {
1492            ArrayExpressionElement::SpreadElement(it) => visitor.visit_spread_element(it),
1493            ArrayExpressionElement::Elision(it) => visitor.visit_elision(it),
1494            match_expression!(ArrayExpressionElement) => {
1495                visitor.visit_expression(it.to_expression_mut())
1496            }
1497        }
1498    }
1499
1500    #[inline]
1501    pub fn walk_elision<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Elision) {
1502        let kind = AstType::Elision;
1503        visitor.enter_node(kind);
1504        visitor.visit_span(&mut it.span);
1505        visitor.leave_node(kind);
1506    }
1507
1508    #[inline]
1509    pub fn walk_object_expression<'a, V: VisitMut<'a>>(
1510        visitor: &mut V,
1511        it: &mut ObjectExpression<'a>,
1512    ) {
1513        let kind = AstType::ObjectExpression;
1514        visitor.enter_node(kind);
1515        visitor.visit_span(&mut it.span);
1516        visitor.visit_object_property_kinds(&mut it.properties);
1517        visitor.leave_node(kind);
1518    }
1519
1520    #[inline]
1521    pub fn walk_object_property_kind<'a, V: VisitMut<'a>>(
1522        visitor: &mut V,
1523        it: &mut ObjectPropertyKind<'a>,
1524    ) {
1525        // No `AstType` for this type
1526        match it {
1527            ObjectPropertyKind::ObjectProperty(it) => visitor.visit_object_property(it),
1528            ObjectPropertyKind::SpreadProperty(it) => visitor.visit_spread_element(it),
1529        }
1530    }
1531
1532    #[inline]
1533    pub fn walk_object_property<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ObjectProperty<'a>) {
1534        let kind = AstType::ObjectProperty;
1535        visitor.enter_node(kind);
1536        visitor.visit_span(&mut it.span);
1537        visitor.visit_property_key(&mut it.key);
1538        visitor.visit_expression(&mut it.value);
1539        visitor.leave_node(kind);
1540    }
1541
1542    #[inline]
1543    pub fn walk_property_key<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut PropertyKey<'a>) {
1544        // No `AstType` for this type
1545        match it {
1546            PropertyKey::StaticIdentifier(it) => visitor.visit_identifier_name(it),
1547            PropertyKey::PrivateIdentifier(it) => visitor.visit_private_identifier(it),
1548            match_expression!(PropertyKey) => visitor.visit_expression(it.to_expression_mut()),
1549        }
1550    }
1551
1552    #[inline]
1553    pub fn walk_template_literal<'a, V: VisitMut<'a>>(
1554        visitor: &mut V,
1555        it: &mut TemplateLiteral<'a>,
1556    ) {
1557        let kind = AstType::TemplateLiteral;
1558        visitor.enter_node(kind);
1559        visitor.visit_span(&mut it.span);
1560        visitor.visit_template_elements(&mut it.quasis);
1561        visitor.visit_expressions(&mut it.expressions);
1562        visitor.leave_node(kind);
1563    }
1564
1565    #[inline]
1566    pub fn walk_tagged_template_expression<'a, V: VisitMut<'a>>(
1567        visitor: &mut V,
1568        it: &mut TaggedTemplateExpression<'a>,
1569    ) {
1570        let kind = AstType::TaggedTemplateExpression;
1571        visitor.enter_node(kind);
1572        visitor.visit_span(&mut it.span);
1573        visitor.visit_expression(&mut it.tag);
1574        if let Some(type_arguments) = &mut it.type_arguments {
1575            visitor.visit_ts_type_parameter_instantiation(type_arguments);
1576        }
1577        visitor.visit_template_literal(&mut it.quasi);
1578        visitor.leave_node(kind);
1579    }
1580
1581    #[inline]
1582    pub fn walk_template_element<'a, V: VisitMut<'a>>(
1583        visitor: &mut V,
1584        it: &mut TemplateElement<'a>,
1585    ) {
1586        let kind = AstType::TemplateElement;
1587        visitor.enter_node(kind);
1588        visitor.visit_span(&mut it.span);
1589        visitor.leave_node(kind);
1590    }
1591
1592    #[inline]
1593    pub fn walk_member_expression<'a, V: VisitMut<'a>>(
1594        visitor: &mut V,
1595        it: &mut MemberExpression<'a>,
1596    ) {
1597        // No `AstType` for this type
1598        match it {
1599            MemberExpression::ComputedMemberExpression(it) => {
1600                visitor.visit_computed_member_expression(it)
1601            }
1602            MemberExpression::StaticMemberExpression(it) => {
1603                visitor.visit_static_member_expression(it)
1604            }
1605            MemberExpression::PrivateFieldExpression(it) => {
1606                visitor.visit_private_field_expression(it)
1607            }
1608        }
1609    }
1610
1611    #[inline]
1612    pub fn walk_computed_member_expression<'a, V: VisitMut<'a>>(
1613        visitor: &mut V,
1614        it: &mut ComputedMemberExpression<'a>,
1615    ) {
1616        let kind = AstType::ComputedMemberExpression;
1617        visitor.enter_node(kind);
1618        visitor.visit_span(&mut it.span);
1619        visitor.visit_expression(&mut it.object);
1620        visitor.visit_expression(&mut it.expression);
1621        visitor.leave_node(kind);
1622    }
1623
1624    #[inline]
1625    pub fn walk_static_member_expression<'a, V: VisitMut<'a>>(
1626        visitor: &mut V,
1627        it: &mut StaticMemberExpression<'a>,
1628    ) {
1629        let kind = AstType::StaticMemberExpression;
1630        visitor.enter_node(kind);
1631        visitor.visit_span(&mut it.span);
1632        visitor.visit_expression(&mut it.object);
1633        visitor.visit_identifier_name(&mut it.property);
1634        visitor.leave_node(kind);
1635    }
1636
1637    #[inline]
1638    pub fn walk_private_field_expression<'a, V: VisitMut<'a>>(
1639        visitor: &mut V,
1640        it: &mut PrivateFieldExpression<'a>,
1641    ) {
1642        let kind = AstType::PrivateFieldExpression;
1643        visitor.enter_node(kind);
1644        visitor.visit_span(&mut it.span);
1645        visitor.visit_expression(&mut it.object);
1646        visitor.visit_private_identifier(&mut it.field);
1647        visitor.leave_node(kind);
1648    }
1649
1650    #[inline]
1651    pub fn walk_call_expression<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut CallExpression<'a>) {
1652        let kind = AstType::CallExpression;
1653        visitor.enter_node(kind);
1654        visitor.visit_span(&mut it.span);
1655        visitor.visit_expression(&mut it.callee);
1656        if let Some(type_arguments) = &mut it.type_arguments {
1657            visitor.visit_ts_type_parameter_instantiation(type_arguments);
1658        }
1659        visitor.visit_arguments(&mut it.arguments);
1660        visitor.leave_node(kind);
1661    }
1662
1663    #[inline]
1664    pub fn walk_new_expression<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut NewExpression<'a>) {
1665        let kind = AstType::NewExpression;
1666        visitor.enter_node(kind);
1667        visitor.visit_span(&mut it.span);
1668        visitor.visit_expression(&mut it.callee);
1669        if let Some(type_arguments) = &mut it.type_arguments {
1670            visitor.visit_ts_type_parameter_instantiation(type_arguments);
1671        }
1672        visitor.visit_arguments(&mut it.arguments);
1673        visitor.leave_node(kind);
1674    }
1675
1676    #[inline]
1677    pub fn walk_meta_property<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut MetaProperty<'a>) {
1678        let kind = AstType::MetaProperty;
1679        visitor.enter_node(kind);
1680        visitor.visit_span(&mut it.span);
1681        visitor.visit_identifier_name(&mut it.meta);
1682        visitor.visit_identifier_name(&mut it.property);
1683        visitor.leave_node(kind);
1684    }
1685
1686    #[inline]
1687    pub fn walk_spread_element<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut SpreadElement<'a>) {
1688        let kind = AstType::SpreadElement;
1689        visitor.enter_node(kind);
1690        visitor.visit_span(&mut it.span);
1691        visitor.visit_expression(&mut it.argument);
1692        visitor.leave_node(kind);
1693    }
1694
1695    #[inline]
1696    pub fn walk_argument<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Argument<'a>) {
1697        let kind = AstType::Argument;
1698        visitor.enter_node(kind);
1699        match it {
1700            Argument::SpreadElement(it) => visitor.visit_spread_element(it),
1701            match_expression!(Argument) => visitor.visit_expression(it.to_expression_mut()),
1702        }
1703        visitor.leave_node(kind);
1704    }
1705
1706    #[inline]
1707    pub fn walk_update_expression<'a, V: VisitMut<'a>>(
1708        visitor: &mut V,
1709        it: &mut UpdateExpression<'a>,
1710    ) {
1711        let kind = AstType::UpdateExpression;
1712        visitor.enter_node(kind);
1713        visitor.visit_span(&mut it.span);
1714        visitor.visit_simple_assignment_target(&mut it.argument);
1715        visitor.leave_node(kind);
1716    }
1717
1718    #[inline]
1719    pub fn walk_unary_expression<'a, V: VisitMut<'a>>(
1720        visitor: &mut V,
1721        it: &mut UnaryExpression<'a>,
1722    ) {
1723        let kind = AstType::UnaryExpression;
1724        visitor.enter_node(kind);
1725        visitor.visit_span(&mut it.span);
1726        visitor.visit_expression(&mut it.argument);
1727        visitor.leave_node(kind);
1728    }
1729
1730    #[inline]
1731    pub fn walk_binary_expression<'a, V: VisitMut<'a>>(
1732        visitor: &mut V,
1733        it: &mut BinaryExpression<'a>,
1734    ) {
1735        let kind = AstType::BinaryExpression;
1736        visitor.enter_node(kind);
1737        visitor.visit_span(&mut it.span);
1738        visitor.visit_expression(&mut it.left);
1739        visitor.visit_expression(&mut it.right);
1740        visitor.leave_node(kind);
1741    }
1742
1743    #[inline]
1744    pub fn walk_private_in_expression<'a, V: VisitMut<'a>>(
1745        visitor: &mut V,
1746        it: &mut PrivateInExpression<'a>,
1747    ) {
1748        let kind = AstType::PrivateInExpression;
1749        visitor.enter_node(kind);
1750        visitor.visit_span(&mut it.span);
1751        visitor.visit_private_identifier(&mut it.left);
1752        visitor.visit_expression(&mut it.right);
1753        visitor.leave_node(kind);
1754    }
1755
1756    #[inline]
1757    pub fn walk_logical_expression<'a, V: VisitMut<'a>>(
1758        visitor: &mut V,
1759        it: &mut LogicalExpression<'a>,
1760    ) {
1761        let kind = AstType::LogicalExpression;
1762        visitor.enter_node(kind);
1763        visitor.visit_span(&mut it.span);
1764        visitor.visit_expression(&mut it.left);
1765        visitor.visit_expression(&mut it.right);
1766        visitor.leave_node(kind);
1767    }
1768
1769    #[inline]
1770    pub fn walk_conditional_expression<'a, V: VisitMut<'a>>(
1771        visitor: &mut V,
1772        it: &mut ConditionalExpression<'a>,
1773    ) {
1774        let kind = AstType::ConditionalExpression;
1775        visitor.enter_node(kind);
1776        visitor.visit_span(&mut it.span);
1777        visitor.visit_expression(&mut it.test);
1778        visitor.visit_expression(&mut it.consequent);
1779        visitor.visit_expression(&mut it.alternate);
1780        visitor.leave_node(kind);
1781    }
1782
1783    #[inline]
1784    pub fn walk_assignment_expression<'a, V: VisitMut<'a>>(
1785        visitor: &mut V,
1786        it: &mut AssignmentExpression<'a>,
1787    ) {
1788        let kind = AstType::AssignmentExpression;
1789        visitor.enter_node(kind);
1790        visitor.visit_span(&mut it.span);
1791        visitor.visit_assignment_target(&mut it.left);
1792        visitor.visit_expression(&mut it.right);
1793        visitor.leave_node(kind);
1794    }
1795
1796    #[inline]
1797    pub fn walk_assignment_target<'a, V: VisitMut<'a>>(
1798        visitor: &mut V,
1799        it: &mut AssignmentTarget<'a>,
1800    ) {
1801        // No `AstType` for this type
1802        match it {
1803            match_simple_assignment_target!(AssignmentTarget) => {
1804                visitor.visit_simple_assignment_target(it.to_simple_assignment_target_mut())
1805            }
1806            match_assignment_target_pattern!(AssignmentTarget) => {
1807                visitor.visit_assignment_target_pattern(it.to_assignment_target_pattern_mut())
1808            }
1809        }
1810    }
1811
1812    pub fn walk_simple_assignment_target<'a, V: VisitMut<'a>>(
1813        visitor: &mut V,
1814        it: &mut SimpleAssignmentTarget<'a>,
1815    ) {
1816        // No `AstType` for this type
1817        match it {
1818            SimpleAssignmentTarget::AssignmentTargetIdentifier(it) => {
1819                visitor.visit_identifier_reference(it)
1820            }
1821            SimpleAssignmentTarget::TSAsExpression(it) => visitor.visit_ts_as_expression(it),
1822            SimpleAssignmentTarget::TSSatisfiesExpression(it) => {
1823                visitor.visit_ts_satisfies_expression(it)
1824            }
1825            SimpleAssignmentTarget::TSNonNullExpression(it) => {
1826                visitor.visit_ts_non_null_expression(it)
1827            }
1828            SimpleAssignmentTarget::TSTypeAssertion(it) => visitor.visit_ts_type_assertion(it),
1829            match_member_expression!(SimpleAssignmentTarget) => {
1830                visitor.visit_member_expression(it.to_member_expression_mut())
1831            }
1832        }
1833    }
1834
1835    #[inline]
1836    pub fn walk_assignment_target_pattern<'a, V: VisitMut<'a>>(
1837        visitor: &mut V,
1838        it: &mut AssignmentTargetPattern<'a>,
1839    ) {
1840        // No `AstType` for this type
1841        match it {
1842            AssignmentTargetPattern::ArrayAssignmentTarget(it) => {
1843                visitor.visit_array_assignment_target(it)
1844            }
1845            AssignmentTargetPattern::ObjectAssignmentTarget(it) => {
1846                visitor.visit_object_assignment_target(it)
1847            }
1848        }
1849    }
1850
1851    #[inline]
1852    pub fn walk_array_assignment_target<'a, V: VisitMut<'a>>(
1853        visitor: &mut V,
1854        it: &mut ArrayAssignmentTarget<'a>,
1855    ) {
1856        let kind = AstType::ArrayAssignmentTarget;
1857        visitor.enter_node(kind);
1858        visitor.visit_span(&mut it.span);
1859        for el in it.elements.iter_mut().flatten() {
1860            visitor.visit_assignment_target_maybe_default(el);
1861        }
1862        if let Some(rest) = &mut it.rest {
1863            visitor.visit_assignment_target_rest(rest);
1864        }
1865        visitor.leave_node(kind);
1866    }
1867
1868    #[inline]
1869    pub fn walk_object_assignment_target<'a, V: VisitMut<'a>>(
1870        visitor: &mut V,
1871        it: &mut ObjectAssignmentTarget<'a>,
1872    ) {
1873        let kind = AstType::ObjectAssignmentTarget;
1874        visitor.enter_node(kind);
1875        visitor.visit_span(&mut it.span);
1876        visitor.visit_assignment_target_properties(&mut it.properties);
1877        if let Some(rest) = &mut it.rest {
1878            visitor.visit_assignment_target_rest(rest);
1879        }
1880        visitor.leave_node(kind);
1881    }
1882
1883    #[inline]
1884    pub fn walk_assignment_target_rest<'a, V: VisitMut<'a>>(
1885        visitor: &mut V,
1886        it: &mut AssignmentTargetRest<'a>,
1887    ) {
1888        let kind = AstType::AssignmentTargetRest;
1889        visitor.enter_node(kind);
1890        visitor.visit_span(&mut it.span);
1891        visitor.visit_assignment_target(&mut it.target);
1892        visitor.leave_node(kind);
1893    }
1894
1895    #[inline]
1896    pub fn walk_assignment_target_maybe_default<'a, V: VisitMut<'a>>(
1897        visitor: &mut V,
1898        it: &mut AssignmentTargetMaybeDefault<'a>,
1899    ) {
1900        // No `AstType` for this type
1901        match it {
1902            AssignmentTargetMaybeDefault::AssignmentTargetWithDefault(it) => {
1903                visitor.visit_assignment_target_with_default(it)
1904            }
1905            match_assignment_target!(AssignmentTargetMaybeDefault) => {
1906                visitor.visit_assignment_target(it.to_assignment_target_mut())
1907            }
1908        }
1909    }
1910
1911    #[inline]
1912    pub fn walk_assignment_target_with_default<'a, V: VisitMut<'a>>(
1913        visitor: &mut V,
1914        it: &mut AssignmentTargetWithDefault<'a>,
1915    ) {
1916        let kind = AstType::AssignmentTargetWithDefault;
1917        visitor.enter_node(kind);
1918        visitor.visit_span(&mut it.span);
1919        visitor.visit_assignment_target(&mut it.binding);
1920        visitor.visit_expression(&mut it.init);
1921        visitor.leave_node(kind);
1922    }
1923
1924    #[inline]
1925    pub fn walk_assignment_target_property<'a, V: VisitMut<'a>>(
1926        visitor: &mut V,
1927        it: &mut AssignmentTargetProperty<'a>,
1928    ) {
1929        // No `AstType` for this type
1930        match it {
1931            AssignmentTargetProperty::AssignmentTargetPropertyIdentifier(it) => {
1932                visitor.visit_assignment_target_property_identifier(it)
1933            }
1934            AssignmentTargetProperty::AssignmentTargetPropertyProperty(it) => {
1935                visitor.visit_assignment_target_property_property(it)
1936            }
1937        }
1938    }
1939
1940    #[inline]
1941    pub fn walk_assignment_target_property_identifier<'a, V: VisitMut<'a>>(
1942        visitor: &mut V,
1943        it: &mut AssignmentTargetPropertyIdentifier<'a>,
1944    ) {
1945        let kind = AstType::AssignmentTargetPropertyIdentifier;
1946        visitor.enter_node(kind);
1947        visitor.visit_span(&mut it.span);
1948        visitor.visit_identifier_reference(&mut it.binding);
1949        if let Some(init) = &mut it.init {
1950            visitor.visit_expression(init);
1951        }
1952        visitor.leave_node(kind);
1953    }
1954
1955    #[inline]
1956    pub fn walk_assignment_target_property_property<'a, V: VisitMut<'a>>(
1957        visitor: &mut V,
1958        it: &mut AssignmentTargetPropertyProperty<'a>,
1959    ) {
1960        let kind = AstType::AssignmentTargetPropertyProperty;
1961        visitor.enter_node(kind);
1962        visitor.visit_span(&mut it.span);
1963        visitor.visit_property_key(&mut it.name);
1964        visitor.visit_assignment_target_maybe_default(&mut it.binding);
1965        visitor.leave_node(kind);
1966    }
1967
1968    #[inline]
1969    pub fn walk_sequence_expression<'a, V: VisitMut<'a>>(
1970        visitor: &mut V,
1971        it: &mut SequenceExpression<'a>,
1972    ) {
1973        let kind = AstType::SequenceExpression;
1974        visitor.enter_node(kind);
1975        visitor.visit_span(&mut it.span);
1976        visitor.visit_expressions(&mut it.expressions);
1977        visitor.leave_node(kind);
1978    }
1979
1980    #[inline]
1981    pub fn walk_super<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Super) {
1982        let kind = AstType::Super;
1983        visitor.enter_node(kind);
1984        visitor.visit_span(&mut it.span);
1985        visitor.leave_node(kind);
1986    }
1987
1988    #[inline]
1989    pub fn walk_await_expression<'a, V: VisitMut<'a>>(
1990        visitor: &mut V,
1991        it: &mut AwaitExpression<'a>,
1992    ) {
1993        let kind = AstType::AwaitExpression;
1994        visitor.enter_node(kind);
1995        visitor.visit_span(&mut it.span);
1996        visitor.visit_expression(&mut it.argument);
1997        visitor.leave_node(kind);
1998    }
1999
2000    #[inline]
2001    pub fn walk_chain_expression<'a, V: VisitMut<'a>>(
2002        visitor: &mut V,
2003        it: &mut ChainExpression<'a>,
2004    ) {
2005        let kind = AstType::ChainExpression;
2006        visitor.enter_node(kind);
2007        visitor.visit_span(&mut it.span);
2008        visitor.visit_chain_element(&mut it.expression);
2009        visitor.leave_node(kind);
2010    }
2011
2012    #[inline]
2013    pub fn walk_chain_element<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ChainElement<'a>) {
2014        // No `AstType` for this type
2015        match it {
2016            ChainElement::CallExpression(it) => visitor.visit_call_expression(it),
2017            ChainElement::TSNonNullExpression(it) => visitor.visit_ts_non_null_expression(it),
2018            match_member_expression!(ChainElement) => {
2019                visitor.visit_member_expression(it.to_member_expression_mut())
2020            }
2021        }
2022    }
2023
2024    #[inline]
2025    pub fn walk_parenthesized_expression<'a, V: VisitMut<'a>>(
2026        visitor: &mut V,
2027        it: &mut ParenthesizedExpression<'a>,
2028    ) {
2029        let kind = AstType::ParenthesizedExpression;
2030        visitor.enter_node(kind);
2031        visitor.visit_span(&mut it.span);
2032        visitor.visit_expression(&mut it.expression);
2033        visitor.leave_node(kind);
2034    }
2035
2036    pub fn walk_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Statement<'a>) {
2037        // No `AstType` for this type
2038        match it {
2039            Statement::BlockStatement(it) => visitor.visit_block_statement(it),
2040            Statement::BreakStatement(it) => visitor.visit_break_statement(it),
2041            Statement::ContinueStatement(it) => visitor.visit_continue_statement(it),
2042            Statement::DebuggerStatement(it) => visitor.visit_debugger_statement(it),
2043            Statement::DoWhileStatement(it) => visitor.visit_do_while_statement(it),
2044            Statement::EmptyStatement(it) => visitor.visit_empty_statement(it),
2045            Statement::ExpressionStatement(it) => visitor.visit_expression_statement(it),
2046            Statement::ForInStatement(it) => visitor.visit_for_in_statement(it),
2047            Statement::ForOfStatement(it) => visitor.visit_for_of_statement(it),
2048            Statement::ForStatement(it) => visitor.visit_for_statement(it),
2049            Statement::IfStatement(it) => visitor.visit_if_statement(it),
2050            Statement::LabeledStatement(it) => visitor.visit_labeled_statement(it),
2051            Statement::ReturnStatement(it) => visitor.visit_return_statement(it),
2052            Statement::SwitchStatement(it) => visitor.visit_switch_statement(it),
2053            Statement::ThrowStatement(it) => visitor.visit_throw_statement(it),
2054            Statement::TryStatement(it) => visitor.visit_try_statement(it),
2055            Statement::WhileStatement(it) => visitor.visit_while_statement(it),
2056            Statement::WithStatement(it) => visitor.visit_with_statement(it),
2057            match_declaration!(Statement) => visitor.visit_declaration(it.to_declaration_mut()),
2058            match_module_declaration!(Statement) => {
2059                visitor.visit_module_declaration(it.to_module_declaration_mut())
2060            }
2061        }
2062    }
2063
2064    #[inline]
2065    pub fn walk_directive<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Directive<'a>) {
2066        let kind = AstType::Directive;
2067        visitor.enter_node(kind);
2068        visitor.visit_span(&mut it.span);
2069        visitor.visit_string_literal(&mut it.expression);
2070        visitor.leave_node(kind);
2071    }
2072
2073    #[inline]
2074    pub fn walk_hashbang<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Hashbang<'a>) {
2075        let kind = AstType::Hashbang;
2076        visitor.enter_node(kind);
2077        visitor.visit_span(&mut it.span);
2078        visitor.leave_node(kind);
2079    }
2080
2081    #[inline]
2082    pub fn walk_block_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut BlockStatement<'a>) {
2083        let kind = AstType::BlockStatement;
2084        visitor.enter_node(kind);
2085        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2086        visitor.visit_span(&mut it.span);
2087        visitor.visit_statements(&mut it.body);
2088        visitor.leave_scope();
2089        visitor.leave_node(kind);
2090    }
2091
2092    pub fn walk_declaration<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Declaration<'a>) {
2093        // No `AstType` for this type
2094        match it {
2095            Declaration::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
2096            Declaration::FunctionDeclaration(it) => {
2097                let flags = ScopeFlags::Function;
2098                visitor.visit_function(it, flags)
2099            }
2100            Declaration::ClassDeclaration(it) => visitor.visit_class(it),
2101            Declaration::TSTypeAliasDeclaration(it) => visitor.visit_ts_type_alias_declaration(it),
2102            Declaration::TSInterfaceDeclaration(it) => visitor.visit_ts_interface_declaration(it),
2103            Declaration::TSEnumDeclaration(it) => visitor.visit_ts_enum_declaration(it),
2104            Declaration::TSModuleDeclaration(it) => visitor.visit_ts_module_declaration(it),
2105            Declaration::TSImportEqualsDeclaration(it) => {
2106                visitor.visit_ts_import_equals_declaration(it)
2107            }
2108        }
2109    }
2110
2111    #[inline]
2112    pub fn walk_variable_declaration<'a, V: VisitMut<'a>>(
2113        visitor: &mut V,
2114        it: &mut VariableDeclaration<'a>,
2115    ) {
2116        let kind = AstType::VariableDeclaration;
2117        visitor.enter_node(kind);
2118        visitor.visit_span(&mut it.span);
2119        visitor.visit_variable_declarators(&mut it.declarations);
2120        visitor.leave_node(kind);
2121    }
2122
2123    #[inline]
2124    pub fn walk_variable_declarator<'a, V: VisitMut<'a>>(
2125        visitor: &mut V,
2126        it: &mut VariableDeclarator<'a>,
2127    ) {
2128        let kind = AstType::VariableDeclarator;
2129        visitor.enter_node(kind);
2130        visitor.visit_span(&mut it.span);
2131        visitor.visit_binding_pattern(&mut it.id);
2132        if let Some(init) = &mut it.init {
2133            visitor.visit_expression(init);
2134        }
2135        visitor.leave_node(kind);
2136    }
2137
2138    #[inline]
2139    pub fn walk_empty_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut EmptyStatement) {
2140        let kind = AstType::EmptyStatement;
2141        visitor.enter_node(kind);
2142        visitor.visit_span(&mut it.span);
2143        visitor.leave_node(kind);
2144    }
2145
2146    #[inline]
2147    pub fn walk_expression_statement<'a, V: VisitMut<'a>>(
2148        visitor: &mut V,
2149        it: &mut ExpressionStatement<'a>,
2150    ) {
2151        let kind = AstType::ExpressionStatement;
2152        visitor.enter_node(kind);
2153        visitor.visit_span(&mut it.span);
2154        visitor.visit_expression(&mut it.expression);
2155        visitor.leave_node(kind);
2156    }
2157
2158    #[inline]
2159    pub fn walk_if_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut IfStatement<'a>) {
2160        let kind = AstType::IfStatement;
2161        visitor.enter_node(kind);
2162        visitor.visit_span(&mut it.span);
2163        visitor.visit_expression(&mut it.test);
2164        visitor.visit_statement(&mut it.consequent);
2165        if let Some(alternate) = &mut it.alternate {
2166            visitor.visit_statement(alternate);
2167        }
2168        visitor.leave_node(kind);
2169    }
2170
2171    #[inline]
2172    pub fn walk_do_while_statement<'a, V: VisitMut<'a>>(
2173        visitor: &mut V,
2174        it: &mut DoWhileStatement<'a>,
2175    ) {
2176        let kind = AstType::DoWhileStatement;
2177        visitor.enter_node(kind);
2178        visitor.visit_span(&mut it.span);
2179        visitor.visit_statement(&mut it.body);
2180        visitor.visit_expression(&mut it.test);
2181        visitor.leave_node(kind);
2182    }
2183
2184    #[inline]
2185    pub fn walk_while_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut WhileStatement<'a>) {
2186        let kind = AstType::WhileStatement;
2187        visitor.enter_node(kind);
2188        visitor.visit_span(&mut it.span);
2189        visitor.visit_expression(&mut it.test);
2190        visitor.visit_statement(&mut it.body);
2191        visitor.leave_node(kind);
2192    }
2193
2194    #[inline]
2195    pub fn walk_for_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ForStatement<'a>) {
2196        let kind = AstType::ForStatement;
2197        visitor.enter_node(kind);
2198        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2199        visitor.visit_span(&mut it.span);
2200        if let Some(init) = &mut it.init {
2201            visitor.visit_for_statement_init(init);
2202        }
2203        if let Some(test) = &mut it.test {
2204            visitor.visit_expression(test);
2205        }
2206        if let Some(update) = &mut it.update {
2207            visitor.visit_expression(update);
2208        }
2209        visitor.visit_statement(&mut it.body);
2210        visitor.leave_scope();
2211        visitor.leave_node(kind);
2212    }
2213
2214    #[inline]
2215    pub fn walk_for_statement_init<'a, V: VisitMut<'a>>(
2216        visitor: &mut V,
2217        it: &mut ForStatementInit<'a>,
2218    ) {
2219        // No `AstType` for this type
2220        match it {
2221            ForStatementInit::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
2222            match_expression!(ForStatementInit) => visitor.visit_expression(it.to_expression_mut()),
2223        }
2224    }
2225
2226    #[inline]
2227    pub fn walk_for_in_statement<'a, V: VisitMut<'a>>(
2228        visitor: &mut V,
2229        it: &mut ForInStatement<'a>,
2230    ) {
2231        let kind = AstType::ForInStatement;
2232        visitor.enter_node(kind);
2233        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2234        visitor.visit_span(&mut it.span);
2235        visitor.visit_for_statement_left(&mut it.left);
2236        visitor.visit_expression(&mut it.right);
2237        visitor.visit_statement(&mut it.body);
2238        visitor.leave_scope();
2239        visitor.leave_node(kind);
2240    }
2241
2242    #[inline]
2243    pub fn walk_for_statement_left<'a, V: VisitMut<'a>>(
2244        visitor: &mut V,
2245        it: &mut ForStatementLeft<'a>,
2246    ) {
2247        // No `AstType` for this type
2248        match it {
2249            ForStatementLeft::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
2250            match_assignment_target!(ForStatementLeft) => {
2251                visitor.visit_assignment_target(it.to_assignment_target_mut())
2252            }
2253        }
2254    }
2255
2256    #[inline]
2257    pub fn walk_for_of_statement<'a, V: VisitMut<'a>>(
2258        visitor: &mut V,
2259        it: &mut ForOfStatement<'a>,
2260    ) {
2261        let kind = AstType::ForOfStatement;
2262        visitor.enter_node(kind);
2263        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2264        visitor.visit_span(&mut it.span);
2265        visitor.visit_for_statement_left(&mut it.left);
2266        visitor.visit_expression(&mut it.right);
2267        visitor.visit_statement(&mut it.body);
2268        visitor.leave_scope();
2269        visitor.leave_node(kind);
2270    }
2271
2272    #[inline]
2273    pub fn walk_continue_statement<'a, V: VisitMut<'a>>(
2274        visitor: &mut V,
2275        it: &mut ContinueStatement<'a>,
2276    ) {
2277        let kind = AstType::ContinueStatement;
2278        visitor.enter_node(kind);
2279        visitor.visit_span(&mut it.span);
2280        if let Some(label) = &mut it.label {
2281            visitor.visit_label_identifier(label);
2282        }
2283        visitor.leave_node(kind);
2284    }
2285
2286    #[inline]
2287    pub fn walk_break_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut BreakStatement<'a>) {
2288        let kind = AstType::BreakStatement;
2289        visitor.enter_node(kind);
2290        visitor.visit_span(&mut it.span);
2291        if let Some(label) = &mut it.label {
2292            visitor.visit_label_identifier(label);
2293        }
2294        visitor.leave_node(kind);
2295    }
2296
2297    #[inline]
2298    pub fn walk_return_statement<'a, V: VisitMut<'a>>(
2299        visitor: &mut V,
2300        it: &mut ReturnStatement<'a>,
2301    ) {
2302        let kind = AstType::ReturnStatement;
2303        visitor.enter_node(kind);
2304        visitor.visit_span(&mut it.span);
2305        if let Some(argument) = &mut it.argument {
2306            visitor.visit_expression(argument);
2307        }
2308        visitor.leave_node(kind);
2309    }
2310
2311    #[inline]
2312    pub fn walk_with_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut WithStatement<'a>) {
2313        let kind = AstType::WithStatement;
2314        visitor.enter_node(kind);
2315        visitor.visit_span(&mut it.span);
2316        visitor.visit_expression(&mut it.object);
2317        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2318        visitor.visit_statement(&mut it.body);
2319        visitor.leave_scope();
2320        visitor.leave_node(kind);
2321    }
2322
2323    #[inline]
2324    pub fn walk_switch_statement<'a, V: VisitMut<'a>>(
2325        visitor: &mut V,
2326        it: &mut SwitchStatement<'a>,
2327    ) {
2328        let kind = AstType::SwitchStatement;
2329        visitor.enter_node(kind);
2330        visitor.visit_span(&mut it.span);
2331        visitor.visit_expression(&mut it.discriminant);
2332        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
2333        visitor.visit_switch_cases(&mut it.cases);
2334        visitor.leave_scope();
2335        visitor.leave_node(kind);
2336    }
2337
2338    #[inline]
2339    pub fn walk_switch_case<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut SwitchCase<'a>) {
2340        let kind = AstType::SwitchCase;
2341        visitor.enter_node(kind);
2342        visitor.visit_span(&mut it.span);
2343        if let Some(test) = &mut it.test {
2344            visitor.visit_expression(test);
2345        }
2346        visitor.visit_statements(&mut it.consequent);
2347        visitor.leave_node(kind);
2348    }
2349
2350    #[inline]
2351    pub fn walk_labeled_statement<'a, V: VisitMut<'a>>(
2352        visitor: &mut V,
2353        it: &mut LabeledStatement<'a>,
2354    ) {
2355        let kind = AstType::LabeledStatement;
2356        visitor.enter_node(kind);
2357        visitor.visit_span(&mut it.span);
2358        visitor.visit_label_identifier(&mut it.label);
2359        visitor.visit_statement(&mut it.body);
2360        visitor.leave_node(kind);
2361    }
2362
2363    #[inline]
2364    pub fn walk_throw_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ThrowStatement<'a>) {
2365        let kind = AstType::ThrowStatement;
2366        visitor.enter_node(kind);
2367        visitor.visit_span(&mut it.span);
2368        visitor.visit_expression(&mut it.argument);
2369        visitor.leave_node(kind);
2370    }
2371
2372    #[inline]
2373    pub fn walk_try_statement<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TryStatement<'a>) {
2374        let kind = AstType::TryStatement;
2375        visitor.enter_node(kind);
2376        visitor.visit_span(&mut it.span);
2377        visitor.visit_block_statement(&mut it.block);
2378        if let Some(handler) = &mut it.handler {
2379            visitor.visit_catch_clause(handler);
2380        }
2381        if let Some(finalizer) = &mut it.finalizer {
2382            visitor.visit_block_statement(finalizer);
2383        }
2384        visitor.leave_node(kind);
2385    }
2386
2387    #[inline]
2388    pub fn walk_catch_clause<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut CatchClause<'a>) {
2389        let kind = AstType::CatchClause;
2390        visitor.enter_node(kind);
2391        visitor.enter_scope(ScopeFlags::CatchClause, &it.scope_id);
2392        visitor.visit_span(&mut it.span);
2393        if let Some(param) = &mut it.param {
2394            visitor.visit_catch_parameter(param);
2395        }
2396        visitor.visit_block_statement(&mut it.body);
2397        visitor.leave_scope();
2398        visitor.leave_node(kind);
2399    }
2400
2401    #[inline]
2402    pub fn walk_catch_parameter<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut CatchParameter<'a>) {
2403        let kind = AstType::CatchParameter;
2404        visitor.enter_node(kind);
2405        visitor.visit_span(&mut it.span);
2406        visitor.visit_binding_pattern(&mut it.pattern);
2407        visitor.leave_node(kind);
2408    }
2409
2410    #[inline]
2411    pub fn walk_debugger_statement<'a, V: VisitMut<'a>>(
2412        visitor: &mut V,
2413        it: &mut DebuggerStatement,
2414    ) {
2415        let kind = AstType::DebuggerStatement;
2416        visitor.enter_node(kind);
2417        visitor.visit_span(&mut it.span);
2418        visitor.leave_node(kind);
2419    }
2420
2421    #[inline]
2422    pub fn walk_binding_pattern<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut BindingPattern<'a>) {
2423        // No `AstType` for this type
2424        visitor.visit_binding_pattern_kind(&mut it.kind);
2425        if let Some(type_annotation) = &mut it.type_annotation {
2426            visitor.visit_ts_type_annotation(type_annotation);
2427        }
2428    }
2429
2430    #[inline]
2431    pub fn walk_binding_pattern_kind<'a, V: VisitMut<'a>>(
2432        visitor: &mut V,
2433        it: &mut BindingPatternKind<'a>,
2434    ) {
2435        // No `AstType` for this type
2436        match it {
2437            BindingPatternKind::BindingIdentifier(it) => visitor.visit_binding_identifier(it),
2438            BindingPatternKind::ObjectPattern(it) => visitor.visit_object_pattern(it),
2439            BindingPatternKind::ArrayPattern(it) => visitor.visit_array_pattern(it),
2440            BindingPatternKind::AssignmentPattern(it) => visitor.visit_assignment_pattern(it),
2441        }
2442    }
2443
2444    #[inline]
2445    pub fn walk_assignment_pattern<'a, V: VisitMut<'a>>(
2446        visitor: &mut V,
2447        it: &mut AssignmentPattern<'a>,
2448    ) {
2449        let kind = AstType::AssignmentPattern;
2450        visitor.enter_node(kind);
2451        visitor.visit_span(&mut it.span);
2452        visitor.visit_binding_pattern(&mut it.left);
2453        visitor.visit_expression(&mut it.right);
2454        visitor.leave_node(kind);
2455    }
2456
2457    #[inline]
2458    pub fn walk_object_pattern<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ObjectPattern<'a>) {
2459        let kind = AstType::ObjectPattern;
2460        visitor.enter_node(kind);
2461        visitor.visit_span(&mut it.span);
2462        visitor.visit_binding_properties(&mut it.properties);
2463        if let Some(rest) = &mut it.rest {
2464            visitor.visit_binding_rest_element(rest);
2465        }
2466        visitor.leave_node(kind);
2467    }
2468
2469    #[inline]
2470    pub fn walk_binding_property<'a, V: VisitMut<'a>>(
2471        visitor: &mut V,
2472        it: &mut BindingProperty<'a>,
2473    ) {
2474        let kind = AstType::BindingProperty;
2475        visitor.enter_node(kind);
2476        visitor.visit_span(&mut it.span);
2477        visitor.visit_property_key(&mut it.key);
2478        visitor.visit_binding_pattern(&mut it.value);
2479        visitor.leave_node(kind);
2480    }
2481
2482    #[inline]
2483    pub fn walk_array_pattern<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ArrayPattern<'a>) {
2484        let kind = AstType::ArrayPattern;
2485        visitor.enter_node(kind);
2486        visitor.visit_span(&mut it.span);
2487        for el in it.elements.iter_mut().flatten() {
2488            visitor.visit_binding_pattern(el);
2489        }
2490        if let Some(rest) = &mut it.rest {
2491            visitor.visit_binding_rest_element(rest);
2492        }
2493        visitor.leave_node(kind);
2494    }
2495
2496    #[inline]
2497    pub fn walk_binding_rest_element<'a, V: VisitMut<'a>>(
2498        visitor: &mut V,
2499        it: &mut BindingRestElement<'a>,
2500    ) {
2501        let kind = AstType::BindingRestElement;
2502        visitor.enter_node(kind);
2503        visitor.visit_span(&mut it.span);
2504        visitor.visit_binding_pattern(&mut it.argument);
2505        visitor.leave_node(kind);
2506    }
2507
2508    pub fn walk_function<'a, V: VisitMut<'a>>(
2509        visitor: &mut V,
2510        it: &mut Function<'a>,
2511        flags: ScopeFlags,
2512    ) {
2513        let kind = AstType::Function;
2514        visitor.enter_node(kind);
2515        visitor.enter_scope(
2516            {
2517                let mut flags = flags;
2518                if it.has_use_strict_directive() {
2519                    flags |= ScopeFlags::StrictMode;
2520                }
2521                flags
2522            },
2523            &it.scope_id,
2524        );
2525        visitor.visit_span(&mut it.span);
2526        if let Some(id) = &mut it.id {
2527            visitor.visit_binding_identifier(id);
2528        }
2529        if let Some(type_parameters) = &mut it.type_parameters {
2530            visitor.visit_ts_type_parameter_declaration(type_parameters);
2531        }
2532        if let Some(this_param) = &mut it.this_param {
2533            visitor.visit_ts_this_parameter(this_param);
2534        }
2535        visitor.visit_formal_parameters(&mut it.params);
2536        if let Some(return_type) = &mut it.return_type {
2537            visitor.visit_ts_type_annotation(return_type);
2538        }
2539        if let Some(body) = &mut it.body {
2540            visitor.visit_function_body(body);
2541        }
2542        visitor.leave_scope();
2543        visitor.leave_node(kind);
2544    }
2545
2546    #[inline]
2547    pub fn walk_formal_parameters<'a, V: VisitMut<'a>>(
2548        visitor: &mut V,
2549        it: &mut FormalParameters<'a>,
2550    ) {
2551        let kind = AstType::FormalParameters;
2552        visitor.enter_node(kind);
2553        visitor.visit_span(&mut it.span);
2554        visitor.visit_formal_parameter_list(&mut it.items);
2555        if let Some(rest) = &mut it.rest {
2556            visitor.visit_binding_rest_element(rest);
2557        }
2558        visitor.leave_node(kind);
2559    }
2560
2561    #[inline]
2562    pub fn walk_formal_parameter<'a, V: VisitMut<'a>>(
2563        visitor: &mut V,
2564        it: &mut FormalParameter<'a>,
2565    ) {
2566        let kind = AstType::FormalParameter;
2567        visitor.enter_node(kind);
2568        visitor.visit_span(&mut it.span);
2569        visitor.visit_decorators(&mut it.decorators);
2570        visitor.visit_binding_pattern(&mut it.pattern);
2571        visitor.leave_node(kind);
2572    }
2573
2574    #[inline]
2575    pub fn walk_function_body<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut FunctionBody<'a>) {
2576        let kind = AstType::FunctionBody;
2577        visitor.enter_node(kind);
2578        visitor.visit_span(&mut it.span);
2579        visitor.visit_directives(&mut it.directives);
2580        visitor.visit_statements(&mut it.statements);
2581        visitor.leave_node(kind);
2582    }
2583
2584    #[inline]
2585    pub fn walk_arrow_function_expression<'a, V: VisitMut<'a>>(
2586        visitor: &mut V,
2587        it: &mut ArrowFunctionExpression<'a>,
2588    ) {
2589        let kind = AstType::ArrowFunctionExpression;
2590        visitor.enter_node(kind);
2591        visitor.enter_scope(
2592            {
2593                let mut flags = ScopeFlags::Function | ScopeFlags::Arrow;
2594                if it.has_use_strict_directive() {
2595                    flags |= ScopeFlags::StrictMode;
2596                }
2597                flags
2598            },
2599            &it.scope_id,
2600        );
2601        visitor.visit_span(&mut it.span);
2602        if let Some(type_parameters) = &mut it.type_parameters {
2603            visitor.visit_ts_type_parameter_declaration(type_parameters);
2604        }
2605        visitor.visit_formal_parameters(&mut it.params);
2606        if let Some(return_type) = &mut it.return_type {
2607            visitor.visit_ts_type_annotation(return_type);
2608        }
2609        visitor.visit_function_body(&mut it.body);
2610        visitor.leave_scope();
2611        visitor.leave_node(kind);
2612    }
2613
2614    #[inline]
2615    pub fn walk_yield_expression<'a, V: VisitMut<'a>>(
2616        visitor: &mut V,
2617        it: &mut YieldExpression<'a>,
2618    ) {
2619        let kind = AstType::YieldExpression;
2620        visitor.enter_node(kind);
2621        visitor.visit_span(&mut it.span);
2622        if let Some(argument) = &mut it.argument {
2623            visitor.visit_expression(argument);
2624        }
2625        visitor.leave_node(kind);
2626    }
2627
2628    pub fn walk_class<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Class<'a>) {
2629        let kind = AstType::Class;
2630        visitor.enter_node(kind);
2631        visitor.visit_span(&mut it.span);
2632        visitor.visit_decorators(&mut it.decorators);
2633        if let Some(id) = &mut it.id {
2634            visitor.visit_binding_identifier(id);
2635        }
2636        visitor.enter_scope(ScopeFlags::StrictMode, &it.scope_id);
2637        if let Some(type_parameters) = &mut it.type_parameters {
2638            visitor.visit_ts_type_parameter_declaration(type_parameters);
2639        }
2640        if let Some(super_class) = &mut it.super_class {
2641            visitor.visit_expression(super_class);
2642        }
2643        if let Some(super_type_arguments) = &mut it.super_type_arguments {
2644            visitor.visit_ts_type_parameter_instantiation(super_type_arguments);
2645        }
2646        visitor.visit_ts_class_implements_list(&mut it.implements);
2647        visitor.visit_class_body(&mut it.body);
2648        visitor.leave_scope();
2649        visitor.leave_node(kind);
2650    }
2651
2652    #[inline]
2653    pub fn walk_class_body<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ClassBody<'a>) {
2654        let kind = AstType::ClassBody;
2655        visitor.enter_node(kind);
2656        visitor.visit_span(&mut it.span);
2657        visitor.visit_class_elements(&mut it.body);
2658        visitor.leave_node(kind);
2659    }
2660
2661    #[inline]
2662    pub fn walk_class_element<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut ClassElement<'a>) {
2663        // No `AstType` for this type
2664        match it {
2665            ClassElement::StaticBlock(it) => visitor.visit_static_block(it),
2666            ClassElement::MethodDefinition(it) => visitor.visit_method_definition(it),
2667            ClassElement::PropertyDefinition(it) => visitor.visit_property_definition(it),
2668            ClassElement::AccessorProperty(it) => visitor.visit_accessor_property(it),
2669            ClassElement::TSIndexSignature(it) => visitor.visit_ts_index_signature(it),
2670        }
2671    }
2672
2673    #[inline]
2674    pub fn walk_method_definition<'a, V: VisitMut<'a>>(
2675        visitor: &mut V,
2676        it: &mut MethodDefinition<'a>,
2677    ) {
2678        let kind = AstType::MethodDefinition;
2679        visitor.enter_node(kind);
2680        visitor.visit_span(&mut it.span);
2681        visitor.visit_decorators(&mut it.decorators);
2682        visitor.visit_property_key(&mut it.key);
2683        {
2684            let flags = match it.kind {
2685                MethodDefinitionKind::Get => ScopeFlags::Function | ScopeFlags::GetAccessor,
2686                MethodDefinitionKind::Set => ScopeFlags::Function | ScopeFlags::SetAccessor,
2687                MethodDefinitionKind::Constructor => ScopeFlags::Function | ScopeFlags::Constructor,
2688                MethodDefinitionKind::Method => ScopeFlags::Function,
2689            };
2690            visitor.visit_function(&mut it.value, flags);
2691        }
2692        visitor.leave_node(kind);
2693    }
2694
2695    #[inline]
2696    pub fn walk_property_definition<'a, V: VisitMut<'a>>(
2697        visitor: &mut V,
2698        it: &mut PropertyDefinition<'a>,
2699    ) {
2700        let kind = AstType::PropertyDefinition;
2701        visitor.enter_node(kind);
2702        visitor.visit_span(&mut it.span);
2703        visitor.visit_decorators(&mut it.decorators);
2704        visitor.visit_property_key(&mut it.key);
2705        if let Some(type_annotation) = &mut it.type_annotation {
2706            visitor.visit_ts_type_annotation(type_annotation);
2707        }
2708        if let Some(value) = &mut it.value {
2709            visitor.visit_expression(value);
2710        }
2711        visitor.leave_node(kind);
2712    }
2713
2714    #[inline]
2715    pub fn walk_private_identifier<'a, V: VisitMut<'a>>(
2716        visitor: &mut V,
2717        it: &mut PrivateIdentifier<'a>,
2718    ) {
2719        let kind = AstType::PrivateIdentifier;
2720        visitor.enter_node(kind);
2721        visitor.visit_span(&mut it.span);
2722        visitor.leave_node(kind);
2723    }
2724
2725    #[inline]
2726    pub fn walk_static_block<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut StaticBlock<'a>) {
2727        let kind = AstType::StaticBlock;
2728        visitor.enter_node(kind);
2729        visitor.enter_scope(ScopeFlags::ClassStaticBlock, &it.scope_id);
2730        visitor.visit_span(&mut it.span);
2731        visitor.visit_statements(&mut it.body);
2732        visitor.leave_scope();
2733        visitor.leave_node(kind);
2734    }
2735
2736    pub fn walk_module_declaration<'a, V: VisitMut<'a>>(
2737        visitor: &mut V,
2738        it: &mut ModuleDeclaration<'a>,
2739    ) {
2740        // No `AstType` for this type
2741        match it {
2742            ModuleDeclaration::ImportDeclaration(it) => visitor.visit_import_declaration(it),
2743            ModuleDeclaration::ExportAllDeclaration(it) => visitor.visit_export_all_declaration(it),
2744            ModuleDeclaration::ExportDefaultDeclaration(it) => {
2745                visitor.visit_export_default_declaration(it)
2746            }
2747            ModuleDeclaration::ExportNamedDeclaration(it) => {
2748                visitor.visit_export_named_declaration(it)
2749            }
2750            ModuleDeclaration::TSExportAssignment(it) => visitor.visit_ts_export_assignment(it),
2751            ModuleDeclaration::TSNamespaceExportDeclaration(it) => {
2752                visitor.visit_ts_namespace_export_declaration(it)
2753            }
2754        }
2755    }
2756
2757    #[inline]
2758    pub fn walk_accessor_property<'a, V: VisitMut<'a>>(
2759        visitor: &mut V,
2760        it: &mut AccessorProperty<'a>,
2761    ) {
2762        let kind = AstType::AccessorProperty;
2763        visitor.enter_node(kind);
2764        visitor.visit_span(&mut it.span);
2765        visitor.visit_decorators(&mut it.decorators);
2766        visitor.visit_property_key(&mut it.key);
2767        if let Some(type_annotation) = &mut it.type_annotation {
2768            visitor.visit_ts_type_annotation(type_annotation);
2769        }
2770        if let Some(value) = &mut it.value {
2771            visitor.visit_expression(value);
2772        }
2773        visitor.leave_node(kind);
2774    }
2775
2776    #[inline]
2777    pub fn walk_import_expression<'a, V: VisitMut<'a>>(
2778        visitor: &mut V,
2779        it: &mut ImportExpression<'a>,
2780    ) {
2781        let kind = AstType::ImportExpression;
2782        visitor.enter_node(kind);
2783        visitor.visit_span(&mut it.span);
2784        visitor.visit_expression(&mut it.source);
2785        if let Some(options) = &mut it.options {
2786            visitor.visit_expression(options);
2787        }
2788        visitor.leave_node(kind);
2789    }
2790
2791    #[inline]
2792    pub fn walk_import_declaration<'a, V: VisitMut<'a>>(
2793        visitor: &mut V,
2794        it: &mut ImportDeclaration<'a>,
2795    ) {
2796        let kind = AstType::ImportDeclaration;
2797        visitor.enter_node(kind);
2798        visitor.visit_span(&mut it.span);
2799        if let Some(specifiers) = &mut it.specifiers {
2800            visitor.visit_import_declaration_specifiers(specifiers);
2801        }
2802        visitor.visit_string_literal(&mut it.source);
2803        if let Some(with_clause) = &mut it.with_clause {
2804            visitor.visit_with_clause(with_clause);
2805        }
2806        visitor.leave_node(kind);
2807    }
2808
2809    #[inline]
2810    pub fn walk_import_declaration_specifier<'a, V: VisitMut<'a>>(
2811        visitor: &mut V,
2812        it: &mut ImportDeclarationSpecifier<'a>,
2813    ) {
2814        // No `AstType` for this type
2815        match it {
2816            ImportDeclarationSpecifier::ImportSpecifier(it) => visitor.visit_import_specifier(it),
2817            ImportDeclarationSpecifier::ImportDefaultSpecifier(it) => {
2818                visitor.visit_import_default_specifier(it)
2819            }
2820            ImportDeclarationSpecifier::ImportNamespaceSpecifier(it) => {
2821                visitor.visit_import_namespace_specifier(it)
2822            }
2823        }
2824    }
2825
2826    #[inline]
2827    pub fn walk_import_specifier<'a, V: VisitMut<'a>>(
2828        visitor: &mut V,
2829        it: &mut ImportSpecifier<'a>,
2830    ) {
2831        let kind = AstType::ImportSpecifier;
2832        visitor.enter_node(kind);
2833        visitor.visit_span(&mut it.span);
2834        visitor.visit_module_export_name(&mut it.imported);
2835        visitor.visit_binding_identifier(&mut it.local);
2836        visitor.leave_node(kind);
2837    }
2838
2839    #[inline]
2840    pub fn walk_import_default_specifier<'a, V: VisitMut<'a>>(
2841        visitor: &mut V,
2842        it: &mut ImportDefaultSpecifier<'a>,
2843    ) {
2844        let kind = AstType::ImportDefaultSpecifier;
2845        visitor.enter_node(kind);
2846        visitor.visit_span(&mut it.span);
2847        visitor.visit_binding_identifier(&mut it.local);
2848        visitor.leave_node(kind);
2849    }
2850
2851    #[inline]
2852    pub fn walk_import_namespace_specifier<'a, V: VisitMut<'a>>(
2853        visitor: &mut V,
2854        it: &mut ImportNamespaceSpecifier<'a>,
2855    ) {
2856        let kind = AstType::ImportNamespaceSpecifier;
2857        visitor.enter_node(kind);
2858        visitor.visit_span(&mut it.span);
2859        visitor.visit_binding_identifier(&mut it.local);
2860        visitor.leave_node(kind);
2861    }
2862
2863    #[inline]
2864    pub fn walk_with_clause<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut WithClause<'a>) {
2865        let kind = AstType::WithClause;
2866        visitor.enter_node(kind);
2867        visitor.visit_span(&mut it.span);
2868        visitor.visit_import_attributes(&mut it.with_entries);
2869        visitor.leave_node(kind);
2870    }
2871
2872    #[inline]
2873    pub fn walk_import_attribute<'a, V: VisitMut<'a>>(
2874        visitor: &mut V,
2875        it: &mut ImportAttribute<'a>,
2876    ) {
2877        let kind = AstType::ImportAttribute;
2878        visitor.enter_node(kind);
2879        visitor.visit_span(&mut it.span);
2880        visitor.visit_import_attribute_key(&mut it.key);
2881        visitor.visit_string_literal(&mut it.value);
2882        visitor.leave_node(kind);
2883    }
2884
2885    #[inline]
2886    pub fn walk_import_attribute_key<'a, V: VisitMut<'a>>(
2887        visitor: &mut V,
2888        it: &mut ImportAttributeKey<'a>,
2889    ) {
2890        // No `AstType` for this type
2891        match it {
2892            ImportAttributeKey::Identifier(it) => visitor.visit_identifier_name(it),
2893            ImportAttributeKey::StringLiteral(it) => visitor.visit_string_literal(it),
2894        }
2895    }
2896
2897    #[inline]
2898    pub fn walk_export_named_declaration<'a, V: VisitMut<'a>>(
2899        visitor: &mut V,
2900        it: &mut ExportNamedDeclaration<'a>,
2901    ) {
2902        let kind = AstType::ExportNamedDeclaration;
2903        visitor.enter_node(kind);
2904        visitor.visit_span(&mut it.span);
2905        if let Some(declaration) = &mut it.declaration {
2906            visitor.visit_declaration(declaration);
2907        }
2908        visitor.visit_export_specifiers(&mut it.specifiers);
2909        if let Some(source) = &mut it.source {
2910            visitor.visit_string_literal(source);
2911        }
2912        if let Some(with_clause) = &mut it.with_clause {
2913            visitor.visit_with_clause(with_clause);
2914        }
2915        visitor.leave_node(kind);
2916    }
2917
2918    #[inline]
2919    pub fn walk_export_default_declaration<'a, V: VisitMut<'a>>(
2920        visitor: &mut V,
2921        it: &mut ExportDefaultDeclaration<'a>,
2922    ) {
2923        let kind = AstType::ExportDefaultDeclaration;
2924        visitor.enter_node(kind);
2925        visitor.visit_span(&mut it.span);
2926        visitor.visit_export_default_declaration_kind(&mut it.declaration);
2927        visitor.leave_node(kind);
2928    }
2929
2930    #[inline]
2931    pub fn walk_export_all_declaration<'a, V: VisitMut<'a>>(
2932        visitor: &mut V,
2933        it: &mut ExportAllDeclaration<'a>,
2934    ) {
2935        let kind = AstType::ExportAllDeclaration;
2936        visitor.enter_node(kind);
2937        visitor.visit_span(&mut it.span);
2938        if let Some(exported) = &mut it.exported {
2939            visitor.visit_module_export_name(exported);
2940        }
2941        visitor.visit_string_literal(&mut it.source);
2942        if let Some(with_clause) = &mut it.with_clause {
2943            visitor.visit_with_clause(with_clause);
2944        }
2945        visitor.leave_node(kind);
2946    }
2947
2948    #[inline]
2949    pub fn walk_export_specifier<'a, V: VisitMut<'a>>(
2950        visitor: &mut V,
2951        it: &mut ExportSpecifier<'a>,
2952    ) {
2953        let kind = AstType::ExportSpecifier;
2954        visitor.enter_node(kind);
2955        visitor.visit_span(&mut it.span);
2956        visitor.visit_module_export_name(&mut it.local);
2957        visitor.visit_module_export_name(&mut it.exported);
2958        visitor.leave_node(kind);
2959    }
2960
2961    #[inline]
2962    pub fn walk_export_default_declaration_kind<'a, V: VisitMut<'a>>(
2963        visitor: &mut V,
2964        it: &mut ExportDefaultDeclarationKind<'a>,
2965    ) {
2966        // No `AstType` for this type
2967        match it {
2968            ExportDefaultDeclarationKind::FunctionDeclaration(it) => {
2969                let flags = ScopeFlags::Function;
2970                visitor.visit_function(it, flags)
2971            }
2972            ExportDefaultDeclarationKind::ClassDeclaration(it) => visitor.visit_class(it),
2973            ExportDefaultDeclarationKind::TSInterfaceDeclaration(it) => {
2974                visitor.visit_ts_interface_declaration(it)
2975            }
2976            match_expression!(ExportDefaultDeclarationKind) => {
2977                visitor.visit_expression(it.to_expression_mut())
2978            }
2979        }
2980    }
2981
2982    #[inline]
2983    pub fn walk_module_export_name<'a, V: VisitMut<'a>>(
2984        visitor: &mut V,
2985        it: &mut ModuleExportName<'a>,
2986    ) {
2987        // No `AstType` for this type
2988        match it {
2989            ModuleExportName::IdentifierName(it) => visitor.visit_identifier_name(it),
2990            ModuleExportName::IdentifierReference(it) => visitor.visit_identifier_reference(it),
2991            ModuleExportName::StringLiteral(it) => visitor.visit_string_literal(it),
2992        }
2993    }
2994
2995    #[inline]
2996    pub fn walk_v_8_intrinsic_expression<'a, V: VisitMut<'a>>(
2997        visitor: &mut V,
2998        it: &mut V8IntrinsicExpression<'a>,
2999    ) {
3000        let kind = AstType::V8IntrinsicExpression;
3001        visitor.enter_node(kind);
3002        visitor.visit_span(&mut it.span);
3003        visitor.visit_identifier_name(&mut it.name);
3004        visitor.visit_arguments(&mut it.arguments);
3005        visitor.leave_node(kind);
3006    }
3007
3008    #[inline]
3009    pub fn walk_boolean_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut BooleanLiteral) {
3010        let kind = AstType::BooleanLiteral;
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_null_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut NullLiteral) {
3018        let kind = AstType::NullLiteral;
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_numeric_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut NumericLiteral<'a>) {
3026        let kind = AstType::NumericLiteral;
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_string_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut StringLiteral<'a>) {
3034        let kind = AstType::StringLiteral;
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_big_int_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut BigIntLiteral<'a>) {
3042        let kind = AstType::BigIntLiteral;
3043        visitor.enter_node(kind);
3044        visitor.visit_span(&mut it.span);
3045        visitor.leave_node(kind);
3046    }
3047
3048    #[inline]
3049    pub fn walk_reg_exp_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut RegExpLiteral<'a>) {
3050        let kind = AstType::RegExpLiteral;
3051        visitor.enter_node(kind);
3052        visitor.visit_span(&mut it.span);
3053        visitor.leave_node(kind);
3054    }
3055
3056    #[inline]
3057    pub fn walk_jsx_element<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXElement<'a>) {
3058        let kind = AstType::JSXElement;
3059        visitor.enter_node(kind);
3060        visitor.visit_span(&mut it.span);
3061        visitor.visit_jsx_opening_element(&mut it.opening_element);
3062        visitor.visit_jsx_children(&mut it.children);
3063        if let Some(closing_element) = &mut it.closing_element {
3064            visitor.visit_jsx_closing_element(closing_element);
3065        }
3066        visitor.leave_node(kind);
3067    }
3068
3069    #[inline]
3070    pub fn walk_jsx_opening_element<'a, V: VisitMut<'a>>(
3071        visitor: &mut V,
3072        it: &mut JSXOpeningElement<'a>,
3073    ) {
3074        let kind = AstType::JSXOpeningElement;
3075        visitor.enter_node(kind);
3076        visitor.visit_span(&mut it.span);
3077        visitor.visit_jsx_element_name(&mut it.name);
3078        if let Some(type_arguments) = &mut it.type_arguments {
3079            visitor.visit_ts_type_parameter_instantiation(type_arguments);
3080        }
3081        visitor.visit_jsx_attribute_items(&mut it.attributes);
3082        visitor.leave_node(kind);
3083    }
3084
3085    #[inline]
3086    pub fn walk_jsx_closing_element<'a, V: VisitMut<'a>>(
3087        visitor: &mut V,
3088        it: &mut JSXClosingElement<'a>,
3089    ) {
3090        let kind = AstType::JSXClosingElement;
3091        visitor.enter_node(kind);
3092        visitor.visit_span(&mut it.span);
3093        visitor.visit_jsx_element_name(&mut it.name);
3094        visitor.leave_node(kind);
3095    }
3096
3097    #[inline]
3098    pub fn walk_jsx_fragment<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXFragment<'a>) {
3099        let kind = AstType::JSXFragment;
3100        visitor.enter_node(kind);
3101        visitor.visit_span(&mut it.span);
3102        visitor.visit_jsx_opening_fragment(&mut it.opening_fragment);
3103        visitor.visit_jsx_children(&mut it.children);
3104        visitor.visit_jsx_closing_fragment(&mut it.closing_fragment);
3105        visitor.leave_node(kind);
3106    }
3107
3108    #[inline]
3109    pub fn walk_jsx_opening_fragment<'a, V: VisitMut<'a>>(
3110        visitor: &mut V,
3111        it: &mut JSXOpeningFragment,
3112    ) {
3113        let kind = AstType::JSXOpeningFragment;
3114        visitor.enter_node(kind);
3115        visitor.visit_span(&mut it.span);
3116        visitor.leave_node(kind);
3117    }
3118
3119    #[inline]
3120    pub fn walk_jsx_closing_fragment<'a, V: VisitMut<'a>>(
3121        visitor: &mut V,
3122        it: &mut JSXClosingFragment,
3123    ) {
3124        let kind = AstType::JSXClosingFragment;
3125        visitor.enter_node(kind);
3126        visitor.visit_span(&mut it.span);
3127        visitor.leave_node(kind);
3128    }
3129
3130    #[inline]
3131    pub fn walk_jsx_element_name<'a, V: VisitMut<'a>>(
3132        visitor: &mut V,
3133        it: &mut JSXElementName<'a>,
3134    ) {
3135        // No `AstType` for this type
3136        match it {
3137            JSXElementName::Identifier(it) => visitor.visit_jsx_identifier(it),
3138            JSXElementName::IdentifierReference(it) => visitor.visit_identifier_reference(it),
3139            JSXElementName::NamespacedName(it) => visitor.visit_jsx_namespaced_name(it),
3140            JSXElementName::MemberExpression(it) => visitor.visit_jsx_member_expression(it),
3141            JSXElementName::ThisExpression(it) => visitor.visit_this_expression(it),
3142        }
3143    }
3144
3145    #[inline]
3146    pub fn walk_jsx_namespaced_name<'a, V: VisitMut<'a>>(
3147        visitor: &mut V,
3148        it: &mut JSXNamespacedName<'a>,
3149    ) {
3150        let kind = AstType::JSXNamespacedName;
3151        visitor.enter_node(kind);
3152        visitor.visit_span(&mut it.span);
3153        visitor.visit_jsx_identifier(&mut it.namespace);
3154        visitor.visit_jsx_identifier(&mut it.name);
3155        visitor.leave_node(kind);
3156    }
3157
3158    #[inline]
3159    pub fn walk_jsx_member_expression<'a, V: VisitMut<'a>>(
3160        visitor: &mut V,
3161        it: &mut JSXMemberExpression<'a>,
3162    ) {
3163        let kind = AstType::JSXMemberExpression;
3164        visitor.enter_node(kind);
3165        visitor.visit_span(&mut it.span);
3166        visitor.visit_jsx_member_expression_object(&mut it.object);
3167        visitor.visit_jsx_identifier(&mut it.property);
3168        visitor.leave_node(kind);
3169    }
3170
3171    #[inline]
3172    pub fn walk_jsx_member_expression_object<'a, V: VisitMut<'a>>(
3173        visitor: &mut V,
3174        it: &mut JSXMemberExpressionObject<'a>,
3175    ) {
3176        // No `AstType` for this type
3177        match it {
3178            JSXMemberExpressionObject::IdentifierReference(it) => {
3179                visitor.visit_identifier_reference(it)
3180            }
3181            JSXMemberExpressionObject::MemberExpression(it) => {
3182                visitor.visit_jsx_member_expression(it)
3183            }
3184            JSXMemberExpressionObject::ThisExpression(it) => visitor.visit_this_expression(it),
3185        }
3186    }
3187
3188    #[inline]
3189    pub fn walk_jsx_expression_container<'a, V: VisitMut<'a>>(
3190        visitor: &mut V,
3191        it: &mut JSXExpressionContainer<'a>,
3192    ) {
3193        let kind = AstType::JSXExpressionContainer;
3194        visitor.enter_node(kind);
3195        visitor.visit_span(&mut it.span);
3196        visitor.visit_jsx_expression(&mut it.expression);
3197        visitor.leave_node(kind);
3198    }
3199
3200    #[inline]
3201    pub fn walk_jsx_expression<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXExpression<'a>) {
3202        // No `AstType` for this type
3203        match it {
3204            JSXExpression::EmptyExpression(it) => visitor.visit_jsx_empty_expression(it),
3205            match_expression!(JSXExpression) => visitor.visit_expression(it.to_expression_mut()),
3206        }
3207    }
3208
3209    #[inline]
3210    pub fn walk_jsx_empty_expression<'a, V: VisitMut<'a>>(
3211        visitor: &mut V,
3212        it: &mut JSXEmptyExpression,
3213    ) {
3214        let kind = AstType::JSXEmptyExpression;
3215        visitor.enter_node(kind);
3216        visitor.visit_span(&mut it.span);
3217        visitor.leave_node(kind);
3218    }
3219
3220    #[inline]
3221    pub fn walk_jsx_attribute_item<'a, V: VisitMut<'a>>(
3222        visitor: &mut V,
3223        it: &mut JSXAttributeItem<'a>,
3224    ) {
3225        // No `AstType` for this type
3226        match it {
3227            JSXAttributeItem::Attribute(it) => visitor.visit_jsx_attribute(it),
3228            JSXAttributeItem::SpreadAttribute(it) => visitor.visit_jsx_spread_attribute(it),
3229        }
3230    }
3231
3232    #[inline]
3233    pub fn walk_jsx_attribute<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXAttribute<'a>) {
3234        let kind = AstType::JSXAttribute;
3235        visitor.enter_node(kind);
3236        visitor.visit_span(&mut it.span);
3237        visitor.visit_jsx_attribute_name(&mut it.name);
3238        if let Some(value) = &mut it.value {
3239            visitor.visit_jsx_attribute_value(value);
3240        }
3241        visitor.leave_node(kind);
3242    }
3243
3244    #[inline]
3245    pub fn walk_jsx_spread_attribute<'a, V: VisitMut<'a>>(
3246        visitor: &mut V,
3247        it: &mut JSXSpreadAttribute<'a>,
3248    ) {
3249        let kind = AstType::JSXSpreadAttribute;
3250        visitor.enter_node(kind);
3251        visitor.visit_span(&mut it.span);
3252        visitor.visit_expression(&mut it.argument);
3253        visitor.leave_node(kind);
3254    }
3255
3256    #[inline]
3257    pub fn walk_jsx_attribute_name<'a, V: VisitMut<'a>>(
3258        visitor: &mut V,
3259        it: &mut JSXAttributeName<'a>,
3260    ) {
3261        // No `AstType` for this type
3262        match it {
3263            JSXAttributeName::Identifier(it) => visitor.visit_jsx_identifier(it),
3264            JSXAttributeName::NamespacedName(it) => visitor.visit_jsx_namespaced_name(it),
3265        }
3266    }
3267
3268    #[inline]
3269    pub fn walk_jsx_attribute_value<'a, V: VisitMut<'a>>(
3270        visitor: &mut V,
3271        it: &mut JSXAttributeValue<'a>,
3272    ) {
3273        // No `AstType` for this type
3274        match it {
3275            JSXAttributeValue::StringLiteral(it) => visitor.visit_string_literal(it),
3276            JSXAttributeValue::ExpressionContainer(it) => {
3277                visitor.visit_jsx_expression_container(it)
3278            }
3279            JSXAttributeValue::Element(it) => visitor.visit_jsx_element(it),
3280            JSXAttributeValue::Fragment(it) => visitor.visit_jsx_fragment(it),
3281        }
3282    }
3283
3284    #[inline]
3285    pub fn walk_jsx_identifier<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXIdentifier<'a>) {
3286        let kind = AstType::JSXIdentifier;
3287        visitor.enter_node(kind);
3288        visitor.visit_span(&mut it.span);
3289        visitor.leave_node(kind);
3290    }
3291
3292    #[inline]
3293    pub fn walk_jsx_child<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXChild<'a>) {
3294        // No `AstType` for this type
3295        match it {
3296            JSXChild::Text(it) => visitor.visit_jsx_text(it),
3297            JSXChild::Element(it) => visitor.visit_jsx_element(it),
3298            JSXChild::Fragment(it) => visitor.visit_jsx_fragment(it),
3299            JSXChild::ExpressionContainer(it) => visitor.visit_jsx_expression_container(it),
3300            JSXChild::Spread(it) => visitor.visit_jsx_spread_child(it),
3301        }
3302    }
3303
3304    #[inline]
3305    pub fn walk_jsx_spread_child<'a, V: VisitMut<'a>>(
3306        visitor: &mut V,
3307        it: &mut JSXSpreadChild<'a>,
3308    ) {
3309        let kind = AstType::JSXSpreadChild;
3310        visitor.enter_node(kind);
3311        visitor.visit_span(&mut it.span);
3312        visitor.visit_expression(&mut it.expression);
3313        visitor.leave_node(kind);
3314    }
3315
3316    #[inline]
3317    pub fn walk_jsx_text<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut JSXText<'a>) {
3318        let kind = AstType::JSXText;
3319        visitor.enter_node(kind);
3320        visitor.visit_span(&mut it.span);
3321        visitor.leave_node(kind);
3322    }
3323
3324    #[inline]
3325    pub fn walk_ts_this_parameter<'a, V: VisitMut<'a>>(
3326        visitor: &mut V,
3327        it: &mut TSThisParameter<'a>,
3328    ) {
3329        let kind = AstType::TSThisParameter;
3330        visitor.enter_node(kind);
3331        visitor.visit_span(&mut it.span);
3332        visitor.visit_span(&mut it.this_span);
3333        if let Some(type_annotation) = &mut it.type_annotation {
3334            visitor.visit_ts_type_annotation(type_annotation);
3335        }
3336        visitor.leave_node(kind);
3337    }
3338
3339    #[inline]
3340    pub fn walk_ts_enum_declaration<'a, V: VisitMut<'a>>(
3341        visitor: &mut V,
3342        it: &mut TSEnumDeclaration<'a>,
3343    ) {
3344        let kind = AstType::TSEnumDeclaration;
3345        visitor.enter_node(kind);
3346        visitor.visit_span(&mut it.span);
3347        visitor.visit_binding_identifier(&mut it.id);
3348        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3349        visitor.visit_ts_enum_body(&mut it.body);
3350        visitor.leave_scope();
3351        visitor.leave_node(kind);
3352    }
3353
3354    #[inline]
3355    pub fn walk_ts_enum_body<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSEnumBody<'a>) {
3356        let kind = AstType::TSEnumBody;
3357        visitor.enter_node(kind);
3358        visitor.visit_span(&mut it.span);
3359        visitor.visit_ts_enum_members(&mut it.members);
3360        visitor.leave_node(kind);
3361    }
3362
3363    #[inline]
3364    pub fn walk_ts_enum_member<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSEnumMember<'a>) {
3365        let kind = AstType::TSEnumMember;
3366        visitor.enter_node(kind);
3367        visitor.visit_span(&mut it.span);
3368        visitor.visit_ts_enum_member_name(&mut it.id);
3369        if let Some(initializer) = &mut it.initializer {
3370            visitor.visit_expression(initializer);
3371        }
3372        visitor.leave_node(kind);
3373    }
3374
3375    #[inline]
3376    pub fn walk_ts_enum_member_name<'a, V: VisitMut<'a>>(
3377        visitor: &mut V,
3378        it: &mut TSEnumMemberName<'a>,
3379    ) {
3380        // No `AstType` for this type
3381        match it {
3382            TSEnumMemberName::Identifier(it) => visitor.visit_identifier_name(it),
3383            TSEnumMemberName::String(it) => visitor.visit_string_literal(it),
3384            TSEnumMemberName::ComputedString(it) => visitor.visit_string_literal(it),
3385            TSEnumMemberName::ComputedTemplateString(it) => visitor.visit_template_literal(it),
3386        }
3387    }
3388
3389    #[inline]
3390    pub fn walk_ts_type_annotation<'a, V: VisitMut<'a>>(
3391        visitor: &mut V,
3392        it: &mut TSTypeAnnotation<'a>,
3393    ) {
3394        let kind = AstType::TSTypeAnnotation;
3395        visitor.enter_node(kind);
3396        visitor.visit_span(&mut it.span);
3397        visitor.visit_ts_type(&mut it.type_annotation);
3398        visitor.leave_node(kind);
3399    }
3400
3401    #[inline]
3402    pub fn walk_ts_literal_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSLiteralType<'a>) {
3403        let kind = AstType::TSLiteralType;
3404        visitor.enter_node(kind);
3405        visitor.visit_span(&mut it.span);
3406        visitor.visit_ts_literal(&mut it.literal);
3407        visitor.leave_node(kind);
3408    }
3409
3410    pub fn walk_ts_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSLiteral<'a>) {
3411        // No `AstType` for this type
3412        match it {
3413            TSLiteral::BooleanLiteral(it) => visitor.visit_boolean_literal(it),
3414            TSLiteral::NumericLiteral(it) => visitor.visit_numeric_literal(it),
3415            TSLiteral::BigIntLiteral(it) => visitor.visit_big_int_literal(it),
3416            TSLiteral::StringLiteral(it) => visitor.visit_string_literal(it),
3417            TSLiteral::TemplateLiteral(it) => visitor.visit_template_literal(it),
3418            TSLiteral::UnaryExpression(it) => visitor.visit_unary_expression(it),
3419        }
3420    }
3421
3422    pub fn walk_ts_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSType<'a>) {
3423        // No `AstType` for this type
3424        match it {
3425            TSType::TSAnyKeyword(it) => visitor.visit_ts_any_keyword(it),
3426            TSType::TSBigIntKeyword(it) => visitor.visit_ts_big_int_keyword(it),
3427            TSType::TSBooleanKeyword(it) => visitor.visit_ts_boolean_keyword(it),
3428            TSType::TSIntrinsicKeyword(it) => visitor.visit_ts_intrinsic_keyword(it),
3429            TSType::TSNeverKeyword(it) => visitor.visit_ts_never_keyword(it),
3430            TSType::TSNullKeyword(it) => visitor.visit_ts_null_keyword(it),
3431            TSType::TSNumberKeyword(it) => visitor.visit_ts_number_keyword(it),
3432            TSType::TSObjectKeyword(it) => visitor.visit_ts_object_keyword(it),
3433            TSType::TSStringKeyword(it) => visitor.visit_ts_string_keyword(it),
3434            TSType::TSSymbolKeyword(it) => visitor.visit_ts_symbol_keyword(it),
3435            TSType::TSUndefinedKeyword(it) => visitor.visit_ts_undefined_keyword(it),
3436            TSType::TSUnknownKeyword(it) => visitor.visit_ts_unknown_keyword(it),
3437            TSType::TSVoidKeyword(it) => visitor.visit_ts_void_keyword(it),
3438            TSType::TSArrayType(it) => visitor.visit_ts_array_type(it),
3439            TSType::TSConditionalType(it) => visitor.visit_ts_conditional_type(it),
3440            TSType::TSConstructorType(it) => visitor.visit_ts_constructor_type(it),
3441            TSType::TSFunctionType(it) => visitor.visit_ts_function_type(it),
3442            TSType::TSImportType(it) => visitor.visit_ts_import_type(it),
3443            TSType::TSIndexedAccessType(it) => visitor.visit_ts_indexed_access_type(it),
3444            TSType::TSInferType(it) => visitor.visit_ts_infer_type(it),
3445            TSType::TSIntersectionType(it) => visitor.visit_ts_intersection_type(it),
3446            TSType::TSLiteralType(it) => visitor.visit_ts_literal_type(it),
3447            TSType::TSMappedType(it) => visitor.visit_ts_mapped_type(it),
3448            TSType::TSNamedTupleMember(it) => visitor.visit_ts_named_tuple_member(it),
3449            TSType::TSTemplateLiteralType(it) => visitor.visit_ts_template_literal_type(it),
3450            TSType::TSThisType(it) => visitor.visit_ts_this_type(it),
3451            TSType::TSTupleType(it) => visitor.visit_ts_tuple_type(it),
3452            TSType::TSTypeLiteral(it) => visitor.visit_ts_type_literal(it),
3453            TSType::TSTypeOperatorType(it) => visitor.visit_ts_type_operator(it),
3454            TSType::TSTypePredicate(it) => visitor.visit_ts_type_predicate(it),
3455            TSType::TSTypeQuery(it) => visitor.visit_ts_type_query(it),
3456            TSType::TSTypeReference(it) => visitor.visit_ts_type_reference(it),
3457            TSType::TSUnionType(it) => visitor.visit_ts_union_type(it),
3458            TSType::TSParenthesizedType(it) => visitor.visit_ts_parenthesized_type(it),
3459            TSType::JSDocNullableType(it) => visitor.visit_js_doc_nullable_type(it),
3460            TSType::JSDocNonNullableType(it) => visitor.visit_js_doc_non_nullable_type(it),
3461            TSType::JSDocUnknownType(it) => visitor.visit_js_doc_unknown_type(it),
3462        }
3463    }
3464
3465    #[inline]
3466    pub fn walk_ts_conditional_type<'a, V: VisitMut<'a>>(
3467        visitor: &mut V,
3468        it: &mut TSConditionalType<'a>,
3469    ) {
3470        let kind = AstType::TSConditionalType;
3471        visitor.enter_node(kind);
3472        visitor.visit_span(&mut it.span);
3473        visitor.visit_ts_type(&mut it.check_type);
3474        visitor.enter_scope(ScopeFlags::TsConditional, &it.scope_id);
3475        visitor.visit_ts_type(&mut it.extends_type);
3476        visitor.visit_ts_type(&mut it.true_type);
3477        visitor.leave_scope();
3478        visitor.visit_ts_type(&mut it.false_type);
3479        visitor.leave_node(kind);
3480    }
3481
3482    #[inline]
3483    pub fn walk_ts_union_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSUnionType<'a>) {
3484        let kind = AstType::TSUnionType;
3485        visitor.enter_node(kind);
3486        visitor.visit_span(&mut it.span);
3487        visitor.visit_ts_types(&mut it.types);
3488        visitor.leave_node(kind);
3489    }
3490
3491    #[inline]
3492    pub fn walk_ts_intersection_type<'a, V: VisitMut<'a>>(
3493        visitor: &mut V,
3494        it: &mut TSIntersectionType<'a>,
3495    ) {
3496        let kind = AstType::TSIntersectionType;
3497        visitor.enter_node(kind);
3498        visitor.visit_span(&mut it.span);
3499        visitor.visit_ts_types(&mut it.types);
3500        visitor.leave_node(kind);
3501    }
3502
3503    #[inline]
3504    pub fn walk_ts_parenthesized_type<'a, V: VisitMut<'a>>(
3505        visitor: &mut V,
3506        it: &mut TSParenthesizedType<'a>,
3507    ) {
3508        let kind = AstType::TSParenthesizedType;
3509        visitor.enter_node(kind);
3510        visitor.visit_span(&mut it.span);
3511        visitor.visit_ts_type(&mut it.type_annotation);
3512        visitor.leave_node(kind);
3513    }
3514
3515    #[inline]
3516    pub fn walk_ts_type_operator<'a, V: VisitMut<'a>>(
3517        visitor: &mut V,
3518        it: &mut TSTypeOperator<'a>,
3519    ) {
3520        let kind = AstType::TSTypeOperator;
3521        visitor.enter_node(kind);
3522        visitor.visit_span(&mut it.span);
3523        visitor.visit_ts_type(&mut it.type_annotation);
3524        visitor.leave_node(kind);
3525    }
3526
3527    #[inline]
3528    pub fn walk_ts_array_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSArrayType<'a>) {
3529        let kind = AstType::TSArrayType;
3530        visitor.enter_node(kind);
3531        visitor.visit_span(&mut it.span);
3532        visitor.visit_ts_type(&mut it.element_type);
3533        visitor.leave_node(kind);
3534    }
3535
3536    #[inline]
3537    pub fn walk_ts_indexed_access_type<'a, V: VisitMut<'a>>(
3538        visitor: &mut V,
3539        it: &mut TSIndexedAccessType<'a>,
3540    ) {
3541        let kind = AstType::TSIndexedAccessType;
3542        visitor.enter_node(kind);
3543        visitor.visit_span(&mut it.span);
3544        visitor.visit_ts_type(&mut it.object_type);
3545        visitor.visit_ts_type(&mut it.index_type);
3546        visitor.leave_node(kind);
3547    }
3548
3549    #[inline]
3550    pub fn walk_ts_tuple_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSTupleType<'a>) {
3551        let kind = AstType::TSTupleType;
3552        visitor.enter_node(kind);
3553        visitor.visit_span(&mut it.span);
3554        visitor.visit_ts_tuple_elements(&mut it.element_types);
3555        visitor.leave_node(kind);
3556    }
3557
3558    #[inline]
3559    pub fn walk_ts_named_tuple_member<'a, V: VisitMut<'a>>(
3560        visitor: &mut V,
3561        it: &mut TSNamedTupleMember<'a>,
3562    ) {
3563        let kind = AstType::TSNamedTupleMember;
3564        visitor.enter_node(kind);
3565        visitor.visit_span(&mut it.span);
3566        visitor.visit_identifier_name(&mut it.label);
3567        visitor.visit_ts_tuple_element(&mut it.element_type);
3568        visitor.leave_node(kind);
3569    }
3570
3571    #[inline]
3572    pub fn walk_ts_optional_type<'a, V: VisitMut<'a>>(
3573        visitor: &mut V,
3574        it: &mut TSOptionalType<'a>,
3575    ) {
3576        let kind = AstType::TSOptionalType;
3577        visitor.enter_node(kind);
3578        visitor.visit_span(&mut it.span);
3579        visitor.visit_ts_type(&mut it.type_annotation);
3580        visitor.leave_node(kind);
3581    }
3582
3583    #[inline]
3584    pub fn walk_ts_rest_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSRestType<'a>) {
3585        let kind = AstType::TSRestType;
3586        visitor.enter_node(kind);
3587        visitor.visit_span(&mut it.span);
3588        visitor.visit_ts_type(&mut it.type_annotation);
3589        visitor.leave_node(kind);
3590    }
3591
3592    #[inline]
3593    pub fn walk_ts_tuple_element<'a, V: VisitMut<'a>>(
3594        visitor: &mut V,
3595        it: &mut TSTupleElement<'a>,
3596    ) {
3597        // No `AstType` for this type
3598        match it {
3599            TSTupleElement::TSOptionalType(it) => visitor.visit_ts_optional_type(it),
3600            TSTupleElement::TSRestType(it) => visitor.visit_ts_rest_type(it),
3601            match_ts_type!(TSTupleElement) => visitor.visit_ts_type(it.to_ts_type_mut()),
3602        }
3603    }
3604
3605    #[inline]
3606    pub fn walk_ts_any_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSAnyKeyword) {
3607        let kind = AstType::TSAnyKeyword;
3608        visitor.enter_node(kind);
3609        visitor.visit_span(&mut it.span);
3610        visitor.leave_node(kind);
3611    }
3612
3613    #[inline]
3614    pub fn walk_ts_string_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSStringKeyword) {
3615        let kind = AstType::TSStringKeyword;
3616        visitor.enter_node(kind);
3617        visitor.visit_span(&mut it.span);
3618        visitor.leave_node(kind);
3619    }
3620
3621    #[inline]
3622    pub fn walk_ts_boolean_keyword<'a, V: VisitMut<'a>>(
3623        visitor: &mut V,
3624        it: &mut TSBooleanKeyword,
3625    ) {
3626        let kind = AstType::TSBooleanKeyword;
3627        visitor.enter_node(kind);
3628        visitor.visit_span(&mut it.span);
3629        visitor.leave_node(kind);
3630    }
3631
3632    #[inline]
3633    pub fn walk_ts_number_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSNumberKeyword) {
3634        let kind = AstType::TSNumberKeyword;
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_never_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSNeverKeyword) {
3642        let kind = AstType::TSNeverKeyword;
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_intrinsic_keyword<'a, V: VisitMut<'a>>(
3650        visitor: &mut V,
3651        it: &mut TSIntrinsicKeyword,
3652    ) {
3653        let kind = AstType::TSIntrinsicKeyword;
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_unknown_keyword<'a, V: VisitMut<'a>>(
3661        visitor: &mut V,
3662        it: &mut TSUnknownKeyword,
3663    ) {
3664        let kind = AstType::TSUnknownKeyword;
3665        visitor.enter_node(kind);
3666        visitor.visit_span(&mut it.span);
3667        visitor.leave_node(kind);
3668    }
3669
3670    #[inline]
3671    pub fn walk_ts_null_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSNullKeyword) {
3672        let kind = AstType::TSNullKeyword;
3673        visitor.enter_node(kind);
3674        visitor.visit_span(&mut it.span);
3675        visitor.leave_node(kind);
3676    }
3677
3678    #[inline]
3679    pub fn walk_ts_undefined_keyword<'a, V: VisitMut<'a>>(
3680        visitor: &mut V,
3681        it: &mut TSUndefinedKeyword,
3682    ) {
3683        let kind = AstType::TSUndefinedKeyword;
3684        visitor.enter_node(kind);
3685        visitor.visit_span(&mut it.span);
3686        visitor.leave_node(kind);
3687    }
3688
3689    #[inline]
3690    pub fn walk_ts_void_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSVoidKeyword) {
3691        let kind = AstType::TSVoidKeyword;
3692        visitor.enter_node(kind);
3693        visitor.visit_span(&mut it.span);
3694        visitor.leave_node(kind);
3695    }
3696
3697    #[inline]
3698    pub fn walk_ts_symbol_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSSymbolKeyword) {
3699        let kind = AstType::TSSymbolKeyword;
3700        visitor.enter_node(kind);
3701        visitor.visit_span(&mut it.span);
3702        visitor.leave_node(kind);
3703    }
3704
3705    #[inline]
3706    pub fn walk_ts_this_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSThisType) {
3707        let kind = AstType::TSThisType;
3708        visitor.enter_node(kind);
3709        visitor.visit_span(&mut it.span);
3710        visitor.leave_node(kind);
3711    }
3712
3713    #[inline]
3714    pub fn walk_ts_object_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSObjectKeyword) {
3715        let kind = AstType::TSObjectKeyword;
3716        visitor.enter_node(kind);
3717        visitor.visit_span(&mut it.span);
3718        visitor.leave_node(kind);
3719    }
3720
3721    #[inline]
3722    pub fn walk_ts_big_int_keyword<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSBigIntKeyword) {
3723        let kind = AstType::TSBigIntKeyword;
3724        visitor.enter_node(kind);
3725        visitor.visit_span(&mut it.span);
3726        visitor.leave_node(kind);
3727    }
3728
3729    #[inline]
3730    pub fn walk_ts_type_reference<'a, V: VisitMut<'a>>(
3731        visitor: &mut V,
3732        it: &mut TSTypeReference<'a>,
3733    ) {
3734        let kind = AstType::TSTypeReference;
3735        visitor.enter_node(kind);
3736        visitor.visit_span(&mut it.span);
3737        visitor.visit_ts_type_name(&mut it.type_name);
3738        if let Some(type_arguments) = &mut it.type_arguments {
3739            visitor.visit_ts_type_parameter_instantiation(type_arguments);
3740        }
3741        visitor.leave_node(kind);
3742    }
3743
3744    #[inline]
3745    pub fn walk_ts_type_name<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSTypeName<'a>) {
3746        // No `AstType` for this type
3747        match it {
3748            TSTypeName::IdentifierReference(it) => visitor.visit_identifier_reference(it),
3749            TSTypeName::QualifiedName(it) => visitor.visit_ts_qualified_name(it),
3750            TSTypeName::ThisExpression(it) => visitor.visit_this_expression(it),
3751        }
3752    }
3753
3754    #[inline]
3755    pub fn walk_ts_qualified_name<'a, V: VisitMut<'a>>(
3756        visitor: &mut V,
3757        it: &mut TSQualifiedName<'a>,
3758    ) {
3759        let kind = AstType::TSQualifiedName;
3760        visitor.enter_node(kind);
3761        visitor.visit_span(&mut it.span);
3762        visitor.visit_ts_type_name(&mut it.left);
3763        visitor.visit_identifier_name(&mut it.right);
3764        visitor.leave_node(kind);
3765    }
3766
3767    #[inline]
3768    pub fn walk_ts_type_parameter_instantiation<'a, V: VisitMut<'a>>(
3769        visitor: &mut V,
3770        it: &mut TSTypeParameterInstantiation<'a>,
3771    ) {
3772        let kind = AstType::TSTypeParameterInstantiation;
3773        visitor.enter_node(kind);
3774        visitor.visit_span(&mut it.span);
3775        visitor.visit_ts_types(&mut it.params);
3776        visitor.leave_node(kind);
3777    }
3778
3779    #[inline]
3780    pub fn walk_ts_type_parameter<'a, V: VisitMut<'a>>(
3781        visitor: &mut V,
3782        it: &mut TSTypeParameter<'a>,
3783    ) {
3784        let kind = AstType::TSTypeParameter;
3785        visitor.enter_node(kind);
3786        visitor.visit_span(&mut it.span);
3787        visitor.visit_binding_identifier(&mut it.name);
3788        if let Some(constraint) = &mut it.constraint {
3789            visitor.visit_ts_type(constraint);
3790        }
3791        if let Some(default) = &mut it.default {
3792            visitor.visit_ts_type(default);
3793        }
3794        visitor.leave_node(kind);
3795    }
3796
3797    #[inline]
3798    pub fn walk_ts_type_parameter_declaration<'a, V: VisitMut<'a>>(
3799        visitor: &mut V,
3800        it: &mut TSTypeParameterDeclaration<'a>,
3801    ) {
3802        let kind = AstType::TSTypeParameterDeclaration;
3803        visitor.enter_node(kind);
3804        visitor.visit_span(&mut it.span);
3805        visitor.visit_ts_type_parameters(&mut it.params);
3806        visitor.leave_node(kind);
3807    }
3808
3809    #[inline]
3810    pub fn walk_ts_type_alias_declaration<'a, V: VisitMut<'a>>(
3811        visitor: &mut V,
3812        it: &mut TSTypeAliasDeclaration<'a>,
3813    ) {
3814        let kind = AstType::TSTypeAliasDeclaration;
3815        visitor.enter_node(kind);
3816        visitor.visit_span(&mut it.span);
3817        visitor.visit_binding_identifier(&mut it.id);
3818        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3819        if let Some(type_parameters) = &mut it.type_parameters {
3820            visitor.visit_ts_type_parameter_declaration(type_parameters);
3821        }
3822        visitor.visit_ts_type(&mut it.type_annotation);
3823        visitor.leave_scope();
3824        visitor.leave_node(kind);
3825    }
3826
3827    #[inline]
3828    pub fn walk_ts_class_implements<'a, V: VisitMut<'a>>(
3829        visitor: &mut V,
3830        it: &mut TSClassImplements<'a>,
3831    ) {
3832        let kind = AstType::TSClassImplements;
3833        visitor.enter_node(kind);
3834        visitor.visit_span(&mut it.span);
3835        visitor.visit_ts_type_name(&mut it.expression);
3836        if let Some(type_arguments) = &mut it.type_arguments {
3837            visitor.visit_ts_type_parameter_instantiation(type_arguments);
3838        }
3839        visitor.leave_node(kind);
3840    }
3841
3842    #[inline]
3843    pub fn walk_ts_interface_declaration<'a, V: VisitMut<'a>>(
3844        visitor: &mut V,
3845        it: &mut TSInterfaceDeclaration<'a>,
3846    ) {
3847        let kind = AstType::TSInterfaceDeclaration;
3848        visitor.enter_node(kind);
3849        visitor.visit_span(&mut it.span);
3850        visitor.visit_binding_identifier(&mut it.id);
3851        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3852        if let Some(type_parameters) = &mut it.type_parameters {
3853            visitor.visit_ts_type_parameter_declaration(type_parameters);
3854        }
3855        visitor.visit_ts_interface_heritages(&mut it.extends);
3856        visitor.visit_ts_interface_body(&mut it.body);
3857        visitor.leave_scope();
3858        visitor.leave_node(kind);
3859    }
3860
3861    #[inline]
3862    pub fn walk_ts_interface_body<'a, V: VisitMut<'a>>(
3863        visitor: &mut V,
3864        it: &mut TSInterfaceBody<'a>,
3865    ) {
3866        let kind = AstType::TSInterfaceBody;
3867        visitor.enter_node(kind);
3868        visitor.visit_span(&mut it.span);
3869        visitor.visit_ts_signatures(&mut it.body);
3870        visitor.leave_node(kind);
3871    }
3872
3873    #[inline]
3874    pub fn walk_ts_property_signature<'a, V: VisitMut<'a>>(
3875        visitor: &mut V,
3876        it: &mut TSPropertySignature<'a>,
3877    ) {
3878        let kind = AstType::TSPropertySignature;
3879        visitor.enter_node(kind);
3880        visitor.visit_span(&mut it.span);
3881        visitor.visit_property_key(&mut it.key);
3882        if let Some(type_annotation) = &mut it.type_annotation {
3883            visitor.visit_ts_type_annotation(type_annotation);
3884        }
3885        visitor.leave_node(kind);
3886    }
3887
3888    #[inline]
3889    pub fn walk_ts_signature<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSSignature<'a>) {
3890        // No `AstType` for this type
3891        match it {
3892            TSSignature::TSIndexSignature(it) => visitor.visit_ts_index_signature(it),
3893            TSSignature::TSPropertySignature(it) => visitor.visit_ts_property_signature(it),
3894            TSSignature::TSCallSignatureDeclaration(it) => {
3895                visitor.visit_ts_call_signature_declaration(it)
3896            }
3897            TSSignature::TSConstructSignatureDeclaration(it) => {
3898                visitor.visit_ts_construct_signature_declaration(it)
3899            }
3900            TSSignature::TSMethodSignature(it) => visitor.visit_ts_method_signature(it),
3901        }
3902    }
3903
3904    #[inline]
3905    pub fn walk_ts_index_signature<'a, V: VisitMut<'a>>(
3906        visitor: &mut V,
3907        it: &mut TSIndexSignature<'a>,
3908    ) {
3909        let kind = AstType::TSIndexSignature;
3910        visitor.enter_node(kind);
3911        visitor.visit_span(&mut it.span);
3912        visitor.visit_ts_index_signature_names(&mut it.parameters);
3913        visitor.visit_ts_type_annotation(&mut it.type_annotation);
3914        visitor.leave_node(kind);
3915    }
3916
3917    #[inline]
3918    pub fn walk_ts_call_signature_declaration<'a, V: VisitMut<'a>>(
3919        visitor: &mut V,
3920        it: &mut TSCallSignatureDeclaration<'a>,
3921    ) {
3922        let kind = AstType::TSCallSignatureDeclaration;
3923        visitor.enter_node(kind);
3924        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3925        visitor.visit_span(&mut it.span);
3926        if let Some(type_parameters) = &mut it.type_parameters {
3927            visitor.visit_ts_type_parameter_declaration(type_parameters);
3928        }
3929        if let Some(this_param) = &mut it.this_param {
3930            visitor.visit_ts_this_parameter(this_param);
3931        }
3932        visitor.visit_formal_parameters(&mut it.params);
3933        if let Some(return_type) = &mut it.return_type {
3934            visitor.visit_ts_type_annotation(return_type);
3935        }
3936        visitor.leave_scope();
3937        visitor.leave_node(kind);
3938    }
3939
3940    pub fn walk_ts_method_signature<'a, V: VisitMut<'a>>(
3941        visitor: &mut V,
3942        it: &mut TSMethodSignature<'a>,
3943    ) {
3944        let kind = AstType::TSMethodSignature;
3945        visitor.enter_node(kind);
3946        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3947        visitor.visit_span(&mut it.span);
3948        visitor.visit_property_key(&mut it.key);
3949        if let Some(type_parameters) = &mut it.type_parameters {
3950            visitor.visit_ts_type_parameter_declaration(type_parameters);
3951        }
3952        if let Some(this_param) = &mut it.this_param {
3953            visitor.visit_ts_this_parameter(this_param);
3954        }
3955        visitor.visit_formal_parameters(&mut it.params);
3956        if let Some(return_type) = &mut it.return_type {
3957            visitor.visit_ts_type_annotation(return_type);
3958        }
3959        visitor.leave_scope();
3960        visitor.leave_node(kind);
3961    }
3962
3963    #[inline]
3964    pub fn walk_ts_construct_signature_declaration<'a, V: VisitMut<'a>>(
3965        visitor: &mut V,
3966        it: &mut TSConstructSignatureDeclaration<'a>,
3967    ) {
3968        let kind = AstType::TSConstructSignatureDeclaration;
3969        visitor.enter_node(kind);
3970        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
3971        visitor.visit_span(&mut it.span);
3972        if let Some(type_parameters) = &mut it.type_parameters {
3973            visitor.visit_ts_type_parameter_declaration(type_parameters);
3974        }
3975        visitor.visit_formal_parameters(&mut it.params);
3976        if let Some(return_type) = &mut it.return_type {
3977            visitor.visit_ts_type_annotation(return_type);
3978        }
3979        visitor.leave_scope();
3980        visitor.leave_node(kind);
3981    }
3982
3983    #[inline]
3984    pub fn walk_ts_index_signature_name<'a, V: VisitMut<'a>>(
3985        visitor: &mut V,
3986        it: &mut TSIndexSignatureName<'a>,
3987    ) {
3988        let kind = AstType::TSIndexSignatureName;
3989        visitor.enter_node(kind);
3990        visitor.visit_span(&mut it.span);
3991        visitor.visit_ts_type_annotation(&mut it.type_annotation);
3992        visitor.leave_node(kind);
3993    }
3994
3995    #[inline]
3996    pub fn walk_ts_interface_heritage<'a, V: VisitMut<'a>>(
3997        visitor: &mut V,
3998        it: &mut TSInterfaceHeritage<'a>,
3999    ) {
4000        let kind = AstType::TSInterfaceHeritage;
4001        visitor.enter_node(kind);
4002        visitor.visit_span(&mut it.span);
4003        visitor.visit_expression(&mut it.expression);
4004        if let Some(type_arguments) = &mut it.type_arguments {
4005            visitor.visit_ts_type_parameter_instantiation(type_arguments);
4006        }
4007        visitor.leave_node(kind);
4008    }
4009
4010    #[inline]
4011    pub fn walk_ts_type_predicate<'a, V: VisitMut<'a>>(
4012        visitor: &mut V,
4013        it: &mut TSTypePredicate<'a>,
4014    ) {
4015        let kind = AstType::TSTypePredicate;
4016        visitor.enter_node(kind);
4017        visitor.visit_span(&mut it.span);
4018        visitor.visit_ts_type_predicate_name(&mut it.parameter_name);
4019        if let Some(type_annotation) = &mut it.type_annotation {
4020            visitor.visit_ts_type_annotation(type_annotation);
4021        }
4022        visitor.leave_node(kind);
4023    }
4024
4025    #[inline]
4026    pub fn walk_ts_type_predicate_name<'a, V: VisitMut<'a>>(
4027        visitor: &mut V,
4028        it: &mut TSTypePredicateName<'a>,
4029    ) {
4030        // No `AstType` for this type
4031        match it {
4032            TSTypePredicateName::Identifier(it) => visitor.visit_identifier_name(it),
4033            TSTypePredicateName::This(it) => visitor.visit_ts_this_type(it),
4034        }
4035    }
4036
4037    #[inline]
4038    pub fn walk_ts_module_declaration<'a, V: VisitMut<'a>>(
4039        visitor: &mut V,
4040        it: &mut TSModuleDeclaration<'a>,
4041    ) {
4042        let kind = AstType::TSModuleDeclaration;
4043        visitor.enter_node(kind);
4044        visitor.visit_span(&mut it.span);
4045        visitor.visit_ts_module_declaration_name(&mut it.id);
4046        visitor.enter_scope(
4047            {
4048                let mut flags = ScopeFlags::TsModuleBlock;
4049                if it.body.as_ref().is_some_and(TSModuleDeclarationBody::has_use_strict_directive) {
4050                    flags |= ScopeFlags::StrictMode;
4051                }
4052                flags
4053            },
4054            &it.scope_id,
4055        );
4056        if let Some(body) = &mut it.body {
4057            visitor.visit_ts_module_declaration_body(body);
4058        }
4059        visitor.leave_scope();
4060        visitor.leave_node(kind);
4061    }
4062
4063    #[inline]
4064    pub fn walk_ts_module_declaration_name<'a, V: VisitMut<'a>>(
4065        visitor: &mut V,
4066        it: &mut TSModuleDeclarationName<'a>,
4067    ) {
4068        // No `AstType` for this type
4069        match it {
4070            TSModuleDeclarationName::Identifier(it) => visitor.visit_binding_identifier(it),
4071            TSModuleDeclarationName::StringLiteral(it) => visitor.visit_string_literal(it),
4072        }
4073    }
4074
4075    #[inline]
4076    pub fn walk_ts_module_declaration_body<'a, V: VisitMut<'a>>(
4077        visitor: &mut V,
4078        it: &mut TSModuleDeclarationBody<'a>,
4079    ) {
4080        // No `AstType` for this type
4081        match it {
4082            TSModuleDeclarationBody::TSModuleDeclaration(it) => {
4083                visitor.visit_ts_module_declaration(it)
4084            }
4085            TSModuleDeclarationBody::TSModuleBlock(it) => visitor.visit_ts_module_block(it),
4086        }
4087    }
4088
4089    #[inline]
4090    pub fn walk_ts_module_block<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSModuleBlock<'a>) {
4091        let kind = AstType::TSModuleBlock;
4092        visitor.enter_node(kind);
4093        visitor.visit_span(&mut it.span);
4094        visitor.visit_directives(&mut it.directives);
4095        visitor.visit_statements(&mut it.body);
4096        visitor.leave_node(kind);
4097    }
4098
4099    #[inline]
4100    pub fn walk_ts_type_literal<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSTypeLiteral<'a>) {
4101        let kind = AstType::TSTypeLiteral;
4102        visitor.enter_node(kind);
4103        visitor.visit_span(&mut it.span);
4104        visitor.visit_ts_signatures(&mut it.members);
4105        visitor.leave_node(kind);
4106    }
4107
4108    #[inline]
4109    pub fn walk_ts_infer_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSInferType<'a>) {
4110        let kind = AstType::TSInferType;
4111        visitor.enter_node(kind);
4112        visitor.visit_span(&mut it.span);
4113        visitor.visit_ts_type_parameter(&mut it.type_parameter);
4114        visitor.leave_node(kind);
4115    }
4116
4117    #[inline]
4118    pub fn walk_ts_type_query<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSTypeQuery<'a>) {
4119        let kind = AstType::TSTypeQuery;
4120        visitor.enter_node(kind);
4121        visitor.visit_span(&mut it.span);
4122        visitor.visit_ts_type_query_expr_name(&mut it.expr_name);
4123        if let Some(type_arguments) = &mut it.type_arguments {
4124            visitor.visit_ts_type_parameter_instantiation(type_arguments);
4125        }
4126        visitor.leave_node(kind);
4127    }
4128
4129    #[inline]
4130    pub fn walk_ts_type_query_expr_name<'a, V: VisitMut<'a>>(
4131        visitor: &mut V,
4132        it: &mut TSTypeQueryExprName<'a>,
4133    ) {
4134        // No `AstType` for this type
4135        match it {
4136            TSTypeQueryExprName::TSImportType(it) => visitor.visit_ts_import_type(it),
4137            match_ts_type_name!(TSTypeQueryExprName) => {
4138                visitor.visit_ts_type_name(it.to_ts_type_name_mut())
4139            }
4140        }
4141    }
4142
4143    #[inline]
4144    pub fn walk_ts_import_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSImportType<'a>) {
4145        let kind = AstType::TSImportType;
4146        visitor.enter_node(kind);
4147        visitor.visit_span(&mut it.span);
4148        visitor.visit_ts_type(&mut it.argument);
4149        if let Some(options) = &mut it.options {
4150            visitor.visit_object_expression(options);
4151        }
4152        if let Some(qualifier) = &mut it.qualifier {
4153            visitor.visit_ts_import_type_qualifier(qualifier);
4154        }
4155        if let Some(type_arguments) = &mut it.type_arguments {
4156            visitor.visit_ts_type_parameter_instantiation(type_arguments);
4157        }
4158        visitor.leave_node(kind);
4159    }
4160
4161    #[inline]
4162    pub fn walk_ts_import_type_qualifier<'a, V: VisitMut<'a>>(
4163        visitor: &mut V,
4164        it: &mut TSImportTypeQualifier<'a>,
4165    ) {
4166        // No `AstType` for this type
4167        match it {
4168            TSImportTypeQualifier::Identifier(it) => visitor.visit_identifier_name(it),
4169            TSImportTypeQualifier::QualifiedName(it) => {
4170                visitor.visit_ts_import_type_qualified_name(it)
4171            }
4172        }
4173    }
4174
4175    #[inline]
4176    pub fn walk_ts_import_type_qualified_name<'a, V: VisitMut<'a>>(
4177        visitor: &mut V,
4178        it: &mut TSImportTypeQualifiedName<'a>,
4179    ) {
4180        let kind = AstType::TSImportTypeQualifiedName;
4181        visitor.enter_node(kind);
4182        visitor.visit_span(&mut it.span);
4183        visitor.visit_ts_import_type_qualifier(&mut it.left);
4184        visitor.visit_identifier_name(&mut it.right);
4185        visitor.leave_node(kind);
4186    }
4187
4188    #[inline]
4189    pub fn walk_ts_function_type<'a, V: VisitMut<'a>>(
4190        visitor: &mut V,
4191        it: &mut TSFunctionType<'a>,
4192    ) {
4193        let kind = AstType::TSFunctionType;
4194        visitor.enter_node(kind);
4195        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
4196        visitor.visit_span(&mut it.span);
4197        if let Some(type_parameters) = &mut it.type_parameters {
4198            visitor.visit_ts_type_parameter_declaration(type_parameters);
4199        }
4200        if let Some(this_param) = &mut it.this_param {
4201            visitor.visit_ts_this_parameter(this_param);
4202        }
4203        visitor.visit_formal_parameters(&mut it.params);
4204        visitor.visit_ts_type_annotation(&mut it.return_type);
4205        visitor.leave_scope();
4206        visitor.leave_node(kind);
4207    }
4208
4209    #[inline]
4210    pub fn walk_ts_constructor_type<'a, V: VisitMut<'a>>(
4211        visitor: &mut V,
4212        it: &mut TSConstructorType<'a>,
4213    ) {
4214        let kind = AstType::TSConstructorType;
4215        visitor.enter_node(kind);
4216        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
4217        visitor.visit_span(&mut it.span);
4218        if let Some(type_parameters) = &mut it.type_parameters {
4219            visitor.visit_ts_type_parameter_declaration(type_parameters);
4220        }
4221        visitor.visit_formal_parameters(&mut it.params);
4222        visitor.visit_ts_type_annotation(&mut it.return_type);
4223        visitor.leave_scope();
4224        visitor.leave_node(kind);
4225    }
4226
4227    #[inline]
4228    pub fn walk_ts_mapped_type<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut TSMappedType<'a>) {
4229        let kind = AstType::TSMappedType;
4230        visitor.enter_node(kind);
4231        visitor.enter_scope(ScopeFlags::empty(), &it.scope_id);
4232        visitor.visit_span(&mut it.span);
4233        visitor.visit_ts_type_parameter(&mut it.type_parameter);
4234        if let Some(name_type) = &mut it.name_type {
4235            visitor.visit_ts_type(name_type);
4236        }
4237        if let Some(type_annotation) = &mut it.type_annotation {
4238            visitor.visit_ts_type(type_annotation);
4239        }
4240        visitor.leave_scope();
4241        visitor.leave_node(kind);
4242    }
4243
4244    #[inline]
4245    pub fn walk_ts_template_literal_type<'a, V: VisitMut<'a>>(
4246        visitor: &mut V,
4247        it: &mut TSTemplateLiteralType<'a>,
4248    ) {
4249        let kind = AstType::TSTemplateLiteralType;
4250        visitor.enter_node(kind);
4251        visitor.visit_span(&mut it.span);
4252        visitor.visit_template_elements(&mut it.quasis);
4253        visitor.visit_ts_types(&mut it.types);
4254        visitor.leave_node(kind);
4255    }
4256
4257    #[inline]
4258    pub fn walk_ts_as_expression<'a, V: VisitMut<'a>>(
4259        visitor: &mut V,
4260        it: &mut TSAsExpression<'a>,
4261    ) {
4262        let kind = AstType::TSAsExpression;
4263        visitor.enter_node(kind);
4264        visitor.visit_span(&mut it.span);
4265        visitor.visit_expression(&mut it.expression);
4266        visitor.visit_ts_type(&mut it.type_annotation);
4267        visitor.leave_node(kind);
4268    }
4269
4270    #[inline]
4271    pub fn walk_ts_satisfies_expression<'a, V: VisitMut<'a>>(
4272        visitor: &mut V,
4273        it: &mut TSSatisfiesExpression<'a>,
4274    ) {
4275        let kind = AstType::TSSatisfiesExpression;
4276        visitor.enter_node(kind);
4277        visitor.visit_span(&mut it.span);
4278        visitor.visit_expression(&mut it.expression);
4279        visitor.visit_ts_type(&mut it.type_annotation);
4280        visitor.leave_node(kind);
4281    }
4282
4283    #[inline]
4284    pub fn walk_ts_type_assertion<'a, V: VisitMut<'a>>(
4285        visitor: &mut V,
4286        it: &mut TSTypeAssertion<'a>,
4287    ) {
4288        let kind = AstType::TSTypeAssertion;
4289        visitor.enter_node(kind);
4290        visitor.visit_span(&mut it.span);
4291        visitor.visit_ts_type(&mut it.type_annotation);
4292        visitor.visit_expression(&mut it.expression);
4293        visitor.leave_node(kind);
4294    }
4295
4296    #[inline]
4297    pub fn walk_ts_import_equals_declaration<'a, V: VisitMut<'a>>(
4298        visitor: &mut V,
4299        it: &mut TSImportEqualsDeclaration<'a>,
4300    ) {
4301        let kind = AstType::TSImportEqualsDeclaration;
4302        visitor.enter_node(kind);
4303        visitor.visit_span(&mut it.span);
4304        visitor.visit_binding_identifier(&mut it.id);
4305        visitor.visit_ts_module_reference(&mut it.module_reference);
4306        visitor.leave_node(kind);
4307    }
4308
4309    #[inline]
4310    pub fn walk_ts_module_reference<'a, V: VisitMut<'a>>(
4311        visitor: &mut V,
4312        it: &mut TSModuleReference<'a>,
4313    ) {
4314        // No `AstType` for this type
4315        match it {
4316            TSModuleReference::ExternalModuleReference(it) => {
4317                visitor.visit_ts_external_module_reference(it)
4318            }
4319            match_ts_type_name!(TSModuleReference) => {
4320                visitor.visit_ts_type_name(it.to_ts_type_name_mut())
4321            }
4322        }
4323    }
4324
4325    #[inline]
4326    pub fn walk_ts_external_module_reference<'a, V: VisitMut<'a>>(
4327        visitor: &mut V,
4328        it: &mut TSExternalModuleReference<'a>,
4329    ) {
4330        let kind = AstType::TSExternalModuleReference;
4331        visitor.enter_node(kind);
4332        visitor.visit_span(&mut it.span);
4333        visitor.visit_string_literal(&mut it.expression);
4334        visitor.leave_node(kind);
4335    }
4336
4337    #[inline]
4338    pub fn walk_ts_non_null_expression<'a, V: VisitMut<'a>>(
4339        visitor: &mut V,
4340        it: &mut TSNonNullExpression<'a>,
4341    ) {
4342        let kind = AstType::TSNonNullExpression;
4343        visitor.enter_node(kind);
4344        visitor.visit_span(&mut it.span);
4345        visitor.visit_expression(&mut it.expression);
4346        visitor.leave_node(kind);
4347    }
4348
4349    #[inline]
4350    pub fn walk_decorator<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Decorator<'a>) {
4351        let kind = AstType::Decorator;
4352        visitor.enter_node(kind);
4353        visitor.visit_span(&mut it.span);
4354        visitor.visit_expression(&mut it.expression);
4355        visitor.leave_node(kind);
4356    }
4357
4358    #[inline]
4359    pub fn walk_ts_export_assignment<'a, V: VisitMut<'a>>(
4360        visitor: &mut V,
4361        it: &mut TSExportAssignment<'a>,
4362    ) {
4363        let kind = AstType::TSExportAssignment;
4364        visitor.enter_node(kind);
4365        visitor.visit_span(&mut it.span);
4366        visitor.visit_expression(&mut it.expression);
4367        visitor.leave_node(kind);
4368    }
4369
4370    #[inline]
4371    pub fn walk_ts_namespace_export_declaration<'a, V: VisitMut<'a>>(
4372        visitor: &mut V,
4373        it: &mut TSNamespaceExportDeclaration<'a>,
4374    ) {
4375        let kind = AstType::TSNamespaceExportDeclaration;
4376        visitor.enter_node(kind);
4377        visitor.visit_span(&mut it.span);
4378        visitor.visit_identifier_name(&mut it.id);
4379        visitor.leave_node(kind);
4380    }
4381
4382    #[inline]
4383    pub fn walk_ts_instantiation_expression<'a, V: VisitMut<'a>>(
4384        visitor: &mut V,
4385        it: &mut TSInstantiationExpression<'a>,
4386    ) {
4387        let kind = AstType::TSInstantiationExpression;
4388        visitor.enter_node(kind);
4389        visitor.visit_span(&mut it.span);
4390        visitor.visit_expression(&mut it.expression);
4391        visitor.visit_ts_type_parameter_instantiation(&mut it.type_arguments);
4392        visitor.leave_node(kind);
4393    }
4394
4395    #[inline]
4396    pub fn walk_js_doc_nullable_type<'a, V: VisitMut<'a>>(
4397        visitor: &mut V,
4398        it: &mut JSDocNullableType<'a>,
4399    ) {
4400        let kind = AstType::JSDocNullableType;
4401        visitor.enter_node(kind);
4402        visitor.visit_span(&mut it.span);
4403        visitor.visit_ts_type(&mut it.type_annotation);
4404        visitor.leave_node(kind);
4405    }
4406
4407    #[inline]
4408    pub fn walk_js_doc_non_nullable_type<'a, V: VisitMut<'a>>(
4409        visitor: &mut V,
4410        it: &mut JSDocNonNullableType<'a>,
4411    ) {
4412        let kind = AstType::JSDocNonNullableType;
4413        visitor.enter_node(kind);
4414        visitor.visit_span(&mut it.span);
4415        visitor.visit_ts_type(&mut it.type_annotation);
4416        visitor.leave_node(kind);
4417    }
4418
4419    #[inline]
4420    pub fn walk_js_doc_unknown_type<'a, V: VisitMut<'a>>(
4421        visitor: &mut V,
4422        it: &mut JSDocUnknownType,
4423    ) {
4424        let kind = AstType::JSDocUnknownType;
4425        visitor.enter_node(kind);
4426        visitor.visit_span(&mut it.span);
4427        visitor.leave_node(kind);
4428    }
4429
4430    #[inline]
4431    pub fn walk_span<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Span) {
4432        // No `AstType` for this type
4433    }
4434
4435    #[inline]
4436    pub fn walk_directives<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, Directive<'a>>) {
4437        for el in it {
4438            visitor.visit_directive(el);
4439        }
4440    }
4441
4442    #[inline]
4443    pub fn walk_statements<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, Statement<'a>>) {
4444        for el in it {
4445            visitor.visit_statement(el);
4446        }
4447    }
4448
4449    #[inline]
4450    pub fn walk_array_expression_elements<'a, V: VisitMut<'a>>(
4451        visitor: &mut V,
4452        it: &mut Vec<'a, ArrayExpressionElement<'a>>,
4453    ) {
4454        for el in it {
4455            visitor.visit_array_expression_element(el);
4456        }
4457    }
4458
4459    #[inline]
4460    pub fn walk_object_property_kinds<'a, V: VisitMut<'a>>(
4461        visitor: &mut V,
4462        it: &mut Vec<'a, ObjectPropertyKind<'a>>,
4463    ) {
4464        for el in it {
4465            visitor.visit_object_property_kind(el);
4466        }
4467    }
4468
4469    #[inline]
4470    pub fn walk_template_elements<'a, V: VisitMut<'a>>(
4471        visitor: &mut V,
4472        it: &mut Vec<'a, TemplateElement<'a>>,
4473    ) {
4474        for el in it {
4475            visitor.visit_template_element(el);
4476        }
4477    }
4478
4479    #[inline]
4480    pub fn walk_expressions<'a, V: VisitMut<'a>>(
4481        visitor: &mut V,
4482        it: &mut Vec<'a, Expression<'a>>,
4483    ) {
4484        for el in it {
4485            visitor.visit_expression(el);
4486        }
4487    }
4488
4489    #[inline]
4490    pub fn walk_arguments<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, Argument<'a>>) {
4491        for el in it {
4492            visitor.visit_argument(el);
4493        }
4494    }
4495
4496    #[inline]
4497    pub fn walk_assignment_target_properties<'a, V: VisitMut<'a>>(
4498        visitor: &mut V,
4499        it: &mut Vec<'a, AssignmentTargetProperty<'a>>,
4500    ) {
4501        for el in it {
4502            visitor.visit_assignment_target_property(el);
4503        }
4504    }
4505
4506    #[inline]
4507    pub fn walk_variable_declarators<'a, V: VisitMut<'a>>(
4508        visitor: &mut V,
4509        it: &mut Vec<'a, VariableDeclarator<'a>>,
4510    ) {
4511        for el in it {
4512            visitor.visit_variable_declarator(el);
4513        }
4514    }
4515
4516    #[inline]
4517    pub fn walk_switch_cases<'a, V: VisitMut<'a>>(
4518        visitor: &mut V,
4519        it: &mut Vec<'a, SwitchCase<'a>>,
4520    ) {
4521        for el in it {
4522            visitor.visit_switch_case(el);
4523        }
4524    }
4525
4526    #[inline]
4527    pub fn walk_binding_properties<'a, V: VisitMut<'a>>(
4528        visitor: &mut V,
4529        it: &mut Vec<'a, BindingProperty<'a>>,
4530    ) {
4531        for el in it {
4532            visitor.visit_binding_property(el);
4533        }
4534    }
4535
4536    #[inline]
4537    pub fn walk_formal_parameter_list<'a, V: VisitMut<'a>>(
4538        visitor: &mut V,
4539        it: &mut Vec<'a, FormalParameter<'a>>,
4540    ) {
4541        for el in it {
4542            visitor.visit_formal_parameter(el);
4543        }
4544    }
4545
4546    #[inline]
4547    pub fn walk_decorators<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, Decorator<'a>>) {
4548        for el in it {
4549            visitor.visit_decorator(el);
4550        }
4551    }
4552
4553    #[inline]
4554    pub fn walk_ts_class_implements_list<'a, V: VisitMut<'a>>(
4555        visitor: &mut V,
4556        it: &mut Vec<'a, TSClassImplements<'a>>,
4557    ) {
4558        for el in it {
4559            visitor.visit_ts_class_implements(el);
4560        }
4561    }
4562
4563    #[inline]
4564    pub fn walk_class_elements<'a, V: VisitMut<'a>>(
4565        visitor: &mut V,
4566        it: &mut Vec<'a, ClassElement<'a>>,
4567    ) {
4568        for el in it {
4569            visitor.visit_class_element(el);
4570        }
4571    }
4572
4573    #[inline]
4574    pub fn walk_import_declaration_specifiers<'a, V: VisitMut<'a>>(
4575        visitor: &mut V,
4576        it: &mut Vec<'a, ImportDeclarationSpecifier<'a>>,
4577    ) {
4578        for el in it {
4579            visitor.visit_import_declaration_specifier(el);
4580        }
4581    }
4582
4583    #[inline]
4584    pub fn walk_import_attributes<'a, V: VisitMut<'a>>(
4585        visitor: &mut V,
4586        it: &mut Vec<'a, ImportAttribute<'a>>,
4587    ) {
4588        for el in it {
4589            visitor.visit_import_attribute(el);
4590        }
4591    }
4592
4593    #[inline]
4594    pub fn walk_export_specifiers<'a, V: VisitMut<'a>>(
4595        visitor: &mut V,
4596        it: &mut Vec<'a, ExportSpecifier<'a>>,
4597    ) {
4598        for el in it {
4599            visitor.visit_export_specifier(el);
4600        }
4601    }
4602
4603    #[inline]
4604    pub fn walk_jsx_children<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, JSXChild<'a>>) {
4605        for el in it {
4606            visitor.visit_jsx_child(el);
4607        }
4608    }
4609
4610    #[inline]
4611    pub fn walk_jsx_attribute_items<'a, V: VisitMut<'a>>(
4612        visitor: &mut V,
4613        it: &mut Vec<'a, JSXAttributeItem<'a>>,
4614    ) {
4615        for el in it {
4616            visitor.visit_jsx_attribute_item(el);
4617        }
4618    }
4619
4620    #[inline]
4621    pub fn walk_ts_enum_members<'a, V: VisitMut<'a>>(
4622        visitor: &mut V,
4623        it: &mut Vec<'a, TSEnumMember<'a>>,
4624    ) {
4625        for el in it {
4626            visitor.visit_ts_enum_member(el);
4627        }
4628    }
4629
4630    #[inline]
4631    pub fn walk_ts_types<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, TSType<'a>>) {
4632        for el in it {
4633            visitor.visit_ts_type(el);
4634        }
4635    }
4636
4637    #[inline]
4638    pub fn walk_ts_tuple_elements<'a, V: VisitMut<'a>>(
4639        visitor: &mut V,
4640        it: &mut Vec<'a, TSTupleElement<'a>>,
4641    ) {
4642        for el in it {
4643            visitor.visit_ts_tuple_element(el);
4644        }
4645    }
4646
4647    #[inline]
4648    pub fn walk_ts_type_parameters<'a, V: VisitMut<'a>>(
4649        visitor: &mut V,
4650        it: &mut Vec<'a, TSTypeParameter<'a>>,
4651    ) {
4652        for el in it {
4653            visitor.visit_ts_type_parameter(el);
4654        }
4655    }
4656
4657    #[inline]
4658    pub fn walk_ts_interface_heritages<'a, V: VisitMut<'a>>(
4659        visitor: &mut V,
4660        it: &mut Vec<'a, TSInterfaceHeritage<'a>>,
4661    ) {
4662        for el in it {
4663            visitor.visit_ts_interface_heritage(el);
4664        }
4665    }
4666
4667    #[inline]
4668    pub fn walk_ts_signatures<'a, V: VisitMut<'a>>(
4669        visitor: &mut V,
4670        it: &mut Vec<'a, TSSignature<'a>>,
4671    ) {
4672        for el in it {
4673            visitor.visit_ts_signature(el);
4674        }
4675    }
4676
4677    #[inline]
4678    pub fn walk_ts_index_signature_names<'a, V: VisitMut<'a>>(
4679        visitor: &mut V,
4680        it: &mut Vec<'a, TSIndexSignatureName<'a>>,
4681    ) {
4682        for el in it {
4683            visitor.visit_ts_index_signature_name(el);
4684        }
4685    }
4686
4687    #[inline]
4688    pub fn walk_spans<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut Vec<'a, Span>) {
4689        for el in it {
4690            visitor.visit_span(el);
4691        }
4692    }
4693}