From 2483aa7a3c48415e034b4e7e74a4a7153c06066d Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 1 Jul 2025 16:42:11 +0800 Subject: [PATCH 1/3] fix(compiler-core): Identifiers in function parameters should not be inferred as references --- .../compiler-core/__tests__/utils.spec.ts | 21 ++++++++++++++++++- packages/compiler-core/src/babelUtils.ts | 5 +++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/compiler-core/__tests__/utils.spec.ts b/packages/compiler-core/__tests__/utils.spec.ts index 2d377a271..5294c85c3 100644 --- a/packages/compiler-core/__tests__/utils.spec.ts +++ b/packages/compiler-core/__tests__/utils.spec.ts @@ -1,4 +1,9 @@ -import type { ExpressionNode, TransformContext } from '../src' +import { babelParse, walkIdentifiers } from '@vue/compiler-sfc' +import { + type ExpressionNode, + type TransformContext, + isReferencedIdentifier, +} from '../src' import { type Position, createSimpleExpression } from '../src/ast' import { advancePositionWithClone, @@ -115,3 +120,17 @@ test('toValidAssetId', () => { '_component_test_2797935797_1', ) }) + +describe('isReferencedIdentifier', () => { + test('Identifiers in function parameters should not be inferred as references', () => { + const ast = babelParse(`(({ title }) => [])`) + walkIdentifiers( + ast.program.body[0], + (node, parent, parentStack, isReference) => { + expect(isReference).toBe(false) + expect(isReferencedIdentifier(node, parent, parentStack)).toBe(false) + }, + true, + ) + }) +}) diff --git a/packages/compiler-core/src/babelUtils.ts b/packages/compiler-core/src/babelUtils.ts index 52fabeea8..51614612b 100644 --- a/packages/compiler-core/src/babelUtils.ts +++ b/packages/compiler-core/src/babelUtils.ts @@ -122,7 +122,7 @@ export function isReferencedIdentifier( return false } - if (isReferenced(id, parent)) { + if (isReferenced(id, parent, parentStack[parentStack.length - 2])) { return true } @@ -132,7 +132,8 @@ export function isReferencedIdentifier( case 'AssignmentExpression': case 'AssignmentPattern': return true - case 'ObjectPattern': + case 'ObjectProperty': + return parent.key !== id && isInDestructureAssignment(parent, parentStack) case 'ArrayPattern': return isInDestructureAssignment(parent, parentStack) } From 7b0b5d1f10560d369c18a033a65d3903474ca154 Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 1 Jul 2025 17:03:31 +0800 Subject: [PATCH 2/3] chore: typo --- packages/compiler-core/__tests__/utils.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-core/__tests__/utils.spec.ts b/packages/compiler-core/__tests__/utils.spec.ts index 5294c85c3..a5a7e2c85 100644 --- a/packages/compiler-core/__tests__/utils.spec.ts +++ b/packages/compiler-core/__tests__/utils.spec.ts @@ -122,7 +122,7 @@ test('toValidAssetId', () => { }) describe('isReferencedIdentifier', () => { - test('Identifiers in function parameters should not be inferred as references', () => { + test('identifiers in function parameters should not be inferred as references', () => { const ast = babelParse(`(({ title }) => [])`) walkIdentifiers( ast.program.body[0], From 891d80631a5f13970b69401ff403b4f9ed2edd77 Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Tue, 1 Jul 2025 18:12:30 +0800 Subject: [PATCH 3/3] chore: add expect.assertions(4) --- packages/compiler-core/__tests__/utils.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/compiler-core/__tests__/utils.spec.ts b/packages/compiler-core/__tests__/utils.spec.ts index a5a7e2c85..000b10e11 100644 --- a/packages/compiler-core/__tests__/utils.spec.ts +++ b/packages/compiler-core/__tests__/utils.spec.ts @@ -123,6 +123,7 @@ test('toValidAssetId', () => { describe('isReferencedIdentifier', () => { test('identifiers in function parameters should not be inferred as references', () => { + expect.assertions(4) const ast = babelParse(`(({ title }) => [])`) walkIdentifiers( ast.program.body[0],