1#![expect(unused_variables, clippy::match_same_arms, clippy::semicolon_if_nothing_returned)]
11#![allow(clippy::needless_pass_by_ref_mut, clippy::trivially_copy_pass_by_ref)]
12
13use std::cell::Cell;
14
15use oxc_allocator::Vec;
16use oxc_syntax::scope::{ScopeFlags, ScopeId};
17
18use oxc_ast::ast::*;
19use oxc_ast::ast_kind::AstType;
20
21use walk_mut::*;
22
23pub 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 }
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}