From 59aea73daff4117b227f4eec55089177781b6a62 Mon Sep 17 00:00:00 2001 From: Dunqing <29533304+Dunqing@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:14:34 +0000 Subject: [PATCH] refactor(ast): scope is created only if CatchClause has param (#4346) close: #4345 --- crates/oxc_ast/src/ast/js.rs | 2 +- crates/oxc_ast/src/generated/visit.rs | 9 +++++++-- crates/oxc_ast/src/generated/visit_mut.rs | 9 +++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/crates/oxc_ast/src/ast/js.rs b/crates/oxc_ast/src/ast/js.rs index 3cc7b53cd..7fe22e22e 100644 --- a/crates/oxc_ast/src/ast/js.rs +++ b/crates/oxc_ast/src/ast/js.rs @@ -1300,7 +1300,7 @@ pub struct TryStatement<'a> { } #[visited_node] -#[scope(flags(ScopeFlags::CatchClause))] +#[scope(flags(ScopeFlags::CatchClause), if(self.param.is_some()))] #[derive(Debug)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(tag = "type"))] diff --git a/crates/oxc_ast/src/generated/visit.rs b/crates/oxc_ast/src/generated/visit.rs index 79a630057..9f99303bb 100644 --- a/crates/oxc_ast/src/generated/visit.rs +++ b/crates/oxc_ast/src/generated/visit.rs @@ -3701,12 +3701,17 @@ pub mod walk { pub fn walk_catch_clause<'a, V: Visit<'a>>(visitor: &mut V, it: &CatchClause<'a>) { let kind = AstKind::CatchClause(visitor.alloc(it)); visitor.enter_node(kind); - visitor.enter_scope(ScopeFlags::CatchClause, &it.scope_id); + let scope_events_cond = it.param.is_some(); + if scope_events_cond { + visitor.enter_scope(ScopeFlags::CatchClause, &it.scope_id); + } if let Some(param) = &it.param { visitor.visit_catch_parameter(param); } visitor.visit_block_statement(&it.body); - visitor.leave_scope(); + if scope_events_cond { + visitor.leave_scope(); + } visitor.leave_node(kind); } diff --git a/crates/oxc_ast/src/generated/visit_mut.rs b/crates/oxc_ast/src/generated/visit_mut.rs index 37343df6f..6879e917e 100644 --- a/crates/oxc_ast/src/generated/visit_mut.rs +++ b/crates/oxc_ast/src/generated/visit_mut.rs @@ -3913,12 +3913,17 @@ pub mod walk_mut { pub fn walk_catch_clause<'a, V: VisitMut<'a>>(visitor: &mut V, it: &mut CatchClause<'a>) { let kind = AstType::CatchClause; visitor.enter_node(kind); - visitor.enter_scope(ScopeFlags::CatchClause, &it.scope_id); + let scope_events_cond = it.param.is_some(); + if scope_events_cond { + visitor.enter_scope(ScopeFlags::CatchClause, &it.scope_id); + } if let Some(param) = &mut it.param { visitor.visit_catch_parameter(param); } visitor.visit_block_statement(&mut it.body); - visitor.leave_scope(); + if scope_events_cond { + visitor.leave_scope(); + } visitor.leave_node(kind); }