]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-core): identifiers in function parameters should not be inferred as...
authorzhiyuanzmj <260480378@qq.com>
Wed, 23 Jul 2025 00:41:50 +0000 (08:41 +0800)
committerGitHub <noreply@github.com>
Wed, 23 Jul 2025 00:41:50 +0000 (08:41 +0800)
packages/compiler-core/__tests__/utils.spec.ts
packages/compiler-core/src/babelUtils.ts

index 2d377a271ac85c7f394a6b6f24da62bbba68cda4..000b10e11bd04f64d0b59ef7781aed4c9b124fba 100644 (file)
@@ -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,18 @@ test('toValidAssetId', () => {
     '_component_test_2797935797_1',
   )
 })
+
+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],
+      (node, parent, parentStack, isReference) => {
+        expect(isReference).toBe(false)
+        expect(isReferencedIdentifier(node, parent, parentStack)).toBe(false)
+      },
+      true,
+    )
+  })
+})
index 52fabeea896a39caaad8f40afd564d52ae5c48dc..51614612b1015b6a099419a6d96cbd330b92559b 100644 (file)
@@ -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)
   }