From 215826874d2ea17a17694824208ebd5df4346ed6 Mon Sep 17 00:00:00 2001 From: Dunqing <29533304+Dunqing@users.noreply.github.com> Date: Sat, 15 Jun 2024 09:45:57 +0000 Subject: [PATCH] fix(ast): incorrect visit order in function (#3681) ```ts function hello(a: T): T { return 0 as T } ``` The `T` is a type parameter. It can be used in `FormalParameters`, `ReturnType`, and `FunctionBody`. Therefore we need to visit `type_parameters` before visiting `FormalParameters`, `ReturnType`, and `FunctionBody` --- crates/oxc_ast/src/visit/visit.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/oxc_ast/src/visit/visit.rs b/crates/oxc_ast/src/visit/visit.rs index a17c7d890..2d8532420 100644 --- a/crates/oxc_ast/src/visit/visit.rs +++ b/crates/oxc_ast/src/visit/visit.rs @@ -1247,13 +1247,13 @@ pub mod walk { if let Some(ident) = &func.id { visitor.visit_binding_identifier(ident); } + if let Some(parameters) = &func.type_parameters { + visitor.visit_ts_type_parameter_declaration(parameters); + } visitor.visit_formal_parameters(&func.params); if let Some(body) = &func.body { visitor.visit_function_body(body); } - if let Some(parameters) = &func.type_parameters { - visitor.visit_ts_type_parameter_declaration(parameters); - } if let Some(annotation) = &func.return_type { visitor.visit_ts_type_annotation(annotation); }