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