From 54f1269ae352bd4c20908a7a38e4d8b092716ed7 Mon Sep 17 00:00:00 2001 From: daiwei Date: Wed, 23 Oct 2024 11:17:13 +0800 Subject: [PATCH] chore: refactor --- packages/compiler-core/src/babelUtils.ts | 68 ++++++++++++------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/compiler-core/src/babelUtils.ts b/packages/compiler-core/src/babelUtils.ts index 90ebd0921..34493a725 100644 --- a/packages/compiler-core/src/babelUtils.ts +++ b/packages/compiler-core/src/babelUtils.ts @@ -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 }, parent: Node | null) { @@ -112,6 +101,17 @@ export function walkIdentifiers( }) } +function reuseScopeIds( + node: Node & { scopeIds?: Set }, + knownIds: Record, +): boolean { + if (node.scopeIds) { + node.scopeIds.forEach(id => markKnownIds(id, knownIds)) + return true + } + return false +} + export function isReferencedIdentifier( id: Identifier, parent: Node | null,