]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
chore: refactor
authordaiwei <daiwei521@126.com>
Wed, 23 Oct 2024 03:17:13 +0000 (11:17 +0800)
committerdaiwei <daiwei521@126.com>
Wed, 23 Oct 2024 03:17:13 +0000 (11:17 +0800)
packages/compiler-core/src/babelUtils.ts

index 90ebd092160cb0442c0ac3d415ded3b8b758d732..34493a7257bce723e3b780cbabfd019a62913794 100644 (file)
@@ -61,41 +61,30 @@ export function walkIdentifiers(
       ) {
         // mark property in destructure pattern
         ;(node as any).inPattern = true
-      } else if (isFunctionType(node)) {
-        if (node.scopeIds) {
-          node.scopeIds.forEach(id => markKnownIds(id, knownIds))
-        } else {
-          // walk function expressions and add its arguments to known identifiers
-          // so that we don't prefix them
-          walkFunctionParams(node, id =>
-            markScopeIdentifier(node, id, knownIds),
-          )
-        }
-      } else if (node.type === 'BlockStatement') {
-        if (node.scopeIds) {
-          node.scopeIds.forEach(id => markKnownIds(id, knownIds))
-        } else {
-          // #3445 record block-level local variables
-          walkBlockDeclarations(node, id =>
-            markScopeIdentifier(node, id, knownIds),
-          )
-        }
-      } else if (node.type === 'CatchClause' && node.param) {
-        if (node.scopeIds) {
-          node.scopeIds.forEach(id => markKnownIds(id, knownIds))
-        } else {
-          for (const id of extractIdentifiers(node.param)) {
-            markScopeIdentifier(node, id, knownIds)
-          }
-        }
-      } else if (isForStatement(node)) {
-        if (node.scopeIds) {
-          node.scopeIds.forEach(id => markKnownIds(id, knownIds))
-        } else {
-          walkForStatement(node, false, id =>
-            markScopeIdentifier(node, id, knownIds),
-          )
+      } else if (isFunctionType(node) && !reuseScopeIds(node, knownIds)) {
+        // walk function expressions and add its arguments to known identifiers
+        // so that we don't prefix them
+        walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds))
+      } else if (
+        node.type === 'BlockStatement' &&
+        !reuseScopeIds(node, knownIds)
+      ) {
+        // #3445 record block-level local variables
+        walkBlockDeclarations(node, id =>
+          markScopeIdentifier(node, id, knownIds),
+        )
+      } else if (
+        node.type === 'CatchClause' &&
+        node.param &&
+        !reuseScopeIds(node, knownIds)
+      ) {
+        for (const id of extractIdentifiers(node.param)) {
+          markScopeIdentifier(node, id, knownIds)
         }
+      } else if (isForStatement(node) && !reuseScopeIds(node, knownIds)) {
+        walkForStatement(node, false, id =>
+          markScopeIdentifier(node, id, knownIds),
+        )
       }
     },
     leave(node: Node & { scopeIds?: Set<string> }, parent: Node | null) {
@@ -112,6 +101,17 @@ export function walkIdentifiers(
   })
 }
 
+function reuseScopeIds(
+  node: Node & { scopeIds?: Set<string> },
+  knownIds: Record<string, number>,
+): boolean {
+  if (node.scopeIds) {
+    node.scopeIds.forEach(id => markKnownIds(id, knownIds))
+    return true
+  }
+  return false
+}
+
 export function isReferencedIdentifier(
   id: Identifier,
   parent: Node | null,