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