@samchon/graph 0.1.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/LICENSE +21 -0
- package/README.md +129 -0
- package/lib/AsyncSamchonGraphSource.d.ts +2 -0
- package/lib/AsyncSamchonGraphSource.js +3 -0
- package/lib/AsyncSamchonGraphSource.js.map +1 -0
- package/lib/SamchonGraphApplication.d.ts +10 -0
- package/lib/SamchonGraphApplication.js +64 -0
- package/lib/SamchonGraphApplication.js.map +1 -0
- package/lib/SamchonGraphSource.d.ts +2 -0
- package/lib/SamchonGraphSource.js +3 -0
- package/lib/SamchonGraphSource.js.map +1 -0
- package/lib/application.d.ts +3 -0
- package/lib/application.js +20 -0
- package/lib/application.js.map +1 -0
- package/lib/bin.d.ts +2 -0
- package/lib/bin.js +8 -0
- package/lib/bin.js.map +1 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +30 -0
- package/lib/index.js.map +1 -0
- package/lib/indexer/IBuildGraphOptions.d.ts +41 -0
- package/lib/indexer/IBuildGraphOptions.js +3 -0
- package/lib/indexer/IBuildGraphOptions.js.map +1 -0
- package/lib/indexer/IIndexerResult.d.ts +5 -0
- package/lib/indexer/IIndexerResult.js +3 -0
- package/lib/indexer/IIndexerResult.js.map +1 -0
- package/lib/indexer/ILanguageSpec.d.ts +10 -0
- package/lib/indexer/ILanguageSpec.js +3 -0
- package/lib/indexer/ILanguageSpec.js.map +1 -0
- package/lib/indexer/LANGUAGE_SPECS.d.ts +2 -0
- package/lib/indexer/LANGUAGE_SPECS.js +114 -0
- package/lib/indexer/LANGUAGE_SPECS.js.map +1 -0
- package/lib/indexer/allExtensions.d.ts +2 -0
- package/lib/indexer/allExtensions.js +16 -0
- package/lib/indexer/allExtensions.js.map +1 -0
- package/lib/indexer/buildGraph.d.ts +3 -0
- package/lib/indexer/buildGraph.js +10 -0
- package/lib/indexer/buildGraph.js.map +1 -0
- package/lib/indexer/buildGraphDump.d.ts +3 -0
- package/lib/indexer/buildGraphDump.js +394 -0
- package/lib/indexer/buildGraphDump.js.map +1 -0
- package/lib/indexer/buildLspGraph.d.ts +3 -0
- package/lib/indexer/buildLspGraph.js +617 -0
- package/lib/indexer/buildLspGraph.js.map +1 -0
- package/lib/indexer/buildStaticGraph.d.ts +3 -0
- package/lib/indexer/buildStaticGraph.js +479 -0
- package/lib/indexer/buildStaticGraph.js.map +1 -0
- package/lib/indexer/decoratorsAbove.d.ts +1 -0
- package/lib/indexer/decoratorsAbove.js +14 -0
- package/lib/indexer/decoratorsAbove.js.map +1 -0
- package/lib/indexer/languageOf.d.ts +2 -0
- package/lib/indexer/languageOf.js +19 -0
- package/lib/indexer/languageOf.js.map +1 -0
- package/lib/indexer/languages.d.ts +5 -0
- package/lib/indexer/languages.js +22 -0
- package/lib/indexer/languages.js.map +1 -0
- package/lib/indexer/lspIndexer.d.ts +1 -0
- package/lib/indexer/lspIndexer.js +18 -0
- package/lib/indexer/lspIndexer.js.map +1 -0
- package/lib/indexer/overrideEdges.d.ts +2 -0
- package/lib/indexer/overrideEdges.js +45 -0
- package/lib/indexer/overrideEdges.js.map +1 -0
- package/lib/indexer/resolveType.d.ts +2 -0
- package/lib/indexer/resolveType.js +11 -0
- package/lib/indexer/resolveType.js.map +1 -0
- package/lib/indexer/specOf.d.ts +3 -0
- package/lib/indexer/specOf.js +8 -0
- package/lib/indexer/specOf.js.map +1 -0
- package/lib/indexer/staticIndexer.d.ts +1 -0
- package/lib/indexer/staticIndexer.js +18 -0
- package/lib/indexer/staticIndexer.js.map +1 -0
- package/lib/indexer/supertypesOf.d.ts +4 -0
- package/lib/indexer/supertypesOf.js +48 -0
- package/lib/indexer/supertypesOf.js.map +1 -0
- package/lib/lsp/DocumentSymbolResult.d.ts +3 -0
- package/lib/lsp/DocumentSymbolResult.js +3 -0
- package/lib/lsp/DocumentSymbolResult.js.map +1 -0
- package/lib/lsp/IDiagnostic.d.ts +8 -0
- package/lib/lsp/IDiagnostic.js +3 -0
- package/lib/lsp/IDiagnostic.js.map +1 -0
- package/lib/lsp/IDocumentSymbol.d.ts +9 -0
- package/lib/lsp/IDocumentSymbol.js +3 -0
- package/lib/lsp/IDocumentSymbol.js.map +1 -0
- package/lib/lsp/ILocation.d.ts +5 -0
- package/lib/lsp/ILocation.js +3 -0
- package/lib/lsp/ILocation.js.map +1 -0
- package/lib/lsp/IPosition.d.ts +4 -0
- package/lib/lsp/IPosition.js +3 -0
- package/lib/lsp/IPosition.js.map +1 -0
- package/lib/lsp/IRange.d.ts +5 -0
- package/lib/lsp/IRange.js +3 -0
- package/lib/lsp/IRange.js.map +1 -0
- package/lib/lsp/ISymbolInformation.d.ts +7 -0
- package/lib/lsp/ISymbolInformation.js +3 -0
- package/lib/lsp/ISymbolInformation.js.map +1 -0
- package/lib/lsp/LspClient.d.ts +17 -0
- package/lib/lsp/LspClient.js +140 -0
- package/lib/lsp/LspClient.js.map +1 -0
- package/lib/lsp/isDocumentSymbol.d.ts +3 -0
- package/lib/lsp/isDocumentSymbol.js +7 -0
- package/lib/lsp/isDocumentSymbol.js.map +1 -0
- package/lib/lsp/types.d.ts +8 -0
- package/lib/lsp/types.js +25 -0
- package/lib/lsp/types.js.map +1 -0
- package/lib/mcp/createServer.d.ts +3 -0
- package/lib/mcp/createServer.js +1947 -0
- package/lib/mcp/createServer.js.map +1 -0
- package/lib/mcp/startServer.d.ts +5 -0
- package/lib/mcp/startServer.js +23 -0
- package/lib/mcp/startServer.js.map +1 -0
- package/lib/model/GraphMemory.d.ts +25 -0
- package/lib/model/GraphMemory.js +141 -0
- package/lib/model/GraphMemory.js.map +1 -0
- package/lib/operations/bound.d.ts +1 -0
- package/lib/operations/bound.js +8 -0
- package/lib/operations/bound.js.map +1 -0
- package/lib/operations/common.d.ts +15 -0
- package/lib/operations/common.js +32 -0
- package/lib/operations/common.js.map +1 -0
- package/lib/operations/compareEdges.d.ts +2 -0
- package/lib/operations/compareEdges.js +10 -0
- package/lib/operations/compareEdges.js.map +1 -0
- package/lib/operations/edgeRank.d.ts +1 -0
- package/lib/operations/edgeRank.js +25 -0
- package/lib/operations/edgeRank.js.map +1 -0
- package/lib/operations/isExecution.d.ts +1 -0
- package/lib/operations/isExecution.js +11 -0
- package/lib/operations/isExecution.js.map +1 -0
- package/lib/operations/isPublicApiNoisePath.d.ts +2 -0
- package/lib/operations/isPublicApiNoisePath.js +11 -0
- package/lib/operations/isPublicApiNoisePath.js.map +1 -0
- package/lib/operations/isStructural.d.ts +1 -0
- package/lib/operations/isStructural.js +7 -0
- package/lib/operations/isStructural.js.map +1 -0
- package/lib/operations/isSupportPath.d.ts +2 -0
- package/lib/operations/isSupportPath.js +16 -0
- package/lib/operations/isSupportPath.js.map +1 -0
- package/lib/operations/isTestPath.d.ts +1 -0
- package/lib/operations/isTestPath.js +9 -0
- package/lib/operations/isTestPath.js.map +1 -0
- package/lib/operations/isTypeEdge.d.ts +1 -0
- package/lib/operations/isTypeEdge.js +11 -0
- package/lib/operations/isTypeEdge.js.map +1 -0
- package/lib/operations/publicEvidence.d.ts +2 -0
- package/lib/operations/publicEvidence.js +13 -0
- package/lib/operations/publicEvidence.js.map +1 -0
- package/lib/operations/referencesFromEdges.d.ts +3 -0
- package/lib/operations/referencesFromEdges.js +38 -0
- package/lib/operations/referencesFromEdges.js.map +1 -0
- package/lib/operations/resolveHandle.d.ts +6 -0
- package/lib/operations/resolveHandle.js +28 -0
- package/lib/operations/resolveHandle.js.map +1 -0
- package/lib/operations/resultGuide.d.ts +1 -0
- package/lib/operations/resultGuide.js +7 -0
- package/lib/operations/resultGuide.js.map +1 -0
- package/lib/operations/resultNext.d.ts +2 -0
- package/lib/operations/resultNext.js +7 -0
- package/lib/operations/resultNext.js.map +1 -0
- package/lib/operations/runDetails.d.ts +8 -0
- package/lib/operations/runDetails.js +190 -0
- package/lib/operations/runDetails.js.map +1 -0
- package/lib/operations/runEntrypoints.d.ts +9 -0
- package/lib/operations/runEntrypoints.js +122 -0
- package/lib/operations/runEntrypoints.js.map +1 -0
- package/lib/operations/runLookup.d.ts +10 -0
- package/lib/operations/runLookup.js +229 -0
- package/lib/operations/runLookup.js.map +1 -0
- package/lib/operations/runOverview.d.ts +10 -0
- package/lib/operations/runOverview.js +142 -0
- package/lib/operations/runOverview.js.map +1 -0
- package/lib/operations/runTour.d.ts +8 -0
- package/lib/operations/runTour.js +539 -0
- package/lib/operations/runTour.js.map +1 -0
- package/lib/operations/runTrace.d.ts +10 -0
- package/lib/operations/runTrace.js +283 -0
- package/lib/operations/runTrace.js.map +1 -0
- package/lib/operations/signatureOf.d.ts +2 -0
- package/lib/operations/signatureOf.js +45 -0
- package/lib/operations/signatureOf.js.map +1 -0
- package/lib/operations/subwords.d.ts +1 -0
- package/lib/operations/subwords.js +12 -0
- package/lib/operations/subwords.js.map +1 -0
- package/lib/operations/summaryOf.d.ts +2 -0
- package/lib/operations/summaryOf.js +24 -0
- package/lib/operations/summaryOf.js.map +1 -0
- package/lib/runGraph.d.ts +1 -0
- package/lib/runGraph.js +165 -0
- package/lib/runGraph.js.map +1 -0
- package/lib/structures/GraphEdgeKind.d.ts +10 -0
- package/lib/structures/GraphEdgeKind.js +3 -0
- package/lib/structures/GraphEdgeKind.js.map +1 -0
- package/lib/structures/GraphLanguage.d.ts +2 -0
- package/lib/structures/GraphLanguage.js +3 -0
- package/lib/structures/GraphLanguage.js.map +1 -0
- package/lib/structures/GraphNodeKind.d.ts +11 -0
- package/lib/structures/GraphNodeKind.js +3 -0
- package/lib/structures/GraphNodeKind.js.map +1 -0
- package/lib/structures/IGraphDecorator.d.ts +22 -0
- package/lib/structures/IGraphDecorator.js +3 -0
- package/lib/structures/IGraphDecorator.js.map +1 -0
- package/lib/structures/IGraphDetails.d.ts +126 -0
- package/lib/structures/IGraphDetails.js +3 -0
- package/lib/structures/IGraphDetails.js.map +1 -0
- package/lib/structures/IGraphDiagnostic.d.ts +23 -0
- package/lib/structures/IGraphDiagnostic.js +3 -0
- package/lib/structures/IGraphDiagnostic.js.map +1 -0
- package/lib/structures/IGraphDump.d.ts +37 -0
- package/lib/structures/IGraphDump.js +3 -0
- package/lib/structures/IGraphDump.js.map +1 -0
- package/lib/structures/IGraphEdge.d.ts +20 -0
- package/lib/structures/IGraphEdge.js +3 -0
- package/lib/structures/IGraphEdge.js.map +1 -0
- package/lib/structures/IGraphEntrypoints.d.ts +57 -0
- package/lib/structures/IGraphEntrypoints.js +3 -0
- package/lib/structures/IGraphEntrypoints.js.map +1 -0
- package/lib/structures/IGraphEscape.d.ts +40 -0
- package/lib/structures/IGraphEscape.js +3 -0
- package/lib/structures/IGraphEscape.js.map +1 -0
- package/lib/structures/IGraphEvidence.d.ts +24 -0
- package/lib/structures/IGraphEvidence.js +3 -0
- package/lib/structures/IGraphEvidence.js.map +1 -0
- package/lib/structures/IGraphLookup.d.ts +66 -0
- package/lib/structures/IGraphLookup.js +3 -0
- package/lib/structures/IGraphLookup.js.map +1 -0
- package/lib/structures/IGraphNext.d.ts +15 -0
- package/lib/structures/IGraphNext.js +3 -0
- package/lib/structures/IGraphNext.js.map +1 -0
- package/lib/structures/IGraphNode.d.ts +62 -0
- package/lib/structures/IGraphNode.js +3 -0
- package/lib/structures/IGraphNode.js.map +1 -0
- package/lib/structures/IGraphOverview.d.ts +100 -0
- package/lib/structures/IGraphOverview.js +3 -0
- package/lib/structures/IGraphOverview.js.map +1 -0
- package/lib/structures/IGraphTour.d.ts +54 -0
- package/lib/structures/IGraphTour.js +3 -0
- package/lib/structures/IGraphTour.js.map +1 -0
- package/lib/structures/IGraphTrace.d.ts +126 -0
- package/lib/structures/IGraphTrace.js +3 -0
- package/lib/structures/IGraphTrace.js.map +1 -0
- package/lib/structures/ISamchonGraphApplication.d.ts +162 -0
- package/lib/structures/ISamchonGraphApplication.js +3 -0
- package/lib/structures/ISamchonGraphApplication.js.map +1 -0
- package/lib/structures/index.d.ts +18 -0
- package/lib/structures/index.js +35 -0
- package/lib/structures/index.js.map +1 -0
- package/lib/structures.d.ts +1 -0
- package/lib/structures.js +18 -0
- package/lib/structures.js.map +1 -0
- package/lib/utils/DEFAULT_IGNORES.d.ts +1 -0
- package/lib/utils/DEFAULT_IGNORES.js +39 -0
- package/lib/utils/DEFAULT_IGNORES.js.map +1 -0
- package/lib/utils/IWalkOptions.d.ts +5 -0
- package/lib/utils/IWalkOptions.js +3 -0
- package/lib/utils/IWalkOptions.js.map +1 -0
- package/lib/utils/basename.d.ts +1 -0
- package/lib/utils/basename.js +10 -0
- package/lib/utils/basename.js.map +1 -0
- package/lib/utils/dirname.d.ts +1 -0
- package/lib/utils/dirname.js +10 -0
- package/lib/utils/dirname.js.map +1 -0
- package/lib/utils/fileFromUri.d.ts +1 -0
- package/lib/utils/fileFromUri.js +20 -0
- package/lib/utils/fileFromUri.js.map +1 -0
- package/lib/utils/fileUri.d.ts +1 -0
- package/lib/utils/fileUri.js +19 -0
- package/lib/utils/fileUri.js.map +1 -0
- package/lib/utils/fs.d.ts +6 -0
- package/lib/utils/fs.js +23 -0
- package/lib/utils/fs.js.map +1 -0
- package/lib/utils/isSubPath.d.ts +1 -0
- package/lib/utils/isSubPath.js +15 -0
- package/lib/utils/isSubPath.js.map +1 -0
- package/lib/utils/normalizePath.d.ts +1 -0
- package/lib/utils/normalizePath.js +7 -0
- package/lib/utils/normalizePath.js.map +1 -0
- package/lib/utils/path.d.ts +7 -0
- package/lib/utils/path.js +24 -0
- package/lib/utils/path.js.map +1 -0
- package/lib/utils/projectRelative.d.ts +1 -0
- package/lib/utils/projectRelative.js +9 -0
- package/lib/utils/projectRelative.js.map +1 -0
- package/lib/utils/readLines.d.ts +1 -0
- package/lib/utils/readLines.js +8 -0
- package/lib/utils/readLines.js.map +1 -0
- package/lib/utils/readText.d.ts +1 -0
- package/lib/utils/readText.js +17 -0
- package/lib/utils/readText.js.map +1 -0
- package/lib/utils/relativePath.d.ts +1 -0
- package/lib/utils/relativePath.js +12 -0
- package/lib/utils/relativePath.js.map +1 -0
- package/lib/utils/walkSourceFiles.d.ts +2 -0
- package/lib/utils/walkSourceFiles.js +44 -0
- package/lib/utils/walkSourceFiles.js.map +1 -0
- package/package.json +55 -0
- package/src/AsyncSamchonGraphSource.ts +5 -0
- package/src/SamchonGraphApplication.ts +74 -0
- package/src/SamchonGraphSource.ts +3 -0
- package/src/application.ts +3 -0
- package/src/bin.ts +6 -0
- package/src/index.ts +13 -0
- package/src/indexer/IBuildGraphOptions.ts +42 -0
- package/src/indexer/IIndexerResult.ts +6 -0
- package/src/indexer/ILanguageSpec.ts +11 -0
- package/src/indexer/LANGUAGE_SPECS.ts +112 -0
- package/src/indexer/allExtensions.ts +12 -0
- package/src/indexer/buildGraph.ts +10 -0
- package/src/indexer/buildGraphDump.ts +29 -0
- package/src/indexer/buildLspGraph.ts +710 -0
- package/src/indexer/buildStaticGraph.ts +507 -0
- package/src/indexer/decoratorsAbove.ts +9 -0
- package/src/indexer/languageOf.ts +13 -0
- package/src/indexer/languages.ts +5 -0
- package/src/indexer/lspIndexer.ts +1 -0
- package/src/indexer/overrideEdges.ts +42 -0
- package/src/indexer/resolveType.ts +14 -0
- package/src/indexer/specOf.ts +7 -0
- package/src/indexer/staticIndexer.ts +1 -0
- package/src/indexer/supertypesOf.ts +43 -0
- package/src/lsp/DocumentSymbolResult.ts +4 -0
- package/src/lsp/IDiagnostic.ts +9 -0
- package/src/lsp/IDocumentSymbol.ts +10 -0
- package/src/lsp/ILocation.ts +6 -0
- package/src/lsp/IPosition.ts +4 -0
- package/src/lsp/IRange.ts +6 -0
- package/src/lsp/ISymbolInformation.ts +8 -0
- package/src/lsp/LspClient.ts +165 -0
- package/src/lsp/isDocumentSymbol.ts +8 -0
- package/src/lsp/types.ts +8 -0
- package/src/mcp/createServer.ts +23 -0
- package/src/mcp/startServer.ts +23 -0
- package/src/model/GraphMemory.ts +165 -0
- package/src/operations/bound.ts +9 -0
- package/src/operations/common.ts +15 -0
- package/src/operations/compareEdges.ts +10 -0
- package/src/operations/edgeRank.ts +23 -0
- package/src/operations/isExecution.ts +9 -0
- package/src/operations/isPublicApiNoisePath.ts +10 -0
- package/src/operations/isStructural.ts +3 -0
- package/src/operations/isSupportPath.ts +16 -0
- package/src/operations/isTestPath.ts +7 -0
- package/src/operations/isTypeEdge.ts +9 -0
- package/src/operations/publicEvidence.ts +11 -0
- package/src/operations/referencesFromEdges.ts +37 -0
- package/src/operations/resolveHandle.ts +27 -0
- package/src/operations/resultGuide.ts +3 -0
- package/src/operations/resultNext.ts +9 -0
- package/src/operations/runDetails.ts +240 -0
- package/src/operations/runEntrypoints.ts +153 -0
- package/src/operations/runLookup.ts +269 -0
- package/src/operations/runOverview.ts +158 -0
- package/src/operations/runTour.ts +582 -0
- package/src/operations/runTrace.ts +339 -0
- package/src/operations/signatureOf.ts +40 -0
- package/src/operations/subwords.ts +8 -0
- package/src/operations/summaryOf.ts +21 -0
- package/src/runGraph.ts +144 -0
- package/src/structures/GraphEdgeKind.ts +24 -0
- package/src/structures/GraphLanguage.ts +21 -0
- package/src/structures/GraphNodeKind.ts +27 -0
- package/src/structures/IGraphDecorator.ts +25 -0
- package/src/structures/IGraphDetails.ts +153 -0
- package/src/structures/IGraphDiagnostic.ts +29 -0
- package/src/structures/IGraphDump.ts +45 -0
- package/src/structures/IGraphEdge.ts +24 -0
- package/src/structures/IGraphEntrypoints.ts +70 -0
- package/src/structures/IGraphEscape.ts +49 -0
- package/src/structures/IGraphEvidence.ts +29 -0
- package/src/structures/IGraphLookup.ts +80 -0
- package/src/structures/IGraphNext.ts +23 -0
- package/src/structures/IGraphNode.ts +76 -0
- package/src/structures/IGraphOverview.ts +121 -0
- package/src/structures/IGraphTour.ts +68 -0
- package/src/structures/IGraphTrace.ts +154 -0
- package/src/structures/ISamchonGraphApplication.ts +186 -0
- package/src/structures/index.ts +18 -0
- package/src/structures.ts +1 -0
- package/src/utils/DEFAULT_IGNORES.ts +35 -0
- package/src/utils/IWalkOptions.ts +5 -0
- package/src/utils/basename.ts +7 -0
- package/src/utils/dirname.ts +7 -0
- package/src/utils/fileFromUri.ts +14 -0
- package/src/utils/fileUri.ts +13 -0
- package/src/utils/fs.ts +6 -0
- package/src/utils/isSubPath.ts +9 -0
- package/src/utils/normalizePath.ts +3 -0
- package/src/utils/path.ts +7 -0
- package/src/utils/projectRelative.ts +6 -0
- package/src/utils/readLines.ts +5 -0
- package/src/utils/readText.ts +10 -0
- package/src/utils/relativePath.ts +7 -0
- package/src/utils/walkSourceFiles.ts +35 -0
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildLspGraph = buildLspGraph;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const LspClient_1 = require("../lsp/LspClient");
|
|
11
|
+
const types_1 = require("../lsp/types");
|
|
12
|
+
const isTestPath_1 = require("../operations/isTestPath");
|
|
13
|
+
const fs_1 = require("../utils/fs");
|
|
14
|
+
const path_1 = require("../utils/path");
|
|
15
|
+
const languages_1 = require("./languages");
|
|
16
|
+
const staticIndexer_1 = require("./staticIndexer");
|
|
17
|
+
const decoratorsAbove_1 = require("./decoratorsAbove");
|
|
18
|
+
const overrideEdges_1 = require("./overrideEdges");
|
|
19
|
+
const resolveType_1 = require("./resolveType");
|
|
20
|
+
const supertypesOf_1 = require("./supertypesOf");
|
|
21
|
+
async function buildLspGraph(options = {}) {
|
|
22
|
+
const root = node_path_1.default.resolve(options.cwd ?? process.cwd());
|
|
23
|
+
const languages = options.languages ?? discoverLanguages(root, options);
|
|
24
|
+
const nodes = [];
|
|
25
|
+
const edges = [];
|
|
26
|
+
const diagnostics = [];
|
|
27
|
+
const warnings = [];
|
|
28
|
+
const staticFallbackLanguages = [];
|
|
29
|
+
let lspNodeCount = 0;
|
|
30
|
+
for (const language of languages) {
|
|
31
|
+
const files = (0, fs_1.walkSourceFiles)(root, {
|
|
32
|
+
extensions: (0, languages_1.allExtensions)([language]),
|
|
33
|
+
maxFiles: options.maxFiles,
|
|
34
|
+
});
|
|
35
|
+
if (files.length === 0)
|
|
36
|
+
continue;
|
|
37
|
+
const spec = (0, languages_1.specOf)(language);
|
|
38
|
+
if (spec?.lsp === undefined) {
|
|
39
|
+
warnings.push(`${language}: no built-in LSP server is configured.`);
|
|
40
|
+
staticFallbackLanguages.push(language);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const command = options.server ?? spec.lsp.command;
|
|
44
|
+
const args = options.serverArgs ?? spec.lsp.args;
|
|
45
|
+
const resolved = resolveCommand(command);
|
|
46
|
+
if (resolved === undefined) {
|
|
47
|
+
warnings.push(`${language}: LSP server not found on PATH: ${command}`);
|
|
48
|
+
staticFallbackLanguages.push(language);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// npm installs Windows servers as .cmd shims, which CreateProcess cannot
|
|
52
|
+
// spawn directly; run those through cmd.exe so typescript-language-server,
|
|
53
|
+
// pyright-langserver, and friends work from a plain global install.
|
|
54
|
+
const spawnable = /\.(cmd|bat)$/i.test(resolved)
|
|
55
|
+
? { command: "cmd.exe", args: ["/d", "/s", "/c", resolved, ...args] }
|
|
56
|
+
: { command, args: [...args] };
|
|
57
|
+
try {
|
|
58
|
+
const result = await collectLanguageGraph(root, language, spawnable.command, spawnable.args, files, options);
|
|
59
|
+
if (result.nodes.length === 0) {
|
|
60
|
+
warnings.push(`${language}: LSP returned no symbols; using static fallback.`);
|
|
61
|
+
staticFallbackLanguages.push(language);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
appendAll(nodes, result.nodes);
|
|
65
|
+
appendAll(edges, result.edges);
|
|
66
|
+
appendAll(diagnostics, result.diagnostics);
|
|
67
|
+
appendAll(warnings, result.warnings);
|
|
68
|
+
lspNodeCount += result.nodes.length;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
warnings.push(`${language}: LSP indexing failed: ${error.message}`);
|
|
73
|
+
staticFallbackLanguages.push(language);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (staticFallbackLanguages.length > 0) {
|
|
77
|
+
const fallback = (0, staticIndexer_1.buildStaticGraph)({
|
|
78
|
+
...options,
|
|
79
|
+
cwd: root,
|
|
80
|
+
mode: "static",
|
|
81
|
+
languages: staticFallbackLanguages,
|
|
82
|
+
});
|
|
83
|
+
if (lspNodeCount === 0) {
|
|
84
|
+
return {
|
|
85
|
+
dump: {
|
|
86
|
+
...fallback,
|
|
87
|
+
indexer: "static",
|
|
88
|
+
warnings: [...fallback.warnings, ...warnings],
|
|
89
|
+
},
|
|
90
|
+
warnings,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
appendAll(nodes, fallback.nodes);
|
|
94
|
+
appendAll(edges, fallback.edges);
|
|
95
|
+
appendAll(warnings, fallback.warnings);
|
|
96
|
+
}
|
|
97
|
+
if (nodes.length === 0) {
|
|
98
|
+
const fallback = (0, staticIndexer_1.buildStaticGraph)(options);
|
|
99
|
+
return {
|
|
100
|
+
dump: {
|
|
101
|
+
...fallback,
|
|
102
|
+
indexer: "static",
|
|
103
|
+
warnings: [...fallback.warnings, ...warnings],
|
|
104
|
+
},
|
|
105
|
+
warnings,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
dump: {
|
|
110
|
+
project: root,
|
|
111
|
+
languages: [...new Set(nodes.map((node) => node.language))],
|
|
112
|
+
generatedAt: new Date().toISOString(),
|
|
113
|
+
// Only a static fallback makes the graph a hybrid; a benign warning (e.g.
|
|
114
|
+
// the reference cap) on a pure-LSP run must not relabel it.
|
|
115
|
+
indexer: staticFallbackLanguages.length > 0 ? "hybrid" : "lsp",
|
|
116
|
+
nodes: dedupeNodes(nodes),
|
|
117
|
+
edges: dedupeEdges(edges),
|
|
118
|
+
diagnostics,
|
|
119
|
+
warnings,
|
|
120
|
+
},
|
|
121
|
+
warnings,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function discoverLanguages(root, options) {
|
|
125
|
+
const files = (0, fs_1.walkSourceFiles)(root, {
|
|
126
|
+
extensions: (0, languages_1.allExtensions)(options.languages),
|
|
127
|
+
maxFiles: options.maxFiles,
|
|
128
|
+
});
|
|
129
|
+
return [...new Set(files.map(languages_1.languageOf).filter((language) => language !== "unknown"))];
|
|
130
|
+
}
|
|
131
|
+
async function collectLanguageGraph(root, language, command, args, files, options) {
|
|
132
|
+
const client = new LspClient_1.LspClient(command, args, options.lspTimeoutMs ?? 10000);
|
|
133
|
+
const diagnostics = [];
|
|
134
|
+
let lastProgressAt = 0;
|
|
135
|
+
client.onNotification("$/progress", () => {
|
|
136
|
+
lastProgressAt = Date.now();
|
|
137
|
+
});
|
|
138
|
+
client.onNotification("textDocument/publishDiagnostics", (params) => {
|
|
139
|
+
const typed = params;
|
|
140
|
+
/* c8 ignore next */
|
|
141
|
+
if (typed.uri === undefined || typed.diagnostics === undefined)
|
|
142
|
+
return;
|
|
143
|
+
const file = (0, path_1.fileFromUri)(typed.uri);
|
|
144
|
+
/* c8 ignore next */
|
|
145
|
+
if (!(0, path_1.isSubPath)(root, file))
|
|
146
|
+
return;
|
|
147
|
+
const rel = (0, fs_1.projectRelative)(root, file);
|
|
148
|
+
appendAll(diagnostics, typed.diagnostics.map((diagnostic) => convertDiagnostic(rel, diagnostic)));
|
|
149
|
+
});
|
|
150
|
+
try {
|
|
151
|
+
await client.request("initialize", {
|
|
152
|
+
processId: process.pid,
|
|
153
|
+
rootUri: (0, path_1.fileUri)(root),
|
|
154
|
+
initializationOptions: options.initializationOptions,
|
|
155
|
+
capabilities: {
|
|
156
|
+
window: { workDoneProgress: true },
|
|
157
|
+
textDocument: {
|
|
158
|
+
documentSymbol: { hierarchicalDocumentSymbolSupport: true },
|
|
159
|
+
references: { dynamicRegistration: false },
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
workspaceFolders: [{ uri: (0, path_1.fileUri)(root), name: node_path_1.default.basename(root) }],
|
|
163
|
+
});
|
|
164
|
+
client.notify("initialized", {});
|
|
165
|
+
const nodes = [];
|
|
166
|
+
const byFile = new Map();
|
|
167
|
+
const opened = [];
|
|
168
|
+
for (const abs of files) {
|
|
169
|
+
const text = (0, fs_1.readText)(abs);
|
|
170
|
+
/* c8 ignore next */
|
|
171
|
+
if (text === undefined)
|
|
172
|
+
continue;
|
|
173
|
+
const rel = (0, fs_1.projectRelative)(root, abs);
|
|
174
|
+
opened.push({ abs, rel, text });
|
|
175
|
+
client.notify("textDocument/didOpen", {
|
|
176
|
+
textDocument: {
|
|
177
|
+
uri: (0, path_1.fileUri)(abs),
|
|
178
|
+
languageId: languageIdOf(language),
|
|
179
|
+
version: 1,
|
|
180
|
+
text,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// Wait for the server's initial indexing BEFORE asking for symbols. Servers
|
|
185
|
+
// that load a project asynchronously differ in how they answer early
|
|
186
|
+
// requests: jdtls blocks them (a longer request timeout suffices), but
|
|
187
|
+
// csharp-ls answers documentSymbol with an empty list until its solution is
|
|
188
|
+
// loaded — collecting symbols first would silently index nothing.
|
|
189
|
+
await waitForIndexing(() => lastProgressAt, options.lspReadyQuietMs ?? 1500, options.lspReadyTimeoutMs ?? 30000);
|
|
190
|
+
for (const openedFile of opened) {
|
|
191
|
+
const symbols = await client.request("textDocument/documentSymbol", { textDocument: { uri: (0, path_1.fileUri)(openedFile.abs) } });
|
|
192
|
+
const converted = convertSymbols(language, openedFile.rel, symbols);
|
|
193
|
+
byFile.set(openedFile.rel, converted);
|
|
194
|
+
appendAll(nodes, converted);
|
|
195
|
+
}
|
|
196
|
+
const linesByFile = new Map();
|
|
197
|
+
for (const openedFile of opened) {
|
|
198
|
+
linesByFile.set(openedFile.rel, openedFile.text.split(/\r?\n/));
|
|
199
|
+
}
|
|
200
|
+
const edges = [];
|
|
201
|
+
const referenceLimit = options.lspReferenceLimit ?? 250;
|
|
202
|
+
// When the reference budget is smaller than the symbol count, spend it on
|
|
203
|
+
// product code first: test files (spec callbacks and the like) otherwise
|
|
204
|
+
// crowd out the API surface an agent actually asks about.
|
|
205
|
+
const referenceTargets = [...nodes]
|
|
206
|
+
.sort((a, b) => Number((0, isTestPath_1.isTestPath)(a.file)) - Number((0, isTestPath_1.isTestPath)(b.file)))
|
|
207
|
+
.slice(0, referenceLimit);
|
|
208
|
+
// Language servers build their cross-file reference index lazily — often on
|
|
209
|
+
// the FIRST `textDocument/references` call, not during the initial
|
|
210
|
+
// `$/progress` indexing wait above. So warm the index with one patient
|
|
211
|
+
// request before firing the batch: once it exists, every later request is
|
|
212
|
+
// served from the server's cache in milliseconds. Firing the whole batch
|
|
213
|
+
// cold instead makes every request race the same one-time build and time
|
|
214
|
+
// out (ruby-lsp on a fresh project is the pathological case). Results stay
|
|
215
|
+
// indexed by target order to keep edge output deterministic.
|
|
216
|
+
const referenceParams = (target) => {
|
|
217
|
+
const evidence = target.evidence;
|
|
218
|
+
return {
|
|
219
|
+
textDocument: { uri: (0, path_1.fileUri)(node_path_1.default.join(root, target.file)) },
|
|
220
|
+
position: {
|
|
221
|
+
line: evidence.startLine - 1,
|
|
222
|
+
character: Math.max(0, evidence.startCol - 1),
|
|
223
|
+
},
|
|
224
|
+
context: { includeDeclaration: false },
|
|
225
|
+
};
|
|
226
|
+
};
|
|
227
|
+
const referenceResults = new Array(referenceTargets.length).fill(null);
|
|
228
|
+
// Only after the warmup request actually returns is the server proven able
|
|
229
|
+
// to answer references; a timeout even under the patient budget means it
|
|
230
|
+
// cannot, so we keep the structural graph and skip the rest rather than
|
|
231
|
+
// grinding the full batch.
|
|
232
|
+
let referencesUnavailable = false;
|
|
233
|
+
if (referenceTargets.length > 0) {
|
|
234
|
+
const warm = await safeReferences(client, referenceParams(referenceTargets[0]), options.lspWarmupTimeoutMs ?? 180000);
|
|
235
|
+
if (warm === "timeout")
|
|
236
|
+
referencesUnavailable = true;
|
|
237
|
+
else
|
|
238
|
+
referenceResults[0] = warm;
|
|
239
|
+
}
|
|
240
|
+
if (!referencesUnavailable && referenceTargets.length > 1) {
|
|
241
|
+
const rest = await mapWithConcurrency(referenceTargets.slice(1), options.lspConcurrency ?? 16, async (target) => {
|
|
242
|
+
const refs = await safeReferences(client, referenceParams(target));
|
|
243
|
+
return refs === "timeout" ? null : refs;
|
|
244
|
+
});
|
|
245
|
+
for (let index = 0; index < rest.length; index++) {
|
|
246
|
+
referenceResults[index + 1] = rest[index];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
for (let index = 0; index < referenceTargets.length; index++) {
|
|
250
|
+
const target = referenceTargets[index];
|
|
251
|
+
const refs = referenceResults[index];
|
|
252
|
+
for (const ref of refs ?? []) {
|
|
253
|
+
const refFile = (0, path_1.fileFromUri)(ref.uri);
|
|
254
|
+
if (!(0, path_1.isSubPath)(root, refFile))
|
|
255
|
+
continue;
|
|
256
|
+
const rel = (0, fs_1.projectRelative)(root, refFile);
|
|
257
|
+
const owners = byFile.get(rel);
|
|
258
|
+
if (owners === undefined)
|
|
259
|
+
continue;
|
|
260
|
+
const owner = ownerAt(owners, ref.range.start.line + 1);
|
|
261
|
+
if (owner === undefined || owner.id === target.id)
|
|
262
|
+
continue;
|
|
263
|
+
const refLine = linesByFile.get(rel)?.[ref.range.start.line];
|
|
264
|
+
edges.push({
|
|
265
|
+
from: owner.id,
|
|
266
|
+
to: target.id,
|
|
267
|
+
kind: referenceKind(target.kind, refLine, ref.range.end.character),
|
|
268
|
+
evidence: {
|
|
269
|
+
file: rel,
|
|
270
|
+
startLine: ref.range.start.line + 1,
|
|
271
|
+
startCol: ref.range.start.character + 1,
|
|
272
|
+
endLine: ref.range.end.line + 1,
|
|
273
|
+
endCol: ref.range.end.character + 1,
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Make the document-symbol hierarchy explicit: every nested symbol is
|
|
279
|
+
// contained by its owner. The owner is the node whose path is this node's
|
|
280
|
+
// qualified name without its last segment.
|
|
281
|
+
const nodeByPath = new Map();
|
|
282
|
+
for (const node of nodes) {
|
|
283
|
+
nodeByPath.set(`${node.file}\0${node.qualifiedName ?? node.name}`, node);
|
|
284
|
+
}
|
|
285
|
+
for (const node of nodes) {
|
|
286
|
+
if (node.qualifiedName === undefined)
|
|
287
|
+
continue;
|
|
288
|
+
const parent = nodeByPath.get(`${node.file}\0${node.qualifiedName.slice(0, node.qualifiedName.lastIndexOf("."))}`);
|
|
289
|
+
if (parent === undefined)
|
|
290
|
+
continue;
|
|
291
|
+
edges.push({ from: parent.id, to: node.id, kind: "contains", evidence: node.evidence });
|
|
292
|
+
}
|
|
293
|
+
// Inheritance: the language server does not report supertypes uniformly
|
|
294
|
+
// (typescript-language-server, for one, has no typeHierarchy), so parse the
|
|
295
|
+
// declaration line the same way the static indexer does and resolve the
|
|
296
|
+
// supertypes against the symbols the server did report.
|
|
297
|
+
const byName = new Map();
|
|
298
|
+
for (const node of nodes) {
|
|
299
|
+
const list = byName.get(node.name);
|
|
300
|
+
if (list === undefined)
|
|
301
|
+
byName.set(node.name, [node]);
|
|
302
|
+
else
|
|
303
|
+
list.push(node);
|
|
304
|
+
}
|
|
305
|
+
for (const node of nodes) {
|
|
306
|
+
if (node.kind !== "class" && node.kind !== "interface")
|
|
307
|
+
continue;
|
|
308
|
+
const line = linesByFile.get(node.file)[node.evidence.startLine - 1].trim();
|
|
309
|
+
const seen = new Set();
|
|
310
|
+
for (const supertype of (0, supertypesOf_1.supertypesOf)(line)) {
|
|
311
|
+
const target = (0, resolveType_1.resolveType)(supertype.name, node, byName);
|
|
312
|
+
if (target === undefined)
|
|
313
|
+
continue;
|
|
314
|
+
const key = `${supertype.relation}\0${target.id}`;
|
|
315
|
+
if (seen.has(key))
|
|
316
|
+
continue;
|
|
317
|
+
seen.add(key);
|
|
318
|
+
edges.push({ from: node.id, to: target.id, kind: supertype.relation, evidence: node.evidence });
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Decorators sit on the lines directly above a declaration; link the
|
|
322
|
+
// decorated symbol to the decorator it names.
|
|
323
|
+
for (const node of nodes) {
|
|
324
|
+
const fileLines = linesByFile.get(node.file);
|
|
325
|
+
for (const name of (0, decoratorsAbove_1.decoratorsAbove)(fileLines, node.evidence.startLine - 1)) {
|
|
326
|
+
const target = (0, resolveType_1.resolveType)(name, node, byName);
|
|
327
|
+
if (target === undefined)
|
|
328
|
+
continue;
|
|
329
|
+
edges.push({ from: node.id, to: target.id, kind: "decorates", evidence: node.evidence });
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
appendAll(edges, (0, overrideEdges_1.overrideEdges)(nodes, edges));
|
|
333
|
+
return {
|
|
334
|
+
nodes,
|
|
335
|
+
edges,
|
|
336
|
+
diagnostics,
|
|
337
|
+
warnings: [
|
|
338
|
+
...(nodes.length > referenceLimit
|
|
339
|
+
? [`${language}: reference collection capped at ${referenceLimit} symbols.`]
|
|
340
|
+
: []),
|
|
341
|
+
...(referencesUnavailable
|
|
342
|
+
? [`${language}: server did not answer references within the warmup budget; kept structural edges only.`]
|
|
343
|
+
: []),
|
|
344
|
+
],
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
finally {
|
|
348
|
+
await client.close();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// Classify a reference the same way the static indexer does, but with the
|
|
352
|
+
// language server's exact position: an identifier immediately followed by `(`
|
|
353
|
+
// is an invocation (a class becomes an instantiation, anything else a call);
|
|
354
|
+
// otherwise the target's kind decides between a type reference, a member
|
|
355
|
+
// access, and a generic reference.
|
|
356
|
+
function referenceKind(targetKind, refLine, endCol) {
|
|
357
|
+
const after = refLine === undefined ? "" : refLine.slice(endCol).trimStart();
|
|
358
|
+
if (after.startsWith("(")) {
|
|
359
|
+
return targetKind === "class" || targetKind === "constructor"
|
|
360
|
+
? "instantiates"
|
|
361
|
+
: "calls";
|
|
362
|
+
}
|
|
363
|
+
switch (targetKind) {
|
|
364
|
+
case "class":
|
|
365
|
+
case "interface":
|
|
366
|
+
case "type":
|
|
367
|
+
case "enum":
|
|
368
|
+
return "type_ref";
|
|
369
|
+
case "property":
|
|
370
|
+
case "field":
|
|
371
|
+
case "variable":
|
|
372
|
+
return "accesses";
|
|
373
|
+
default:
|
|
374
|
+
return "references";
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// Language servers such as rust-analyzer answer requests made during indexing
|
|
378
|
+
// with a `ContentModified` error; letting that reject would drop the whole
|
|
379
|
+
// language to the static fallback. Retry those fast rejections a few times,
|
|
380
|
+
// then treat this target as having no references rather than failing the
|
|
381
|
+
// language. A TIMEOUT is different: it already burned the full request timeout,
|
|
382
|
+
// so retrying triples the damage — report it so the caller can stop asking.
|
|
383
|
+
async function safeReferences(client, params, timeoutMs) {
|
|
384
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
385
|
+
try {
|
|
386
|
+
return await client.request("textDocument/references", params, timeoutMs);
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
if (error.message.startsWith("LSP request timed out"))
|
|
390
|
+
return "timeout";
|
|
391
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
// Array spread (`push(...items)`) passes every element as a call argument and
|
|
397
|
+
// blows the call stack on the item counts a real language server can produce —
|
|
398
|
+
// the Dart analysis server emitted enough diagnostics on the flutter tree to
|
|
399
|
+
// crash the whole build. Append by loop, which has no such limit.
|
|
400
|
+
function appendAll(target, items) {
|
|
401
|
+
for (const item of items)
|
|
402
|
+
target.push(item);
|
|
403
|
+
}
|
|
404
|
+
async function mapWithConcurrency(items, limit, worker) {
|
|
405
|
+
const results = new Array(items.length);
|
|
406
|
+
let cursor = 0;
|
|
407
|
+
const run = async () => {
|
|
408
|
+
for (;;) {
|
|
409
|
+
const index = cursor++;
|
|
410
|
+
if (index >= items.length)
|
|
411
|
+
return;
|
|
412
|
+
results[index] = await worker(items[index]);
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
const lanes = Math.max(1, Math.min(limit, items.length));
|
|
416
|
+
await Promise.all(Array.from({ length: lanes }, run));
|
|
417
|
+
return results;
|
|
418
|
+
}
|
|
419
|
+
async function waitForIndexing(lastProgressAt, quietMs, timeoutMs) {
|
|
420
|
+
const start = Date.now();
|
|
421
|
+
// Give a server that reports `$/progress` a brief window to begin before we
|
|
422
|
+
// conclude it never will; without this a fast documentSymbol phase could race
|
|
423
|
+
// ahead of the first indexing notification.
|
|
424
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(300, timeoutMs)));
|
|
425
|
+
// A server that never emits progress (lastProgressAt stays 0) is treated as
|
|
426
|
+
// ready immediately; one that does is awaited until it stays quiet for
|
|
427
|
+
// `quietMs` or the overall `timeoutMs` cap elapses.
|
|
428
|
+
while (lastProgressAt() !== 0 &&
|
|
429
|
+
Date.now() - lastProgressAt() < quietMs &&
|
|
430
|
+
Date.now() - start < timeoutMs) {
|
|
431
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
function convertSymbols(language, file, symbols) {
|
|
435
|
+
const out = [];
|
|
436
|
+
const visitDocument = (symbol, owners) => {
|
|
437
|
+
const kind = kindOf(symbol.kind);
|
|
438
|
+
if (kind !== undefined) {
|
|
439
|
+
const qualifiedName = [...owners, symbol.name].join(".");
|
|
440
|
+
out.push({
|
|
441
|
+
id: `${file}#${qualifiedName}:${kind}`,
|
|
442
|
+
kind,
|
|
443
|
+
language,
|
|
444
|
+
name: symbol.name,
|
|
445
|
+
...(owners.length > 0 ? { qualifiedName } : {}),
|
|
446
|
+
file,
|
|
447
|
+
external: false,
|
|
448
|
+
exported: true,
|
|
449
|
+
signature: symbol.detail,
|
|
450
|
+
evidence: {
|
|
451
|
+
file,
|
|
452
|
+
startLine: symbol.selectionRange.start.line + 1,
|
|
453
|
+
startCol: symbol.selectionRange.start.character + 1,
|
|
454
|
+
endLine: symbol.range.end.line + 1,
|
|
455
|
+
endCol: symbol.range.end.character + 1,
|
|
456
|
+
},
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
for (const child of symbol.children ?? []) {
|
|
460
|
+
visitDocument(child, kind === undefined ? owners : [...owners, symbol.name]);
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
for (const symbol of symbols ?? []) {
|
|
464
|
+
if ((0, types_1.isDocumentSymbol)(symbol))
|
|
465
|
+
visitDocument(symbol, []);
|
|
466
|
+
else
|
|
467
|
+
out.push(convertSymbolInformation(language, file, symbol));
|
|
468
|
+
}
|
|
469
|
+
return out;
|
|
470
|
+
}
|
|
471
|
+
function convertSymbolInformation(language, file, symbol) {
|
|
472
|
+
const kind = kindOf(symbol.kind) ?? "external_symbol";
|
|
473
|
+
const owners = symbol.containerName === undefined || symbol.containerName === ""
|
|
474
|
+
? []
|
|
475
|
+
: [symbol.containerName];
|
|
476
|
+
const qualifiedName = [...owners, symbol.name].join(".");
|
|
477
|
+
return {
|
|
478
|
+
id: `${file}#${qualifiedName}:${kind}`,
|
|
479
|
+
kind,
|
|
480
|
+
language,
|
|
481
|
+
name: symbol.name,
|
|
482
|
+
...(owners.length > 0 ? { qualifiedName } : {}),
|
|
483
|
+
file,
|
|
484
|
+
external: false,
|
|
485
|
+
exported: true,
|
|
486
|
+
evidence: {
|
|
487
|
+
file,
|
|
488
|
+
startLine: symbol.location.range.start.line + 1,
|
|
489
|
+
startCol: symbol.location.range.start.character + 1,
|
|
490
|
+
endLine: symbol.location.range.end.line + 1,
|
|
491
|
+
endCol: symbol.location.range.end.character + 1,
|
|
492
|
+
},
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
function kindOf(symbolKind) {
|
|
496
|
+
switch (symbolKind) {
|
|
497
|
+
case 2:
|
|
498
|
+
return "module";
|
|
499
|
+
case 3:
|
|
500
|
+
return "namespace";
|
|
501
|
+
case 5:
|
|
502
|
+
return "class";
|
|
503
|
+
case 6:
|
|
504
|
+
return "method";
|
|
505
|
+
case 7:
|
|
506
|
+
return "property";
|
|
507
|
+
case 8:
|
|
508
|
+
return "field";
|
|
509
|
+
case 9:
|
|
510
|
+
return "constructor";
|
|
511
|
+
case 10:
|
|
512
|
+
return "enum";
|
|
513
|
+
case 11:
|
|
514
|
+
return "interface";
|
|
515
|
+
case 12:
|
|
516
|
+
return "function";
|
|
517
|
+
case 13:
|
|
518
|
+
case 14:
|
|
519
|
+
return "variable";
|
|
520
|
+
case 23:
|
|
521
|
+
return "type";
|
|
522
|
+
default:
|
|
523
|
+
return undefined;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
function ownerAt(nodes, line) {
|
|
527
|
+
return nodes
|
|
528
|
+
.filter((node) => node.evidence !== undefined &&
|
|
529
|
+
node.evidence.startLine <= line &&
|
|
530
|
+
node.evidence.endLine >= line)
|
|
531
|
+
.sort((a, b) => {
|
|
532
|
+
const start = b.evidence.startLine - a.evidence.startLine;
|
|
533
|
+
if (start !== 0)
|
|
534
|
+
return start;
|
|
535
|
+
/* c8 ignore next */
|
|
536
|
+
return a.evidence.endLine - b.evidence.endLine;
|
|
537
|
+
})[0];
|
|
538
|
+
}
|
|
539
|
+
function convertDiagnostic(file, diagnostic) {
|
|
540
|
+
return {
|
|
541
|
+
file,
|
|
542
|
+
message: diagnostic.message,
|
|
543
|
+
severity: severityOf(diagnostic.severity),
|
|
544
|
+
...(diagnostic.source !== undefined ? { source: diagnostic.source } : {}),
|
|
545
|
+
...(diagnostic.code !== undefined ? { code: diagnostic.code } : {}),
|
|
546
|
+
evidence: {
|
|
547
|
+
file,
|
|
548
|
+
startLine: diagnostic.range.start.line + 1,
|
|
549
|
+
startCol: diagnostic.range.start.character + 1,
|
|
550
|
+
endLine: diagnostic.range.end.line + 1,
|
|
551
|
+
endCol: diagnostic.range.end.character + 1,
|
|
552
|
+
},
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
function severityOf(value) {
|
|
556
|
+
switch (value) {
|
|
557
|
+
case 1:
|
|
558
|
+
return "error";
|
|
559
|
+
case 2:
|
|
560
|
+
return "warning";
|
|
561
|
+
case 3:
|
|
562
|
+
return "information";
|
|
563
|
+
case 4:
|
|
564
|
+
return "hint";
|
|
565
|
+
default:
|
|
566
|
+
return "information";
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
function languageIdOf(language) {
|
|
570
|
+
if (language === "csharp")
|
|
571
|
+
return "csharp";
|
|
572
|
+
if (language === "cpp")
|
|
573
|
+
return "cpp";
|
|
574
|
+
return language;
|
|
575
|
+
}
|
|
576
|
+
// Resolve a server command to the concrete path PATH lookup would run, so the
|
|
577
|
+
// caller can see whether it is a .cmd/.bat shim that needs a cmd.exe wrapper.
|
|
578
|
+
function resolveCommand(command) {
|
|
579
|
+
if (node_path_1.default.isAbsolute(command) ||
|
|
580
|
+
command.includes("/") ||
|
|
581
|
+
command.includes("\\")) {
|
|
582
|
+
return node_fs_1.default.existsSync(command) ? command : undefined;
|
|
583
|
+
}
|
|
584
|
+
/* c8 ignore next 2 */
|
|
585
|
+
const lookup = process.platform === "win32" ? "where.exe" : "command";
|
|
586
|
+
const args = process.platform === "win32" ? [command] : ["-v", command];
|
|
587
|
+
const result = (0, node_child_process_1.spawnSync)(lookup, args, {
|
|
588
|
+
encoding: "utf8",
|
|
589
|
+
shell: process.platform !== "win32",
|
|
590
|
+
windowsHide: true,
|
|
591
|
+
});
|
|
592
|
+
if (result.status !== 0)
|
|
593
|
+
return undefined;
|
|
594
|
+
// `where` lists every shim: npm emits an extensionless sh script FIRST, then
|
|
595
|
+
// the .cmd Windows can actually run. Rank Windows-executable extensions ahead
|
|
596
|
+
// of the rest (branchlessly, so every platform exercises the same lines) and
|
|
597
|
+
// take the winner.
|
|
598
|
+
const lines = result.stdout
|
|
599
|
+
.split(/\r?\n/)
|
|
600
|
+
.map((line) => line.trim())
|
|
601
|
+
.filter((line) => line !== "");
|
|
602
|
+
const executable = lines.filter((line) => /\.(exe|cmd|bat)$/i.test(line));
|
|
603
|
+
return [...executable, ...lines][0];
|
|
604
|
+
}
|
|
605
|
+
function dedupeNodes(nodes) {
|
|
606
|
+
const map = new Map();
|
|
607
|
+
for (const node of nodes)
|
|
608
|
+
map.set(node.id, node);
|
|
609
|
+
return [...map.values()];
|
|
610
|
+
}
|
|
611
|
+
function dedupeEdges(edges) {
|
|
612
|
+
const map = new Map();
|
|
613
|
+
for (const edge of edges)
|
|
614
|
+
map.set(`${edge.kind}\0${edge.from}\0${edge.to}`, edge);
|
|
615
|
+
return [...map.values()];
|
|
616
|
+
}
|
|
617
|
+
//# sourceMappingURL=buildLspGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildLspGraph.js","sourceRoot":"","sources":["../../src/indexer/buildLspGraph.ts"],"names":[],"mappings":"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"}
|