diff --git a/crates/oxc_ast/src/ast_impl/js.rs b/crates/oxc_ast/src/ast_impl/js.rs index 8677a62d52c1c..6a99365abca4a 100644 --- a/crates/oxc_ast/src/ast_impl/js.rs +++ b/crates/oxc_ast/src/ast_impl/js.rs @@ -744,12 +744,12 @@ impl<'a> ObjectAssignmentTarget<'a> { impl AssignmentTargetMaybeDefault<'_> { #[allow(missing_docs)] - pub fn name(&self) -> Option { + pub fn identifier(&self) -> Option<&IdentifierReference<'_>> { match self { - AssignmentTargetMaybeDefault::AssignmentTargetIdentifier(id) => Some(id.name.clone()), + AssignmentTargetMaybeDefault::AssignmentTargetIdentifier(id) => Some(id), Self::AssignmentTargetWithDefault(target) => { if let AssignmentTarget::AssignmentTargetIdentifier(id) = &target.binding { - Some(id.name.clone()) + Some(id) } else { None } diff --git a/crates/oxc_codegen/src/gen.rs b/crates/oxc_codegen/src/gen.rs index 510673b68ef4b..e2474a144c0e8 100644 --- a/crates/oxc_codegen/src/gen.rs +++ b/crates/oxc_codegen/src/gen.rs @@ -2021,8 +2021,12 @@ impl Gen for AssignmentTargetPropertyProperty<'_> { PropertyKey::StaticIdentifier(ident) => Some(&ident.name), _ => None, }; - let value_name = self.binding.name(); - key_name.is_some() && value_name.is_some() && key_name == value_name.as_ref() + let value_name = + self.binding.identifier().map(|id| p.get_identifier_reference_name(id)); + match (key_name, value_name) { + (Some(key_name), Some(value_name)) => key_name == value_name, + _ => false, + } } else { false }; diff --git a/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs b/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs index d19d5e9a7e4a0..2b7a5fad7c408 100644 --- a/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs +++ b/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs @@ -131,14 +131,13 @@ impl Rule for NoUselessRename { else { continue; }; - let Some(key) = property.name.static_name() else { continue; }; - let Some(renamed_key) = property.binding.name() else { + let Some(renamed_key) = property.binding.identifier().map(|ident| &ident.name) + else { continue; }; - if key == renamed_key { ctx.diagnostic(no_useless_rename_diagnostic(property.span)); } diff --git a/napi/minify/test/terser.test.ts b/napi/minify/test/terser.test.ts index 17c35c62d3e27..cd205f0d22f68 100644 --- a/napi/minify/test/terser.test.ts +++ b/napi/minify/test/terser.test.ts @@ -1369,13 +1369,13 @@ test('unused_destructuring_getter_side_effect_1', () => { run(code, expected); }); -test.skip('unused_destructuring_assign_1', () => { +test('unused_destructuring_assign_1', () => { const code = 'function extract(obj){var a;let b;({a:a,b:b}=obj);console.log(b)}extract({a:1,b:2});extract({b:4});'; const expected = ['2', '4']; run(code, expected); }); -test.skip('unused_destructuring_assign_2', () => { +test('unused_destructuring_assign_2', () => { const code = 'function extract(obj){var a;let b;({a:a,b:b}=obj);console.log(b)}extract({a:1,b:2});extract({get a(){var s="side effect";console.log(s);return s},b:4});'; const expected = ['2', 'side effect', '4'];