fix(codegen): shorthand assignment target identifier consider mangled names (#8536)

This commit is contained in:
Boshen 2025-01-16 07:26:07 +00:00
parent 946ad7690b
commit 855c8395cf
4 changed files with 13 additions and 10 deletions

View file

@ -744,12 +744,12 @@ impl<'a> ObjectAssignmentTarget<'a> {
impl AssignmentTargetMaybeDefault<'_> {
#[allow(missing_docs)]
pub fn name(&self) -> Option<Atom> {
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
}

View file

@ -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
};

View file

@ -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));
}

View file

@ -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'];