fix(javascript): preserve import-equals declaration and export evidence (#2062)

* fix(javascript): retain TypeScript import-equals dependencies

* test(mcp): align completion checks with warm provider state

* fix(javascript): propagate require origins through exported aliases

* fix(javascript): normalize equivalent CTS binding origins

---------

Co-authored-by: hhang <169027046+xu91102@users.noreply.github.com>
This commit is contained in:
hhangandhhang authored and GitHub committed 2026-10-13 06:04:21 +09:00
1 parent 6ce5903e7a
commit 86fab11fbe
16 files changed
+498 -48

No files matched your search

@@ -6,6 +6,7 @@ import {
} from "./javascriptSemanticSlots.js";
import type {
JavaScriptSemanticBinding,
JavaScriptSemanticCallable,
JavaScriptSemanticModuleLink,
JavaScriptSemanticReturnSite,
@@ -89,12 +90,16 @@ const semanticReturnSiteId = (
String(location.end.column),
].join(":");
/** Link exports to callables only when lexical resolution is unique and exact. */
/** Finalize exported bindings only when lexical resolution is unique and exact. */
export const resolveSemanticModuleCallables = (
state: JavaScriptSemanticAnalysisState,
callables: readonly JavaScriptSemanticCallable[],
bindings: readonly JavaScriptSemanticBinding[],
): JavaScriptSemanticModuleLink[] => {
const callableIds = new Set(callables.map(({ callableId }) => callableId));
const provenanceByBinding = new Map(
bindings.map(({ bindingId, provenance }) => [bindingId, provenance]),
);
return state.moduleLinks.map((link) => {
// Named exports follow their lexical binding, including every assignment.
// A declaration's ID or a callable's display name cannot prove that link.
@@ -107,8 +112,19 @@ export const resolveSemanticModuleCallables = (
binding === undefined
? []
: callableIdsForBinding(binding, state, callableIds, new Set());
const provenance =
binding === undefined || link.specifier !== null
? undefined
: provenanceByBinding.get(binding.bindingId);
const resolutionMode =
provenance?.status === "module"
? provenance.origins[0].resolutionMode
: undefined;
return {
...link,
...(resolutionMode === "import" || resolutionMode === "require"
? { resolutionMode }
: {}),
callableId: resolved.length === 1 ? (resolved[0] ?? null) : null,
};
});