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