refactor(javascript): own property capture translation

This commit is contained in:
morluto
2026-10-22 08:52:56 +08:00
parent adfde012ec
commit 247c8f4eab
5 changed files with 42 additions and 34 deletions
@@ -11,6 +11,7 @@ import { unwrapJavaScriptExpression } from "./javascriptAstValues.js";
import {
semanticObjectPropertyReferences,
semanticArrayPropertyReferences,
type JavaScriptSemanticObjectReference,
} from "./javascriptSemanticObjectReferences.js";
import { SEMANTIC_ALIAS_SELECTION_LIMIT } from "./javascriptSemanticResourceLimits.js";
import {
@@ -68,6 +69,27 @@ export const semanticShiftCapturedSelections = (
return semanticNormalizeCapturedSelections(shifted);
};
/** Record an object/array property selected when a shallow copy was made. */
export const semanticCapturedSelectionsAfterPropertyRead = (
selections: readonly SemanticCapturedSelection[] | undefined,
source: Pick<
JavaScriptSemanticObjectReference,
"path" | "capturedSelectionAt" | "ownEnumerable"
>,
): readonly SemanticCapturedSelection[] => [
...(semanticShiftCapturedSelections(selections, source.path.length - 1) ??
[]),
...(source.capturedSelectionAt === undefined
? []
: [
{
at: source.capturedSelectionAt,
depth: source.path.length,
...(source.ownEnumerable ? { ownEnumerable: true as const } : {}),
},
]),
];
interface ProjectedSource {
readonly node: t.Node;
readonly path: SemanticAliasSelectionPath;