homegraph 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -11
- package/dist/bin/homegraph.js +295 -72
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +32 -11
- package/dist/context/index.js.map +1 -1
- package/dist/db/index.d.ts +143 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +293 -16
- package/dist/db/index.js.map +1 -1
- package/dist/db/queries.d.ts +43 -4
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +138 -14
- package/dist/db/queries.js.map +1 -1
- package/dist/db/sqlite-adapter.d.ts +24 -17
- package/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/dist/db/sqlite-adapter.js +292 -36
- package/dist/db/sqlite-adapter.js.map +1 -1
- package/dist/db/wal-valve.d.ts +15 -2
- package/dist/db/wal-valve.d.ts.map +1 -1
- package/dist/db/wal-valve.js +88 -6
- package/dist/db/wal-valve.js.map +1 -1
- package/dist/extraction/arkts-batch-worker.js +3 -2
- package/dist/extraction/arkts-batch-worker.js.map +1 -1
- package/dist/extraction/default-ignore.d.ts +39 -0
- package/dist/extraction/default-ignore.d.ts.map +1 -0
- package/dist/extraction/default-ignore.js +221 -0
- package/dist/extraction/default-ignore.js.map +1 -0
- package/dist/extraction/index.d.ts +9 -10
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +227 -323
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts.d.ts +90 -6
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +1579 -128
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/store-worker.d.ts +20 -0
- package/dist/extraction/store-worker.d.ts.map +1 -0
- package/dist/extraction/store-worker.js +102 -0
- package/dist/extraction/store-worker.js.map +1 -0
- package/dist/extraction/store-writer.d.ts +48 -0
- package/dist/extraction/store-writer.d.ts.map +1 -0
- package/dist/extraction/store-writer.js +167 -0
- package/dist/extraction/store-writer.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +47 -0
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/extraction/wasm-runtime-flags.d.ts +14 -4
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
- package/dist/extraction/wasm-runtime-flags.js +55 -7
- package/dist/extraction/wasm-runtime-flags.js.map +1 -1
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +135 -97
- package/dist/index.js.map +1 -1
- package/dist/mcp/query-worker.d.ts +2 -2
- package/dist/mcp/query-worker.js +2 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +42 -26
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resolution/callback-synthesizer.d.ts +52 -16
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +234 -180
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/cooperative-yield.d.ts +10 -2
- package/dist/resolution/cooperative-yield.d.ts.map +1 -1
- package/dist/resolution/cooperative-yield.js +6 -4
- package/dist/resolution/cooperative-yield.js.map +1 -1
- package/dist/resolution/frameworks/go.d.ts.map +1 -1
- package/dist/resolution/frameworks/go.js +29 -6
- package/dist/resolution/frameworks/go.js.map +1 -1
- package/dist/resolution/import-resolver.d.ts +2 -3
- package/dist/resolution/import-resolver.d.ts.map +1 -1
- package/dist/resolution/import-resolver.js +166 -7
- package/dist/resolution/import-resolver.js.map +1 -1
- package/dist/resolution/index.d.ts +87 -2
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +739 -131
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/memory-budget.d.ts +48 -0
- package/dist/resolution/memory-budget.d.ts.map +1 -0
- package/dist/resolution/memory-budget.js +162 -0
- package/dist/resolution/memory-budget.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +12 -1
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +439 -97
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/resolver-pool.d.ts +106 -0
- package/dist/resolution/resolver-pool.d.ts.map +1 -0
- package/dist/resolution/resolver-pool.js +344 -0
- package/dist/resolution/resolver-pool.js.map +1 -0
- package/dist/resolution/resolver-worker.d.ts +17 -0
- package/dist/resolution/resolver-worker.d.ts.map +1 -0
- package/dist/resolution/resolver-worker.js +141 -0
- package/dist/resolution/resolver-worker.js.map +1 -0
- package/dist/resolution/types.d.ts +3 -0
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/spec/build/diff-parser.d.ts +55 -0
- package/dist/spec/build/diff-parser.d.ts.map +1 -0
- package/dist/spec/build/diff-parser.js +205 -0
- package/dist/spec/build/diff-parser.js.map +1 -0
- package/dist/spec/build/git-scanner.d.ts +93 -0
- package/dist/spec/build/git-scanner.d.ts.map +1 -0
- package/dist/spec/build/git-scanner.js +254 -0
- package/dist/spec/build/git-scanner.js.map +1 -0
- package/dist/spec/build/pipeline.d.ts +54 -0
- package/dist/spec/build/pipeline.d.ts.map +1 -0
- package/dist/spec/build/pipeline.js +170 -0
- package/dist/spec/build/pipeline.js.map +1 -0
- package/dist/spec/build/scan.d.ts +48 -0
- package/dist/spec/build/scan.d.ts.map +1 -0
- package/dist/spec/build/scan.js +89 -0
- package/dist/spec/build/scan.js.map +1 -0
- package/dist/spec/build/scope-resolver.d.ts +50 -0
- package/dist/spec/build/scope-resolver.d.ts.map +1 -0
- package/dist/spec/build/scope-resolver.js +105 -0
- package/dist/spec/build/scope-resolver.js.map +1 -0
- package/dist/spec/build/spec-extractor.d.ts +74 -0
- package/dist/spec/build/spec-extractor.d.ts.map +1 -0
- package/dist/spec/build/spec-extractor.js +344 -0
- package/dist/spec/build/spec-extractor.js.map +1 -0
- package/dist/spec/config.d.ts +35 -1
- package/dist/spec/config.d.ts.map +1 -1
- package/dist/spec/config.js +30 -5
- package/dist/spec/config.js.map +1 -1
- package/dist/spec/db/fts.d.ts.map +1 -1
- package/dist/spec/db/fts.js +19 -50
- package/dist/spec/db/fts.js.map +1 -1
- package/dist/spec/db/index.d.ts +5 -3
- package/dist/spec/db/index.d.ts.map +1 -1
- package/dist/spec/db/index.js +16 -1
- package/dist/spec/db/index.js.map +1 -1
- package/dist/spec/db/persist.d.ts +45 -0
- package/dist/spec/db/persist.d.ts.map +1 -0
- package/dist/spec/db/persist.js +66 -0
- package/dist/spec/db/persist.js.map +1 -0
- package/dist/spec/db/relations.d.ts +80 -1
- package/dist/spec/db/relations.d.ts.map +1 -1
- package/dist/spec/db/relations.js +175 -4
- package/dist/spec/db/relations.js.map +1 -1
- package/dist/spec/db/schema.d.ts +4 -0
- package/dist/spec/db/schema.d.ts.map +1 -1
- package/dist/spec/db/schema.js +4 -0
- package/dist/spec/db/schema.js.map +1 -1
- package/dist/spec/db/schema.sql +5 -1
- package/dist/spec/db/spec-node.d.ts +5 -0
- package/dist/spec/db/spec-node.d.ts.map +1 -1
- package/dist/spec/db/spec-node.js +11 -5
- package/dist/spec/db/spec-node.js.map +1 -1
- package/dist/spec/db/sql-utils.d.ts +11 -0
- package/dist/spec/db/sql-utils.d.ts.map +1 -0
- package/dist/spec/db/sql-utils.js +19 -0
- package/dist/spec/db/sql-utils.js.map +1 -0
- package/dist/spec/evolve/cluster-context.d.ts +30 -0
- package/dist/spec/evolve/cluster-context.d.ts.map +1 -0
- package/dist/spec/evolve/cluster-context.js +78 -0
- package/dist/spec/evolve/cluster-context.js.map +1 -0
- package/dist/spec/evolve/commit-spec-analyzer.d.ts +51 -0
- package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +1 -0
- package/dist/spec/evolve/commit-spec-analyzer.js +88 -0
- package/dist/spec/evolve/commit-spec-analyzer.js.map +1 -0
- package/dist/spec/evolve/commit-spec-persister.d.ts +53 -0
- package/dist/spec/evolve/commit-spec-persister.d.ts.map +1 -0
- package/dist/spec/evolve/commit-spec-persister.js +93 -0
- package/dist/spec/evolve/commit-spec-persister.js.map +1 -0
- package/dist/spec/evolve/impact-locator.d.ts +23 -7
- package/dist/spec/evolve/impact-locator.d.ts.map +1 -1
- package/dist/spec/evolve/impact-locator.js +58 -14
- package/dist/spec/evolve/impact-locator.js.map +1 -1
- package/dist/spec/evolve/pipeline.d.ts +62 -25
- package/dist/spec/evolve/pipeline.d.ts.map +1 -1
- package/dist/spec/evolve/pipeline.js +436 -457
- package/dist/spec/evolve/pipeline.js.map +1 -1
- package/dist/spec/evolve/spec-rewriter.d.ts +13 -13
- package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
- package/dist/spec/evolve/spec-rewriter.js +45 -45
- package/dist/spec/evolve/spec-rewriter.js.map +1 -1
- package/dist/spec/git/commits.d.ts +85 -0
- package/dist/spec/git/commits.d.ts.map +1 -0
- package/dist/spec/git/commits.js +218 -0
- package/dist/spec/git/commits.js.map +1 -0
- package/dist/spec/git/exec.d.ts +13 -0
- package/dist/spec/git/exec.d.ts.map +1 -0
- package/dist/spec/git/exec.js +19 -0
- package/dist/spec/git/exec.js.map +1 -0
- package/dist/spec/git/index.d.ts +9 -0
- package/dist/spec/git/index.d.ts.map +1 -0
- package/dist/spec/git/index.js +22 -0
- package/dist/spec/git/index.js.map +1 -0
- package/dist/spec/git-utils.d.ts +8 -0
- package/dist/spec/git-utils.d.ts.map +1 -0
- package/dist/spec/git-utils.js +14 -0
- package/dist/spec/git-utils.js.map +1 -0
- package/dist/spec/graph/index.d.ts +8 -0
- package/dist/spec/graph/index.d.ts.map +1 -0
- package/dist/spec/graph/index.js +17 -0
- package/dist/spec/graph/index.js.map +1 -0
- package/dist/spec/graph/queries.d.ts +6 -35
- package/dist/spec/graph/queries.d.ts.map +1 -1
- package/dist/spec/graph/queries.js +71 -248
- package/dist/spec/graph/queries.js.map +1 -1
- package/dist/spec/llm/agent-client.d.ts +59 -0
- package/dist/spec/llm/agent-client.d.ts.map +1 -0
- package/dist/spec/llm/agent-client.js +213 -0
- package/dist/spec/llm/agent-client.js.map +1 -0
- package/dist/spec/llm/agents/claude-code.d.ts +32 -0
- package/dist/spec/llm/agents/claude-code.d.ts.map +1 -0
- package/dist/spec/llm/agents/claude-code.js +125 -0
- package/dist/spec/llm/agents/claude-code.js.map +1 -0
- package/dist/spec/llm/agents/codex.d.ts +32 -0
- package/dist/spec/llm/agents/codex.d.ts.map +1 -0
- package/dist/spec/llm/agents/codex.js +145 -0
- package/dist/spec/llm/agents/codex.js.map +1 -0
- package/dist/spec/llm/agents/detect-utils.d.ts +28 -0
- package/dist/spec/llm/agents/detect-utils.d.ts.map +1 -0
- package/dist/spec/llm/agents/detect-utils.js +91 -0
- package/dist/spec/llm/agents/detect-utils.js.map +1 -0
- package/dist/spec/llm/agents/deveco-code.d.ts +33 -0
- package/dist/spec/llm/agents/deveco-code.d.ts.map +1 -0
- package/dist/spec/llm/agents/deveco-code.js +165 -0
- package/dist/spec/llm/agents/deveco-code.js.map +1 -0
- package/dist/spec/llm/agents/index.d.ts +31 -0
- package/dist/spec/llm/agents/index.d.ts.map +1 -0
- package/dist/spec/llm/agents/index.js +65 -0
- package/dist/spec/llm/agents/index.js.map +1 -0
- package/dist/spec/llm/agents/types.d.ts +76 -0
- package/dist/spec/llm/agents/types.d.ts.map +1 -0
- package/dist/spec/llm/agents/types.js +15 -0
- package/dist/spec/llm/agents/types.js.map +1 -0
- package/dist/spec/llm/client.d.ts +31 -11
- package/dist/spec/llm/client.d.ts.map +1 -1
- package/dist/spec/llm/client.js +143 -81
- package/dist/spec/llm/client.js.map +1 -1
- package/dist/spec/llm/factory.d.ts +41 -0
- package/dist/spec/llm/factory.d.ts.map +1 -0
- package/dist/spec/llm/factory.js +80 -0
- package/dist/spec/llm/factory.js.map +1 -0
- package/dist/spec/llm/prompts.d.ts +24 -8
- package/dist/spec/llm/prompts.d.ts.map +1 -1
- package/dist/spec/llm/prompts.js +100 -50
- package/dist/spec/llm/prompts.js.map +1 -1
- package/dist/spec/llm/retry.d.ts +53 -0
- package/dist/spec/llm/retry.d.ts.map +1 -0
- package/dist/spec/llm/retry.js +153 -0
- package/dist/spec/llm/retry.js.map +1 -0
- package/dist/spec/mine/clusterer.d.ts +63 -0
- package/dist/spec/mine/clusterer.d.ts.map +1 -0
- package/dist/spec/mine/clusterer.js +904 -0
- package/dist/spec/mine/clusterer.js.map +1 -0
- package/dist/spec/mine/clustering/features.d.ts +38 -0
- package/dist/spec/mine/clustering/features.d.ts.map +1 -0
- package/dist/spec/mine/clustering/features.js +108 -0
- package/dist/spec/mine/clustering/features.js.map +1 -0
- package/dist/spec/mine/clustering/index.d.ts +62 -0
- package/dist/spec/mine/clustering/index.d.ts.map +1 -0
- package/dist/spec/mine/clustering/index.js +259 -0
- package/dist/spec/mine/clustering/index.js.map +1 -0
- package/dist/spec/mine/clustering/leiden.d.ts +61 -0
- package/dist/spec/mine/clustering/leiden.d.ts.map +1 -0
- package/dist/spec/mine/clustering/leiden.js +489 -0
- package/dist/spec/mine/clustering/leiden.js.map +1 -0
- package/dist/spec/mine/clustering/text-similarity.d.ts +22 -0
- package/dist/spec/mine/clustering/text-similarity.d.ts.map +1 -0
- package/dist/spec/mine/clustering/text-similarity.js +98 -0
- package/dist/spec/mine/clustering/text-similarity.js.map +1 -0
- package/dist/spec/mine/generator.d.ts +54 -0
- package/dist/spec/mine/generator.d.ts.map +1 -0
- package/dist/spec/mine/generator.js +267 -0
- package/dist/spec/mine/generator.js.map +1 -0
- package/dist/spec/mine/persist.d.ts +37 -0
- package/dist/spec/mine/persist.d.ts.map +1 -0
- package/dist/spec/mine/persist.js +170 -0
- package/dist/spec/mine/persist.js.map +1 -0
- package/dist/spec/mine/pipeline.d.ts +41 -0
- package/dist/spec/mine/pipeline.d.ts.map +1 -0
- package/dist/spec/mine/pipeline.js +236 -0
- package/dist/spec/mine/pipeline.js.map +1 -0
- package/dist/spec/mine/progress-handler.d.ts +22 -0
- package/dist/spec/mine/progress-handler.d.ts.map +1 -0
- package/dist/spec/mine/progress-handler.js +108 -0
- package/dist/spec/mine/progress-handler.js.map +1 -0
- package/dist/spec/mine/progress.d.ts +23 -0
- package/dist/spec/mine/progress.d.ts.map +1 -0
- package/dist/spec/mine/progress.js +12 -0
- package/dist/spec/mine/progress.js.map +1 -0
- package/dist/spec/mine/scanner.d.ts +59 -0
- package/dist/spec/mine/scanner.d.ts.map +1 -0
- package/dist/spec/mine/scanner.js +383 -0
- package/dist/spec/mine/scanner.js.map +1 -0
- package/dist/spec/types.d.ts +32 -0
- package/dist/spec/types.d.ts.map +1 -1
- package/dist/spec/ui/index.d.ts +9 -0
- package/dist/spec/ui/index.d.ts.map +1 -0
- package/dist/spec/ui/index.js +16 -0
- package/dist/spec/ui/index.js.map +1 -0
- package/dist/spec/ui/progress-handler.d.ts +33 -0
- package/dist/spec/ui/progress-handler.d.ts.map +1 -0
- package/dist/spec/ui/progress-handler.js +132 -0
- package/dist/spec/ui/progress-handler.js.map +1 -0
- package/dist/spec/ui/progress.d.ts +24 -0
- package/dist/spec/ui/progress.d.ts.map +1 -0
- package/dist/spec/ui/progress.js +13 -0
- package/dist/spec/ui/progress.js.map +1 -0
- package/dist/spec/utils/fs.d.ts +45 -0
- package/dist/spec/utils/fs.d.ts.map +1 -0
- package/dist/spec/utils/fs.js +163 -0
- package/dist/spec/utils/fs.js.map +1 -0
- package/dist/spec/utils/index.d.ts +12 -0
- package/dist/spec/utils/index.d.ts.map +1 -0
- package/dist/spec/utils/index.js +26 -0
- package/dist/spec/utils/index.js.map +1 -0
- package/dist/spec/utils/meta.d.ts +32 -0
- package/dist/spec/utils/meta.d.ts.map +1 -0
- package/dist/spec/utils/meta.js +122 -0
- package/dist/spec/utils/meta.js.map +1 -0
- package/dist/spec/utils/truncate.d.ts +86 -0
- package/dist/spec/utils/truncate.d.ts.map +1 -0
- package/dist/spec/utils/truncate.js +172 -0
- package/dist/spec/utils/truncate.js.map +1 -0
- package/dist/spec/utils.d.ts +4 -16
- package/dist/spec/utils.d.ts.map +1 -1
- package/dist/spec/utils.js +6 -58
- package/dist/spec/utils.js.map +1 -1
- package/dist/sync/watcher.d.ts +25 -1
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +76 -3
- package/dist/sync/watcher.js.map +1 -1
- package/dist/telemetry/index.js +3 -3
- package/dist/telemetry/index.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -3
|
@@ -23,8 +23,16 @@
|
|
|
23
23
|
* yield point, so the heartbeat still stops and the SIGKILL still fires. We only
|
|
24
24
|
* stop killing work that is demonstrably making progress.
|
|
25
25
|
*/
|
|
26
|
-
/**
|
|
27
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Yield when more than `budgetMs` of wall-clock has passed since the last
|
|
28
|
+
* yield. Returns `undefined` on the (overwhelmingly common) not-due path so a
|
|
29
|
+
* hot loop can skip the await entirely — `await`ing an async no-op costs a
|
|
30
|
+
* promise allocation + microtask hop, which at hundreds of thousands of calls
|
|
31
|
+
* per index is real time. Callers may either `await maybeYield()` (works for
|
|
32
|
+
* both return shapes) or use the fast form:
|
|
33
|
+
* `const y = maybeYield(); if (y) await y;`
|
|
34
|
+
*/
|
|
35
|
+
export type MaybeYield = () => Promise<void> | undefined;
|
|
28
36
|
/** Default budget: well under the watchdog's minimum heartbeat cadence (~1s), so
|
|
29
37
|
* a heartbeat byte always has a chance to land between yields. */
|
|
30
38
|
export declare const DEFAULT_YIELD_BUDGET_MS = 250;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cooperative-yield.d.ts","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH
|
|
1
|
+
{"version":3,"file":"cooperative-yield.d.ts","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAEzD;kEACkE;AAClE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAgC,GAAG,UAAU,CAWpF"}
|
|
@@ -32,11 +32,13 @@ exports.createYielder = createYielder;
|
|
|
32
32
|
exports.DEFAULT_YIELD_BUDGET_MS = 250;
|
|
33
33
|
function createYielder(budgetMs = exports.DEFAULT_YIELD_BUDGET_MS) {
|
|
34
34
|
let last = Date.now();
|
|
35
|
-
return
|
|
35
|
+
return function maybeYield() {
|
|
36
36
|
if (Date.now() - last < budgetMs)
|
|
37
|
-
return;
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
return undefined;
|
|
38
|
+
return new Promise((resolve) => setImmediate(() => {
|
|
39
|
+
last = Date.now();
|
|
40
|
+
resolve();
|
|
41
|
+
}));
|
|
40
42
|
};
|
|
41
43
|
}
|
|
42
44
|
//# sourceMappingURL=cooperative-yield.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cooperative-yield.js","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;
|
|
1
|
+
{"version":3,"file":"cooperative-yield.js","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AAiBH,sCAWC;AAfD;kEACkE;AACrD,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,SAAgB,aAAa,CAAC,WAAmB,+BAAuB;IACtE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,OAAO,SAAS,UAAU;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CACnC,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAG5F,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAG5F,eAAO,MAAM,UAAU,EAAE,iBAyIxB,CAAC"}
|
|
@@ -87,15 +87,27 @@ exports.goResolver = {
|
|
|
87
87
|
let match;
|
|
88
88
|
while ((match = routeRegex.exec(safe)) !== null) {
|
|
89
89
|
const [, rawMethod, routePath, handlerExpr] = match;
|
|
90
|
+
// The first argument must be URL-shaped, or this is just a method that
|
|
91
|
+
// happens to share a verb name — `cache.Put("key", val)`, `store.Get(...)`,
|
|
92
|
+
// `bus.Handle("user.created", h)` all polluted the route index (#1259).
|
|
93
|
+
// Real registrations use "/path" (every router), or net/http's Go 1.22
|
|
94
|
+
// "METHOD /path" patterns on Handle/HandleFunc.
|
|
95
|
+
const methodPrefix = matchGo122MethodPattern(routePath, rawMethod);
|
|
96
|
+
if (!routePath.startsWith('/') && !methodPrefix)
|
|
97
|
+
continue;
|
|
90
98
|
const line = safe.slice(0, match.index).split('\n').length;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
// "GET /users/{id}" -> method GET, path /users/{id}
|
|
100
|
+
const path = methodPrefix ? routePath.slice(methodPrefix.length).trimStart() : routePath;
|
|
101
|
+
const method = methodPrefix
|
|
102
|
+
? methodPrefix
|
|
103
|
+
: rawMethod === 'Handle' || rawMethod === 'HandleFunc'
|
|
104
|
+
? 'ANY'
|
|
105
|
+
: rawMethod.toUpperCase();
|
|
94
106
|
const routeNode = {
|
|
95
|
-
id: `route:${filePath}:${line}:${method}:${
|
|
107
|
+
id: `route:${filePath}:${line}:${method}:${path}`,
|
|
96
108
|
kind: 'route',
|
|
97
|
-
name: `${method} ${
|
|
98
|
-
qualifiedName: `${filePath}::route:${
|
|
109
|
+
name: `${method} ${path}`,
|
|
110
|
+
qualifiedName: `${filePath}::route:${path}`,
|
|
99
111
|
filePath,
|
|
100
112
|
startLine: line,
|
|
101
113
|
endLine: line,
|
|
@@ -121,6 +133,17 @@ exports.goResolver = {
|
|
|
121
133
|
return { nodes, references };
|
|
122
134
|
},
|
|
123
135
|
};
|
|
136
|
+
/**
|
|
137
|
+
* Go 1.22 net/http mux patterns: `mux.HandleFunc("GET /users/{id}", h)`.
|
|
138
|
+
* Returns the HTTP method when the pattern starts with one, null otherwise.
|
|
139
|
+
* Only Handle/HandleFunc take these — Gin/Chi verb methods take a bare path.
|
|
140
|
+
*/
|
|
141
|
+
function matchGo122MethodPattern(routePath, rawMethod) {
|
|
142
|
+
if (rawMethod !== 'Handle' && rawMethod !== 'HandleFunc')
|
|
143
|
+
return null;
|
|
144
|
+
const m = routePath.match(/^(GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD|CONNECT|TRACE)\s+\S/);
|
|
145
|
+
return m ? m[1] : null;
|
|
146
|
+
}
|
|
124
147
|
/** Extract the last identifier from an expression like `pkg.Sub.handler` or `handler`. */
|
|
125
148
|
function extractGoTailIdent(expr) {
|
|
126
149
|
const cleaned = expr.trim().replace(/\s+/g, '').replace(/\(\)$/, '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
import { Language } from '../types';
|
|
7
7
|
import { UnresolvedRef, ResolvedRef, ResolutionContext, ImportMapping, ReExport } from './types';
|
|
8
8
|
export declare function isNixPathImportRef(ref: UnresolvedRef): boolean;
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
*/
|
|
9
|
+
/** Drop the per-context memo tables (see ReferenceResolver.clearCaches). */
|
|
10
|
+
export declare function clearImportResolverMemos(context: ResolutionContext): void;
|
|
12
11
|
export declare function resolveImportPath(importPath: string, fromFile: string, language: Language, context: ResolutionContext): string | null;
|
|
13
12
|
/**
|
|
14
13
|
* Clear the C/C++ include directory cache (call between indexing runs)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/import-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAQ,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/import-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAQ,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyCjG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAO9D;AA8CD,4EAA4E;AAC5E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAMzE;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,iBAAiB,GACzB,MAAM,GAAG,IAAI,CAYf;AAuXD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAShE;AA6KD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAE9D;AA0BD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,aAAa,EAAE,CA6BjB;AAmTD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAqDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAsDhF;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CA6BpB;AAiCD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAwQpB"}
|
|
@@ -39,6 +39,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
41
|
exports.isNixPathImportRef = isNixPathImportRef;
|
|
42
|
+
exports.clearImportResolverMemos = clearImportResolverMemos;
|
|
42
43
|
exports.resolveImportPath = resolveImportPath;
|
|
43
44
|
exports.clearCppIncludeDirCache = clearCppIncludeDirCache;
|
|
44
45
|
exports.loadCppIncludeDirs = loadCppIncludeDirs;
|
|
@@ -53,6 +54,7 @@ const fs = __importStar(require("fs"));
|
|
|
53
54
|
const path = __importStar(require("path"));
|
|
54
55
|
const path_aliases_1 = require("./path-aliases");
|
|
55
56
|
const workspace_packages_1 = require("./workspace-packages");
|
|
57
|
+
const name_matcher_1 = require("./name-matcher");
|
|
56
58
|
/**
|
|
57
59
|
* Extension resolution order by language
|
|
58
60
|
*/
|
|
@@ -93,7 +95,60 @@ function isNixPathImportRef(ref) {
|
|
|
93
95
|
/**
|
|
94
96
|
* Resolve an import path to an actual file
|
|
95
97
|
*/
|
|
98
|
+
// Per-context memos for the two hottest pure lookups on the resolution path:
|
|
99
|
+
// import-specifier → file resolution and exported-symbol lookup. Both are pure
|
|
100
|
+
// given a stable file set + node table, which is exactly the window between
|
|
101
|
+
// ReferenceResolver.clearCaches() calls — clearImportResolverMemos() is invoked
|
|
102
|
+
// there, so the staleness discipline matches the resolver's own caches.
|
|
103
|
+
const importPathMemos = new WeakMap();
|
|
104
|
+
const exportedSymbolMemos = new WeakMap();
|
|
105
|
+
const fileExportIndexes = new WeakMap();
|
|
106
|
+
function getFileExportIndex(filePath, context) {
|
|
107
|
+
let perFile = fileExportIndexes.get(context);
|
|
108
|
+
if (!perFile) {
|
|
109
|
+
perFile = new Map();
|
|
110
|
+
fileExportIndexes.set(context, perFile);
|
|
111
|
+
}
|
|
112
|
+
let idx = perFile.get(filePath);
|
|
113
|
+
if (!idx) {
|
|
114
|
+
idx = { byName: new Map(), defaultComponent: undefined, defaultFnClass: undefined };
|
|
115
|
+
for (const n of context.getNodesInFile(filePath)) {
|
|
116
|
+
if (!n.isExported)
|
|
117
|
+
continue;
|
|
118
|
+
if (!idx.byName.has(n.name))
|
|
119
|
+
idx.byName.set(n.name, n);
|
|
120
|
+
if (idx.defaultComponent === undefined && n.kind === 'component')
|
|
121
|
+
idx.defaultComponent = n;
|
|
122
|
+
if (idx.defaultFnClass === undefined && (n.kind === 'function' || n.kind === 'class'))
|
|
123
|
+
idx.defaultFnClass = n;
|
|
124
|
+
}
|
|
125
|
+
perFile.set(filePath, idx);
|
|
126
|
+
}
|
|
127
|
+
return idx;
|
|
128
|
+
}
|
|
129
|
+
/** Drop the per-context memo tables (see ReferenceResolver.clearCaches). */
|
|
130
|
+
function clearImportResolverMemos(context) {
|
|
131
|
+
importPathMemos.delete(context);
|
|
132
|
+
exportedSymbolMemos.delete(context);
|
|
133
|
+
fileExportIndexes.delete(context);
|
|
134
|
+
luaFileBasenameIndexes.delete(context);
|
|
135
|
+
cobolCopybookIndexes.delete(context);
|
|
136
|
+
}
|
|
96
137
|
function resolveImportPath(importPath, fromFile, language, context) {
|
|
138
|
+
let memo = importPathMemos.get(context);
|
|
139
|
+
if (!memo) {
|
|
140
|
+
memo = new Map();
|
|
141
|
+
importPathMemos.set(context, memo);
|
|
142
|
+
}
|
|
143
|
+
const key = `${language}\0${fromFile}\0${importPath}`;
|
|
144
|
+
const hit = memo.get(key);
|
|
145
|
+
if (hit !== undefined || memo.has(key))
|
|
146
|
+
return hit ?? null;
|
|
147
|
+
const resolved = resolveImportPathUncached(importPath, fromFile, language, context);
|
|
148
|
+
memo.set(key, resolved);
|
|
149
|
+
return resolved;
|
|
150
|
+
}
|
|
151
|
+
function resolveImportPathUncached(importPath, fromFile, language, context) {
|
|
97
152
|
// COBOL COPY/EXEC SQL INCLUDE names a copybook member, not a path — the
|
|
98
153
|
// compiler searches a library, so we match against indexed file basenames.
|
|
99
154
|
// Must run before isExternalImport: a bare member name would otherwise be
|
|
@@ -135,6 +190,32 @@ function resolveImportPath(importPath, fromFile, language, context) {
|
|
|
135
190
|
* file node would go quadratic on copybook-heavy repos).
|
|
136
191
|
*/
|
|
137
192
|
const cobolCopybookIndexes = new WeakMap();
|
|
193
|
+
/**
|
|
194
|
+
* Per-context basename → file-paths index for Lua/Luau require resolution
|
|
195
|
+
* (cobolCopybookIndexes pattern). resolveLuaRequire previously ran
|
|
196
|
+
* `getAllFiles().filter(endsWith)` FOUR times per require ref — ~7.5k string
|
|
197
|
+
* suffix scans each, measured at ~0.9ms/ref (2.7s combined on kong's 3k
|
|
198
|
+
* requires). Buckets preserve getAllFiles() iteration order so the per-suffix
|
|
199
|
+
* candidate list filters to exactly the array the full scan produced —
|
|
200
|
+
* identical matches, identical stable sort, identical winner.
|
|
201
|
+
*/
|
|
202
|
+
const luaFileBasenameIndexes = new WeakMap();
|
|
203
|
+
function luaBasenameIndex(context) {
|
|
204
|
+
let index = luaFileBasenameIndexes.get(context);
|
|
205
|
+
if (!index) {
|
|
206
|
+
index = new Map();
|
|
207
|
+
for (const f of context.getAllFiles()) {
|
|
208
|
+
const base = f.split('/').pop() ?? '';
|
|
209
|
+
const paths = index.get(base);
|
|
210
|
+
if (paths)
|
|
211
|
+
paths.push(f);
|
|
212
|
+
else
|
|
213
|
+
index.set(base, [f]);
|
|
214
|
+
}
|
|
215
|
+
luaFileBasenameIndexes.set(context, index);
|
|
216
|
+
}
|
|
217
|
+
return index;
|
|
218
|
+
}
|
|
138
219
|
function resolveCobolCopybook(member, fromFile, context) {
|
|
139
220
|
let index = cobolCopybookIndexes.get(context);
|
|
140
221
|
if (!index) {
|
|
@@ -1386,6 +1467,19 @@ function resolveViaImport(ref, context) {
|
|
|
1386
1467
|
resolvedBy: 'import',
|
|
1387
1468
|
};
|
|
1388
1469
|
}
|
|
1470
|
+
// An imported VALUE (singleton constant / shared instance) called
|
|
1471
|
+
// through a member: `reproStore.notifyJoinGuildStatus()` after
|
|
1472
|
+
// `import { reproStore } from './store'`. findExportedSymbol
|
|
1473
|
+
// resolved the CONSTANT itself; linking the CALL there hides the
|
|
1474
|
+
// real callee — callers of the method miss every cross-file use
|
|
1475
|
+
// and the method can look unused (#1292). Infer the value's type
|
|
1476
|
+
// from its own declaration in the exporting file and resolve the
|
|
1477
|
+
// member on that type. resolveMethodOnType VALIDATES the type
|
|
1478
|
+
// declares the method, so a mis-inference falls through to the
|
|
1479
|
+
// constant edge below rather than fabricating a wrong one.
|
|
1480
|
+
const instanceMember = resolveImportedInstanceMember(targetNode, ref, imp.localName, context);
|
|
1481
|
+
if (instanceMember)
|
|
1482
|
+
return instanceMember;
|
|
1389
1483
|
}
|
|
1390
1484
|
return {
|
|
1391
1485
|
original: ref,
|
|
@@ -1494,7 +1588,7 @@ function resolveLuaRequire(ref, context) {
|
|
|
1494
1588
|
return null;
|
|
1495
1589
|
const base = name.includes('.') ? name.replace(/\./g, '/') : name;
|
|
1496
1590
|
const suffixes = [`${base}.lua`, `${base}.luau`, `${base}/init.lua`, `${base}/init.luau`];
|
|
1497
|
-
const
|
|
1591
|
+
const byBasename = luaBasenameIndex(context);
|
|
1498
1592
|
const shared = (a, b) => {
|
|
1499
1593
|
let i = 0;
|
|
1500
1594
|
while (i < a.length && i < b.length && a[i] === b[i])
|
|
@@ -1502,7 +1596,11 @@ function resolveLuaRequire(ref, context) {
|
|
|
1502
1596
|
return i;
|
|
1503
1597
|
};
|
|
1504
1598
|
for (const suffix of suffixes) {
|
|
1505
|
-
|
|
1599
|
+
// Only files sharing the suffix's basename can match — the bucket is in
|
|
1600
|
+
// getAllFiles() order, so this filter yields exactly what the full-list
|
|
1601
|
+
// scan did.
|
|
1602
|
+
const candidates = byBasename.get(suffix.split('/').pop() ?? '') ?? [];
|
|
1603
|
+
const matches = candidates.filter((f) => f === suffix || f.endsWith('/' + suffix));
|
|
1506
1604
|
if (matches.length === 0)
|
|
1507
1605
|
continue;
|
|
1508
1606
|
matches.sort((x, y) => shared(y, ref.filePath) - shared(x, ref.filePath));
|
|
@@ -1867,12 +1965,33 @@ const REEXPORT_MAX_DEPTH = 8;
|
|
|
1867
1965
|
* resolved file, not declarations the file forwarded.
|
|
1868
1966
|
*/
|
|
1869
1967
|
function findExportedSymbol(filePath, want, language, context, visited, depth = 0) {
|
|
1968
|
+
// Memoize fresh (top-level) lookups only: recursive re-export steps carry a
|
|
1969
|
+
// populated `visited` set, whose contents change the reachable answer.
|
|
1970
|
+
// Every ref to the same imported symbol repeats this exact walk, so the
|
|
1971
|
+
// top-level memo removes the re-export chase + per-file linear scans from
|
|
1972
|
+
// all but the first occurrence.
|
|
1973
|
+
if (depth === 0 && visited.size === 0) {
|
|
1974
|
+
let memo = exportedSymbolMemos.get(context);
|
|
1975
|
+
if (!memo) {
|
|
1976
|
+
memo = new Map();
|
|
1977
|
+
exportedSymbolMemos.set(context, memo);
|
|
1978
|
+
}
|
|
1979
|
+
const key = `${filePath}\0${want.isDefault ? 1 : 0}${want.isNamespace ? 1 : 0}\0${want.exportedName}\0${want.memberName ?? ''}\0${language}`;
|
|
1980
|
+
if (memo.has(key))
|
|
1981
|
+
return memo.get(key);
|
|
1982
|
+
const result = findExportedSymbolWalk(filePath, want, language, context, visited, depth);
|
|
1983
|
+
memo.set(key, result);
|
|
1984
|
+
return result;
|
|
1985
|
+
}
|
|
1986
|
+
return findExportedSymbolWalk(filePath, want, language, context, visited, depth);
|
|
1987
|
+
}
|
|
1988
|
+
function findExportedSymbolWalk(filePath, want, language, context, visited, depth) {
|
|
1870
1989
|
if (depth > REEXPORT_MAX_DEPTH)
|
|
1871
1990
|
return undefined;
|
|
1872
1991
|
if (visited.has(filePath))
|
|
1873
1992
|
return undefined;
|
|
1874
1993
|
visited.add(filePath);
|
|
1875
|
-
const
|
|
1994
|
+
const exportIndex = getFileExportIndex(filePath, context);
|
|
1876
1995
|
// 1. Direct hit: the symbol is declared in this file.
|
|
1877
1996
|
if (want.isDefault) {
|
|
1878
1997
|
// Svelte/Vue single-file components ARE the module's default export,
|
|
@@ -1881,18 +2000,17 @@ function findExportedSymbol(filePath, want, language, context, visited, depth =
|
|
|
1881
2000
|
// `.ts`/`.tsx` `export default fn`/`class` case. Without the component
|
|
1882
2001
|
// branch, an `export { default as X } from './X.svelte'` barrel never
|
|
1883
2002
|
// resolves and the component shows a false 0 callers (#629).
|
|
1884
|
-
const direct =
|
|
1885
|
-
nodesInFile.find((n) => n.isExported && (n.kind === 'function' || n.kind === 'class'));
|
|
2003
|
+
const direct = exportIndex.defaultComponent ?? exportIndex.defaultFnClass;
|
|
1886
2004
|
if (direct)
|
|
1887
2005
|
return direct;
|
|
1888
2006
|
}
|
|
1889
2007
|
else if (want.isNamespace && want.memberName) {
|
|
1890
|
-
const direct =
|
|
2008
|
+
const direct = exportIndex.byName.get(want.memberName);
|
|
1891
2009
|
if (direct)
|
|
1892
2010
|
return direct;
|
|
1893
2011
|
}
|
|
1894
2012
|
else {
|
|
1895
|
-
const direct =
|
|
2013
|
+
const direct = exportIndex.byName.get(want.exportedName);
|
|
1896
2014
|
if (direct)
|
|
1897
2015
|
return direct;
|
|
1898
2016
|
}
|
|
@@ -1950,6 +2068,47 @@ const STATIC_MEMBER_CONTAINERS = new Set([
|
|
|
1950
2068
|
* languages whose members aren't `::`-qualified, and genuine class references,
|
|
1951
2069
|
* are unaffected. See #825.
|
|
1952
2070
|
*/
|
|
2071
|
+
/**
|
|
2072
|
+
* Resolve a CALL through an imported value to the method on the value's own
|
|
2073
|
+
* type: `reproStore.notifyJoinGuildStatus()` where `reproStore` is
|
|
2074
|
+
* `export const reproStore = new ReproStore()` in the imported file (#1292).
|
|
2075
|
+
* The same-file form of this call already resolves via local-variable
|
|
2076
|
+
* receiver inference (#1108); this is the cross-file/import half. The type is
|
|
2077
|
+
* recovered from the VALUE'S OWN declaration lines in the exporting file
|
|
2078
|
+
* (initializer `= new T(...)` or a type annotation, per the shared #1108
|
|
2079
|
+
* pattern table), then the member is resolved AND VALIDATED on that type by
|
|
2080
|
+
* resolveMethodOnType — a failed inference or validation returns null so the
|
|
2081
|
+
* caller keeps its existing constant-edge behavior.
|
|
2082
|
+
*/
|
|
2083
|
+
function resolveImportedInstanceMember(value, ref, localName, context) {
|
|
2084
|
+
if (ref.referenceKind !== 'calls')
|
|
2085
|
+
return null;
|
|
2086
|
+
if (value.kind !== 'constant' && value.kind !== 'variable')
|
|
2087
|
+
return null;
|
|
2088
|
+
const member = ref.referenceName.slice(localName.length + 1).split('.')[0];
|
|
2089
|
+
if (!member)
|
|
2090
|
+
return null;
|
|
2091
|
+
const source = context.readFile(value.filePath);
|
|
2092
|
+
if (!source)
|
|
2093
|
+
return null;
|
|
2094
|
+
// Only the value's own declaration lines — never the whole file, so a
|
|
2095
|
+
// same-named identifier elsewhere can't donate a type.
|
|
2096
|
+
const lines = source.split('\n');
|
|
2097
|
+
const declSlice = lines.slice(Math.max(0, value.startLine - 1), value.endLine).join('\n');
|
|
2098
|
+
const receiver = value.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
2099
|
+
for (const pattern of (0, name_matcher_1.localReceiverTypePatterns)(value.language, receiver)) {
|
|
2100
|
+
const m = declSlice.match(pattern);
|
|
2101
|
+
if (!m || !m[1])
|
|
2102
|
+
continue;
|
|
2103
|
+
const typeName = (0, name_matcher_1.normalizeInferredTypeName)(m[1]);
|
|
2104
|
+
if (!typeName)
|
|
2105
|
+
continue;
|
|
2106
|
+
const resolved = (0, name_matcher_1.resolveMethodOnType)(typeName, member, ref, context, 0.85, 'instance-method');
|
|
2107
|
+
if (resolved)
|
|
2108
|
+
return resolved;
|
|
2109
|
+
}
|
|
2110
|
+
return null;
|
|
2111
|
+
}
|
|
1953
2112
|
function resolveStaticMember(container, ref, localName, context) {
|
|
1954
2113
|
if (!STATIC_MEMBER_CONTAINERS.has(container.kind))
|
|
1955
2114
|
return undefined;
|