fix(resolution): leave built-in Map calls unresolved (#1566) (#1790)

Co-authored-by: Colby McHenry <colbymchenry@users.noreply.github.com>
This commit is contained in:
Colby Mchenry
2026-09-08 14:04:43 -05:00
committed by GitHub
co-authored by Colby McHenry
parent 72c1ff13cc
commit de5adba7ea
9 changed files with 151 additions and 59 deletions
+25 -1
View File
@@ -76,7 +76,7 @@ describe.skipIf(!kernelBuilt)('kernel TS/JS extraction parity', () => {
resetKernelForTests();
});
function assertParity(filePath: string, source: string, language: Language): void {
function assertParity(filePath: string, source: string, language: Language): ExtractionResult {
process.env.CODEGRAPH_KERNEL_LANGS = 'all';
delete process.env.CODEGRAPH_KERNEL;
const viaKernel = tryKernelExtract(filePath, source, language);
@@ -93,8 +93,32 @@ describe.skipIf(!kernelBuilt)('kernel TS/JS extraction parity', () => {
expect(k.refs, `${filePath}: refs`).toEqual(w.refs);
// Meaningful comparison, not empty-vs-empty.
expect(viaWasm.nodes.length).toBeGreaterThan(3);
return viaWasm;
}
it.each([
['ts', 'typescript'], ['tsx', 'tsx'], ['js', 'javascript'], ['jsx', 'jsx'],
] as const)('leaves nested identifier receivers unresolved and keeps argument calls: %s (#1566)', (ext, language) => {
const result = assertParity(`fixture.${ext}`, `
function readKey() { return 'answer'; }
function local() {
const values = new Map();
return values.get(readKey());
}
function nested(holder) {
holder.values.get(readKey());
holder.values?.get(readKey());
holder['values'].get(readKey());
holder.deep.values.get(readKey());
}
`, language);
const nested = result.nodes.find((n) => n.name === 'nested' && n.kind === 'function');
expect(nested).toBeDefined();
expect(result.unresolvedReferences.filter((r) => r.referenceKind === 'calls' && r.fromNodeId === nested!.id)
.map((r) => r.referenceName)).toEqual(['readKey', 'readKey', 'readKey', 'readKey']);
expect(result.unresolvedReferences.some((r) => r.referenceName === 'values.get')).toBe(true);
});
it('torture fixture (tsx): components, stores, RTK, fn-refs, value-refs, decorators', () => {
const file = path.join(FIXTURE_DIR, 'torture.tsx');
assertParity('fixtures/torture.tsx', fs.readFileSync(file, 'utf8'), 'tsx');