diff --git a/src/domain/javascript/javascriptModuleInterop.ts b/src/domain/javascript/javascriptModuleInterop.ts index d654b470e6..b24da41a12 100644 --- a/src/domain/javascript/javascriptModuleInterop.ts +++ b/src/domain/javascript/javascriptModuleInterop.ts @@ -10,7 +10,10 @@ import { type JavaScriptSemanticBindingState, } from "./javascriptSemanticState.js"; import { semanticRequireOrigin } from "./javascriptSemanticRequireOrigin.js"; -import { childNodes } from "./javascriptSemanticTraversal.js"; +import { + childNodes, + javaScriptAstChildKeys, +} from "./javascriptSemanticTraversal.js"; import { electronMemberPath } from "./javascriptElectronMemberWrites.js"; import { SemanticPropertyPathCoverage } from "./javascriptSemanticPropertyPaths.js"; @@ -431,7 +434,7 @@ const canonicalRoles = ( roles.set(expected.name, binding); used.set(binding.bindingId, expected.name); } - const visitorKeys = t.VISITOR_KEYS[expected.type] ?? []; + const visitorKeys = javaScriptAstChildKeys(expected); for (const [key, field] of Object.entries( t.NODE_FIELDS[expected.type] ?? {}, )) { diff --git a/src/domain/javascript/javascriptSemanticTraversal.ts b/src/domain/javascript/javascriptSemanticTraversal.ts index 16960ba8fe..e2e3512543 100644 --- a/src/domain/javascript/javascriptSemanticTraversal.ts +++ b/src/domain/javascript/javascriptSemanticTraversal.ts @@ -82,8 +82,7 @@ interface TraversalFrame { * not be reintroduced (they diverge on loc/comment fields and ordering). */ export const childNodes = (node: t.Node): t.Node[] => { - const keys = t.VISITOR_KEYS[node.type]; - if (keys === undefined) return []; + const keys = javaScriptAstChildKeys(node); const children: t.Node[] = []; for (const key of keys) { const value: unknown = Reflect.get(node, key); @@ -98,3 +97,7 @@ export const childNodes = (node: t.Node): t.Node[] => { } return children; }; + +/** Child-bearing fields; shared by traversal and structural AST comparison. */ +export const javaScriptAstChildKeys = (node: t.Node): readonly string[] => + t.VISITOR_KEYS[node.type] ?? [];