diff --git a/crates/oxc_ast/src/ast_impl/js.rs b/crates/oxc_ast/src/ast_impl/js.rs index 18061db29..ec9791e1b 100644 --- a/crates/oxc_ast/src/ast_impl/js.rs +++ b/crates/oxc_ast/src/ast_impl/js.rs @@ -320,18 +320,6 @@ impl<'a> fmt::Display for IdentifierReference<'a> { } } -impl<'a> BindingIdentifier<'a> { - #[allow(missing_docs)] - pub fn new(span: Span, name: Atom<'a>) -> Self { - Self { span, name, symbol_id: Cell::default() } - } - - #[allow(missing_docs)] - pub fn new_with_symbol_id(span: Span, name: Atom<'a>, symbol_id: SymbolId) -> Self { - Self { span, name, symbol_id: Cell::new(Some(symbol_id)) } - } -} - impl<'a> fmt::Display for BindingIdentifier<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/crates/oxc_parser/src/js/arrow.rs b/crates/oxc_parser/src/js/arrow.rs index 4f536b8ab..485db1f5d 100644 --- a/crates/oxc_parser/src/js/arrow.rs +++ b/crates/oxc_parser/src/js/arrow.rs @@ -211,8 +211,8 @@ impl<'a> ParserImpl<'a> { let params = { let ident = match ident { Expression::Identifier(ident) => { - let name = ident.name.clone(); - BindingIdentifier::new(ident.span, name) + let ident = ident.unbox(); + self.ast.binding_identifier(ident.span, ident.name) } _ => unreachable!(), }; diff --git a/crates/oxc_transformer/src/common/module_imports.rs b/crates/oxc_transformer/src/common/module_imports.rs index 4918a79d2..49fc904cd 100644 --- a/crates/oxc_transformer/src/common/module_imports.rs +++ b/crates/oxc_transformer/src/common/module_imports.rs @@ -202,12 +202,12 @@ impl<'a> ModuleImportsStore<'a> { ModuleExportName::IdentifierName( ctx.ast.identifier_name(SPAN, import.imported), ), - import.local.create_binding_identifier(), + import.local.create_binding_identifier(ctx), ImportOrExportKind::Value, )) } Import::Default(local) => ImportDeclarationSpecifier::ImportDefaultSpecifier( - ctx.ast.alloc_import_default_specifier(SPAN, local.create_binding_identifier()), + ctx.ast.alloc_import_default_specifier(SPAN, local.create_binding_identifier(ctx)), ), })); diff --git a/crates/oxc_transformer/src/common/var_declarations.rs b/crates/oxc_transformer/src/common/var_declarations.rs index e33add937..29f4b49ca 100644 --- a/crates/oxc_transformer/src/common/var_declarations.rs +++ b/crates/oxc_transformer/src/common/var_declarations.rs @@ -74,7 +74,7 @@ impl<'a> VarDeclarationsStore<'a> { init: Option>, ctx: &mut TraverseCtx<'a>, ) { - let ident = binding.create_binding_identifier(); + let ident = binding.create_binding_identifier(ctx); let ident = ctx.ast.binding_pattern_kind_from_binding_identifier(ident); let ident = ctx.ast.binding_pattern(ident, NONE, false); self.insert_binding_pattern(ident, init, ctx); diff --git a/crates/oxc_transformer/src/es2015/arrow_functions.rs b/crates/oxc_transformer/src/es2015/arrow_functions.rs index 1c1ba3f4b..6a21f047d 100644 --- a/crates/oxc_transformer/src/es2015/arrow_functions.rs +++ b/crates/oxc_transformer/src/es2015/arrow_functions.rs @@ -410,8 +410,9 @@ impl<'a> ArrowFunctions<'a> { ctx: &mut TraverseCtx<'a>, ) { let binding_pattern = ctx.ast.binding_pattern( - ctx.ast - .binding_pattern_kind_from_binding_identifier(this_var.create_binding_identifier()), + ctx.ast.binding_pattern_kind_from_binding_identifier( + this_var.create_binding_identifier(ctx), + ), NONE, false, ); diff --git a/crates/oxc_transformer/src/react/jsx_source.rs b/crates/oxc_transformer/src/react/jsx_source.rs index 8e9c9fcca..255d8bb40 100644 --- a/crates/oxc_transformer/src/react/jsx_source.rs +++ b/crates/oxc_transformer/src/react/jsx_source.rs @@ -207,7 +207,7 @@ impl<'a, 'ctx> ReactJsxSource<'a, 'ctx> { let var_kind = VariableDeclarationKind::Var; let id = { - let ident = filename_var.create_binding_identifier(); + let ident = filename_var.create_binding_identifier(ctx); let ident = ctx.ast.binding_pattern_kind_from_binding_identifier(ident); ctx.ast.binding_pattern(ident, NONE, false) }; diff --git a/crates/oxc_transformer/src/react/refresh.rs b/crates/oxc_transformer/src/react/refresh.rs index 35ccbae6f..2ed8dcab6 100644 --- a/crates/oxc_transformer/src/react/refresh.rs +++ b/crates/oxc_transformer/src/react/refresh.rs @@ -156,7 +156,8 @@ impl<'a, 'ctx> Traverse<'a> for ReactRefresh<'a, 'ctx> { let mut new_statements = ctx.ast.vec_with_capacity(self.registrations.len() + 1); for (symbol_id, persistent_id) in self.registrations.drain(..) { let name = ctx.ast.atom(ctx.symbols().get_name(symbol_id)); - let binding_identifier = BindingIdentifier::new_with_symbol_id(SPAN, name, symbol_id); + let binding_identifier = + ctx.ast.binding_identifier_with_symbol_id(SPAN, name, symbol_id); variable_declarator_items.push( ctx.ast.variable_declarator( SPAN, @@ -683,7 +684,7 @@ impl<'a, 'ctx> ReactRefresh<'a, 'ctx> { .unwrap_or_else(|| ctx.current_scope_id()); let binding = ctx.generate_uid("s", target_scope_id, SymbolFlags::FunctionScopedVariable); - let binding_identifier = binding.create_binding_identifier(); + let binding_identifier = binding.create_binding_identifier(ctx); // _s(); let call_expression = ctx.ast.statement_expression( diff --git a/crates/oxc_transformer/src/typescript/enum.rs b/crates/oxc_transformer/src/typescript/enum.rs index 719b3a7ba..72cfded34 100644 --- a/crates/oxc_transformer/src/typescript/enum.rs +++ b/crates/oxc_transformer/src/typescript/enum.rs @@ -86,7 +86,7 @@ impl<'a> TypeScriptEnum<'a> { ); ctx.scopes_mut().add_binding(func_scope_id, enum_name.to_compact_str(), param_symbol_id); - let ident = BindingIdentifier::new_with_symbol_id( + let ident = ctx.ast.binding_identifier_with_symbol_id( decl.id.span, decl.id.name.clone(), param_symbol_id, diff --git a/crates/oxc_traverse/src/context/bound_identifier.rs b/crates/oxc_traverse/src/context/bound_identifier.rs index 4765c0404..df6382d6c 100644 --- a/crates/oxc_traverse/src/context/bound_identifier.rs +++ b/crates/oxc_traverse/src/context/bound_identifier.rs @@ -47,13 +47,13 @@ impl<'a> BoundIdentifier<'a> { } /// Create `BindingIdentifier` for this binding - pub fn create_binding_identifier(&self) -> BindingIdentifier<'a> { - BindingIdentifier::new_with_symbol_id(SPAN, self.name.clone(), self.symbol_id) + pub fn create_binding_identifier(&self, ctx: &mut TraverseCtx<'a>) -> BindingIdentifier<'a> { + ctx.ast.binding_identifier_with_symbol_id(SPAN, self.name.clone(), self.symbol_id) } /// Create `BindingPattern` for this binding pub fn create_binding_pattern(&self, ctx: &mut TraverseCtx<'a>) -> BindingPattern<'a> { - let ident = self.create_binding_identifier(); + let ident = self.create_binding_identifier(ctx); let binding_pattern_kind = ctx.ast.binding_pattern_kind_from_binding_identifier(ident); ctx.ast.binding_pattern(binding_pattern_kind, NONE, false) }