@birdcc/lsp 0.0.1-alpha.1 → 0.1.0-beta.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 +25 -23
- package/dist/asn-completion.d.ts +21 -0
- package/dist/asn-completion.d.ts.map +1 -0
- package/dist/asn-completion.js +42 -0
- package/dist/asn-completion.js.map +1 -0
- package/dist/asn-context.d.ts +9 -0
- package/dist/asn-context.d.ts.map +1 -0
- package/dist/asn-context.js +203 -0
- package/dist/asn-context.js.map +1 -0
- package/dist/asn-hover.d.ts +11 -0
- package/dist/asn-hover.d.ts.map +1 -0
- package/dist/asn-hover.js +33 -0
- package/dist/asn-hover.js.map +1 -0
- package/dist/asn-inlay-hints.d.ts +13 -0
- package/dist/asn-inlay-hints.d.ts.map +1 -0
- package/dist/asn-inlay-hints.js +47 -0
- package/dist/asn-inlay-hints.js.map +1 -0
- package/dist/diagnostic.d.ts.map +1 -1
- package/dist/diagnostic.js +2 -10
- package/dist/diagnostic.js.map +1 -1
- package/dist/document-symbol.js +1 -1
- package/dist/document-symbol.js.map +1 -1
- package/dist/hover-context.d.ts +31 -0
- package/dist/hover-context.d.ts.map +1 -0
- package/dist/hover-context.js +125 -0
- package/dist/hover-context.js.map +1 -0
- package/dist/hover-docs/00-base.yaml +5 -0
- package/dist/hover-docs/10-global-options.yaml +442 -0
- package/dist/hover-docs/20-filter-language.yaml +209 -0
- package/dist/hover-docs/30-channel-options.yaml +244 -0
- package/dist/hover-docs/40-protocol-common.yaml +59 -0
- package/dist/hover-docs/41-protocol-igp.yaml +305 -0
- package/dist/hover-docs/42-protocol-kernel-static.yaml +220 -0
- package/dist/hover-docs/43-protocol-mpls.yaml +40 -0
- package/dist/hover-docs/44-protocol-extended.yaml +635 -0
- package/dist/hover-docs/50-protocol-bgp.yaml +482 -0
- package/dist/hover-docs/60-protocol-ospf.yaml +527 -0
- package/dist/hover-docs.d.ts +5 -1
- package/dist/hover-docs.d.ts.map +1 -1
- package/dist/hover-docs.js +376 -51
- package/dist/hover-docs.js.map +1 -1
- package/dist/hover-usage/00-base.yaml +2 -0
- package/dist/hover-usage/10-global-usage.yaml +73 -0
- package/dist/hover-usage/20-filter-usage.yaml +41 -0
- package/dist/hover-usage/30-channel-usage.yaml +41 -0
- package/dist/hover-usage/40-protocol-usage.yaml +258 -0
- package/dist/hover-usage/50-bgp-usage.yaml +254 -0
- package/dist/hover-usage/60-ospf-usage.yaml +340 -0
- package/dist/hover.d.ts +10 -0
- package/dist/hover.d.ts.map +1 -1
- package/dist/hover.js +152 -46
- package/dist/hover.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/init/workspace-init.d.ts +28 -0
- package/dist/init/workspace-init.d.ts.map +1 -0
- package/dist/init/workspace-init.js +72 -0
- package/dist/init/workspace-init.js.map +1 -0
- package/dist/lsp-server.d.ts +7 -1
- package/dist/lsp-server.d.ts.map +1 -1
- package/dist/lsp-server.js +277 -65
- package/dist/lsp-server.js.map +1 -1
- package/dist/project-config.d.ts +22 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +307 -0
- package/dist/project-config.js.map +1 -0
- package/dist/shared.d.ts +1 -0
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +4 -24
- package/dist/shared.js.map +1 -1
- package/dist/symbol-utils.d.ts +6 -6
- package/dist/symbol-utils.d.ts.map +1 -1
- package/dist/symbol-utils.js +24 -25
- package/dist/symbol-utils.js.map +1 -1
- package/dist/type-hint-inlay.d.ts +4 -0
- package/dist/type-hint-inlay.d.ts.map +1 -0
- package/dist/type-hint-inlay.js +27 -0
- package/dist/type-hint-inlay.js.map +1 -0
- package/dist/utils.d.ts +65 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +97 -0
- package/dist/utils.js.map +1 -0
- package/package.json +11 -7
- package/dist/hover-docs.yaml +0 -600
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP workspace initialization — uses sniffProjectEntrypoints() to auto-detect
|
|
3
|
+
* project entry points when no bird.config.json is present.
|
|
4
|
+
*
|
|
5
|
+
* The LSP server calls this during initialization to provide a smooth
|
|
6
|
+
* zero-config experience. Detection results can trigger:
|
|
7
|
+
* - Auto-selection of entry point (high confidence)
|
|
8
|
+
* - Information message with suggestion (medium confidence)
|
|
9
|
+
* - Warning message requesting user action (low confidence / ambiguous)
|
|
10
|
+
*/
|
|
11
|
+
import { type DetectionResult } from "@birdcc/core";
|
|
12
|
+
import type { Connection } from "vscode-languageserver/node.js";
|
|
13
|
+
export interface WorkspaceInitResult {
|
|
14
|
+
detectionResult: DetectionResult;
|
|
15
|
+
/** Suggested entry URI (file:// scheme) if detection was confident enough */
|
|
16
|
+
suggestedEntryUri: string | null;
|
|
17
|
+
/** Whether the user should be prompted for confirmation */
|
|
18
|
+
needsConfirmation: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Run project entry-point detection for a workspace root.
|
|
22
|
+
*
|
|
23
|
+
* @param workspaceRootUri - file:// URI of the workspace root
|
|
24
|
+
* @param connection - LSP connection for sending notifications
|
|
25
|
+
* @returns Detection result with suggested entry URI
|
|
26
|
+
*/
|
|
27
|
+
export declare const detectWorkspaceEntry: (workspaceRootUri: string, connection: Connection) => Promise<WorkspaceInitResult>;
|
|
28
|
+
//# sourceMappingURL=workspace-init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-init.d.ts","sourceRoot":"","sources":["../../src/init/workspace-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,eAAe,CAAC;IACjC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,kBAAkB,MAAM,EACxB,YAAY,UAAU,KACrB,OAAO,CAAC,mBAAmB,CA8E7B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP workspace initialization — uses sniffProjectEntrypoints() to auto-detect
|
|
3
|
+
* project entry points when no bird.config.json is present.
|
|
4
|
+
*
|
|
5
|
+
* The LSP server calls this during initialization to provide a smooth
|
|
6
|
+
* zero-config experience. Detection results can trigger:
|
|
7
|
+
* - Auto-selection of entry point (high confidence)
|
|
8
|
+
* - Information message with suggestion (medium confidence)
|
|
9
|
+
* - Warning message requesting user action (low confidence / ambiguous)
|
|
10
|
+
*/
|
|
11
|
+
import { resolve } from "node:path";
|
|
12
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
13
|
+
import { sniffProjectEntrypoints } from "@birdcc/core";
|
|
14
|
+
import { showInfo, showWarning } from "../utils.js";
|
|
15
|
+
/**
|
|
16
|
+
* Run project entry-point detection for a workspace root.
|
|
17
|
+
*
|
|
18
|
+
* @param workspaceRootUri - file:// URI of the workspace root
|
|
19
|
+
* @param connection - LSP connection for sending notifications
|
|
20
|
+
* @returns Detection result with suggested entry URI
|
|
21
|
+
*/
|
|
22
|
+
export const detectWorkspaceEntry = async (workspaceRootUri, connection) => {
|
|
23
|
+
const rootPath = fileURLToPath(workspaceRootUri);
|
|
24
|
+
const toSuggestedEntryUri = (relativePath) => pathToFileURL(resolve(rootPath, relativePath)).toString();
|
|
25
|
+
const result = await sniffProjectEntrypoints(rootPath, {
|
|
26
|
+
maxDepth: 8,
|
|
27
|
+
maxFiles: 20_000,
|
|
28
|
+
});
|
|
29
|
+
// Log detection result
|
|
30
|
+
connection.console.log(`[init] Project detection: kind=${result.kind}, confidence=${result.confidence}%, candidates=${result.candidates.length}`);
|
|
31
|
+
for (const warning of result.warnings) {
|
|
32
|
+
connection.console.log(`[init] Warning: [${warning.code}] ${warning.message}`);
|
|
33
|
+
}
|
|
34
|
+
// Determine suggested entry and whether confirmation is needed
|
|
35
|
+
let suggestedEntryUri = null;
|
|
36
|
+
let needsConfirmation = false;
|
|
37
|
+
switch (result.kind) {
|
|
38
|
+
case "single": {
|
|
39
|
+
if (result.primary) {
|
|
40
|
+
suggestedEntryUri = toSuggestedEntryUri(result.primary.path);
|
|
41
|
+
connection.console.log(`[init] Auto-detected entry: ${result.primary.path} (confidence: ${result.confidence}%)`);
|
|
42
|
+
showInfo(connection, `Auto-detected BIRD entry: ${result.primary.path} (${result.confidence}% confidence).`);
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case "single-ambiguous": {
|
|
47
|
+
if (result.primary) {
|
|
48
|
+
suggestedEntryUri = toSuggestedEntryUri(result.primary.path);
|
|
49
|
+
needsConfirmation = true;
|
|
50
|
+
showWarning(connection, `BIRD project entry detected with low confidence: ${result.primary.path}. Consider creating bird.config.json with \`birdcc init\`.`);
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
case "monorepo-multi-entry": {
|
|
55
|
+
showInfo(connection, `Multiple BIRD project entries detected. Run \`birdcc init --write\` to generate workspace configuration.`);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "monorepo-multi-role": {
|
|
59
|
+
if (result.primary) {
|
|
60
|
+
suggestedEntryUri = toSuggestedEntryUri(result.primary.path);
|
|
61
|
+
showInfo(connection, `BIRD project with multiple roles detected. Entry: ${result.primary.path}. Run \`birdcc init --write\` for full configuration.`);
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case "not-found": {
|
|
66
|
+
// No message for not-found — the project may not be a BIRD project
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { detectionResult: result, suggestedEntryUri, needsConfirmation };
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=workspace-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-init.js","sourceRoot":"","sources":["../../src/init/workspace-init.ts"],"names":[],"mappings":"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"}
|
package/dist/lsp-server.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export interface LspServerOptions {
|
|
2
|
+
/** Override the path to the ASN database binary. Undefined = use bundled default. */
|
|
3
|
+
asnDbPath?: string;
|
|
4
|
+
/** Disable ASN intelligence entirely. */
|
|
5
|
+
disableAsnIntel?: boolean;
|
|
6
|
+
}
|
|
1
7
|
/** Starts the stdio LSP server with async lint validation and last-write-wins scheduling. */
|
|
2
|
-
export declare const startLspServer: () => void;
|
|
8
|
+
export declare const startLspServer: (options?: LspServerOptions) => void;
|
|
3
9
|
//# sourceMappingURL=lsp-server.d.ts.map
|
package/dist/lsp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-server.d.ts","sourceRoot":"","sources":["../src/lsp-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lsp-server.d.ts","sourceRoot":"","sources":["../src/lsp-server.ts"],"names":[],"mappings":"AAoGA,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,6FAA6F;AAC7F,eAAO,MAAM,cAAc,GAAI,UAAU,gBAAgB,KAAG,IA0hB3D,CAAC"}
|
package/dist/lsp-server.js
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { DEFAULT_CROSS_FILE_MAX_DEPTH, DEFAULT_CROSS_FILE_MAX_FILES, collectFunctionReturnHints, resolveCrossFileReferences, } from "@birdcc/core";
|
|
2
5
|
import { createConnection, ProposedFeatures, TextDocuments, TextDocumentSyncKind, } from "vscode-languageserver/node.js";
|
|
3
6
|
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
4
7
|
import { parseBirdConfig } from "@birdcc/parser";
|
|
5
8
|
import { lintBirdConfig, lintResolvedCrossFileGraph, } from "@birdcc/linter";
|
|
9
|
+
import { formatBirdConfig } from "@birdcc/formatter";
|
|
10
|
+
import { createAsnIntel } from "@birdcc/intel";
|
|
6
11
|
import { createCompletionItemsFromParsed } from "./completion.js";
|
|
7
12
|
import { createDefinitionLocations } from "./definition.js";
|
|
8
13
|
import { createDocumentSymbolsFromParsed } from "./document-symbol.js";
|
|
9
14
|
import { toInternalErrorDiagnostic, toLspDiagnostic } from "./diagnostic.js";
|
|
10
15
|
import { createHoverFromParsed } from "./hover.js";
|
|
16
|
+
import { createAsnCompletionItems } from "./asn-completion.js";
|
|
17
|
+
import { createAsnInlayHints } from "./asn-inlay-hints.js";
|
|
18
|
+
import { createTypeHintInlayHints } from "./type-hint-inlay.js";
|
|
19
|
+
import { createAsnHover } from "./asn-hover.js";
|
|
20
|
+
import { detectWorkspaceEntry } from "./init/workspace-init.js";
|
|
21
|
+
import { resolveProjectAnalysisOptions } from "./project-config.js";
|
|
11
22
|
import { createReferenceLocations } from "./references.js";
|
|
23
|
+
import { clearDiagnostics, clearDiagnosticsMany, getLineText, publishDiagnostics, showInfoOnce, withDocument, } from "./utils.js";
|
|
12
24
|
import { createValidationScheduler } from "./validation.js";
|
|
13
25
|
const VALIDATION_DEBOUNCE_MS = 120;
|
|
14
26
|
const INCLUDE_MAX_DEPTH = DEFAULT_CROSS_FILE_MAX_DEPTH;
|
|
15
27
|
const INCLUDE_MAX_FILES = DEFAULT_CROSS_FILE_MAX_FILES;
|
|
28
|
+
const TYPE_HINT_MAX_FILE_SIZE_BYTES = 2 * 1024 * 1024;
|
|
29
|
+
const PROJECT_CONFIG_FILE_NAMES = ["bird.config.json", "birdcc.config.json"];
|
|
16
30
|
const warmupParserRuntime = async () => {
|
|
17
31
|
try {
|
|
18
32
|
await lintBirdConfig("");
|
|
@@ -32,20 +46,70 @@ const flattenAdditionalDeclarations = (graph, uri) => {
|
|
|
32
46
|
return declarations;
|
|
33
47
|
};
|
|
34
48
|
/** Starts the stdio LSP server with async lint validation and last-write-wins scheduling. */
|
|
35
|
-
export const startLspServer = () => {
|
|
49
|
+
export const startLspServer = (options) => {
|
|
36
50
|
const connection = createConnection(ProposedFeatures.all);
|
|
37
51
|
const documents = new TextDocuments(TextDocument);
|
|
38
52
|
const parsedByUri = new Map();
|
|
39
53
|
const graphByUri = new Map();
|
|
54
|
+
const typeHintsByUri = new Map();
|
|
40
55
|
const publishedUrisByEntry = new Map();
|
|
56
|
+
/** Dedup in-flight `getGraphForDocument` calls so concurrent requests share one analysis. */
|
|
57
|
+
const pendingGraphByUri = new Map();
|
|
58
|
+
const announcedProjectConfigs = new Set();
|
|
59
|
+
const announcedInfoNotifications = new Set();
|
|
60
|
+
let workspaceRootUris = [];
|
|
61
|
+
let noConfigTipAnnounced = false;
|
|
41
62
|
let hasShutdownBeenRequested = false;
|
|
63
|
+
const typeHintMaxBytes = TYPE_HINT_MAX_FILE_SIZE_BYTES;
|
|
64
|
+
// ASN intelligence — loads the bundled database (gracefully degrades if missing)
|
|
65
|
+
const asnIntel = options?.disableAsnIntel
|
|
66
|
+
? {
|
|
67
|
+
available: false,
|
|
68
|
+
count: 0,
|
|
69
|
+
exactLookup: () => undefined,
|
|
70
|
+
prefixSearch: () => [],
|
|
71
|
+
formatDisplay: () => ({
|
|
72
|
+
inlayLabel: "",
|
|
73
|
+
completionDetail: "",
|
|
74
|
+
hoverMarkdown: "",
|
|
75
|
+
}),
|
|
76
|
+
lookupDisplay: () => undefined,
|
|
77
|
+
}
|
|
78
|
+
: createAsnIntel(options?.asnDbPath);
|
|
79
|
+
if (asnIntel.available) {
|
|
80
|
+
connection.console.log(`[intel] ASN database loaded: ${asnIntel.count} records`);
|
|
81
|
+
}
|
|
42
82
|
void warmupParserRuntime();
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
for (const
|
|
47
|
-
|
|
83
|
+
const hasProjectConfigAtWorkspaceRoot = async (workspaceRootUri) => {
|
|
84
|
+
try {
|
|
85
|
+
const workspaceRootPath = fileURLToPath(workspaceRootUri);
|
|
86
|
+
for (const fileName of PROJECT_CONFIG_FILE_NAMES) {
|
|
87
|
+
// eslint-disable-next-line no-await-in-loop
|
|
88
|
+
try {
|
|
89
|
+
await access(join(workspaceRootPath, fileName));
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const ioError = error;
|
|
94
|
+
if (ioError.code === "ENOENT") {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
48
99
|
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const notifyInfoOnce = (key, message) => {
|
|
107
|
+
showInfoOnce(connection, announcedInfoNotifications, key, message);
|
|
108
|
+
};
|
|
109
|
+
const clearEntryTracking = (entryUri) => {
|
|
110
|
+
const previousUris = publishedUrisByEntry.get(entryUri);
|
|
111
|
+
if (previousUris) {
|
|
112
|
+
clearDiagnosticsMany(connection, previousUris);
|
|
49
113
|
publishedUrisByEntry.delete(entryUri);
|
|
50
114
|
}
|
|
51
115
|
for (const [uri, graph] of graphByUri.entries()) {
|
|
@@ -55,19 +119,71 @@ export const startLspServer = () => {
|
|
|
55
119
|
}
|
|
56
120
|
};
|
|
57
121
|
const analyzeDocument = async (document, options) => {
|
|
122
|
+
const project = await resolveProjectAnalysisOptions({
|
|
123
|
+
documentUri: document.uri,
|
|
124
|
+
workspaceRootUris,
|
|
125
|
+
defaults: {
|
|
126
|
+
maxDepth: INCLUDE_MAX_DEPTH,
|
|
127
|
+
maxFiles: INCLUDE_MAX_FILES,
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
if (project.configPath &&
|
|
131
|
+
!announcedProjectConfigs.has(project.configPath)) {
|
|
132
|
+
announcedProjectConfigs.add(project.configPath);
|
|
133
|
+
connection.console.log(`[project] using ${project.configPath} (mode=${project.mode}, entry=${project.entryUri})`);
|
|
134
|
+
notifyInfoOnce(`project-config:${project.configPath}`, `Using ${basename(project.configPath)} (${project.mode} mode) for cross-file analysis.`);
|
|
135
|
+
}
|
|
136
|
+
else if (!project.configPath &&
|
|
137
|
+
workspaceRootUris.length > 1 &&
|
|
138
|
+
!noConfigTipAnnounced) {
|
|
139
|
+
noConfigTipAnnounced = true;
|
|
140
|
+
connection.console.log("[project] no bird.config.json detected; add one with workspaces/main/includePaths for monorepo-grade analysis");
|
|
141
|
+
notifyInfoOnce("project-config:missing-monorepo", "No bird.config.json found in this multi-root workspace. Add workspaces/main/includePaths for better analysis.");
|
|
142
|
+
}
|
|
143
|
+
if (!project.crossFileEnabled) {
|
|
144
|
+
const lintResult = await lintBirdConfig(document.getText(), {
|
|
145
|
+
uri: document.uri,
|
|
146
|
+
});
|
|
147
|
+
const graph = {
|
|
148
|
+
entryUri: document.uri,
|
|
149
|
+
visitedUris: new Set([document.uri]),
|
|
150
|
+
symbolTable: lintResult.core.symbolTable,
|
|
151
|
+
byUri: { [document.uri]: lintResult },
|
|
152
|
+
};
|
|
153
|
+
parsedByUri.set(document.uri, {
|
|
154
|
+
version: document.version,
|
|
155
|
+
parsed: lintResult.parsed,
|
|
156
|
+
});
|
|
157
|
+
graphByUri.set(document.uri, graph);
|
|
158
|
+
return {
|
|
159
|
+
entryDiagnostics: lintResult.diagnostics.map(toLspDiagnostic),
|
|
160
|
+
graph,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
58
163
|
const openDocuments = documents.all().map((item) => ({
|
|
59
164
|
uri: item.uri,
|
|
60
165
|
text: item.getText(),
|
|
61
166
|
}));
|
|
62
167
|
const crossFile = await resolveCrossFileReferences({
|
|
63
|
-
entryUri:
|
|
168
|
+
entryUri: project.entryUri,
|
|
64
169
|
documents: openDocuments,
|
|
65
170
|
loadFromFileSystem: true,
|
|
66
|
-
maxDepth:
|
|
67
|
-
maxFiles:
|
|
171
|
+
maxDepth: project.maxDepth,
|
|
172
|
+
maxFiles: project.maxFiles,
|
|
173
|
+
workspaceRootUri: project.workspaceRootUri,
|
|
174
|
+
allowIncludeOutsideWorkspace: project.allowIncludeOutsideWorkspace,
|
|
175
|
+
includeSearchPaths: project.includeSearchPathUris,
|
|
68
176
|
});
|
|
69
177
|
const lintGraph = await lintResolvedCrossFileGraph(crossFile);
|
|
70
|
-
|
|
178
|
+
if (!Object.hasOwn(lintGraph.byUri, document.uri)) {
|
|
179
|
+
lintGraph.byUri[document.uri] = await lintBirdConfig(document.getText(), {
|
|
180
|
+
uri: document.uri,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const visitedUris = new Set(crossFile.visitedUris.length > 0
|
|
184
|
+
? crossFile.visitedUris
|
|
185
|
+
: [project.entryUri]);
|
|
186
|
+
visitedUris.add(document.uri);
|
|
71
187
|
const graph = {
|
|
72
188
|
entryUri: document.uri,
|
|
73
189
|
visitedUris,
|
|
@@ -91,20 +207,14 @@ export const startLspServer = () => {
|
|
|
91
207
|
if (options.publishRelatedDiagnostics) {
|
|
92
208
|
const previousUris = publishedUrisByEntry.get(document.uri) ?? new Set();
|
|
93
209
|
for (const uri of previousUris) {
|
|
94
|
-
if (visitedUris.has(uri)) {
|
|
95
|
-
|
|
210
|
+
if (!visitedUris.has(uri)) {
|
|
211
|
+
clearDiagnostics(connection, uri);
|
|
96
212
|
}
|
|
97
|
-
connection.sendDiagnostics({ uri, diagnostics: [] });
|
|
98
213
|
}
|
|
99
214
|
for (const [uri, diagnostics] of diagnosticsByUri) {
|
|
100
|
-
if (uri
|
|
101
|
-
|
|
215
|
+
if (uri !== document.uri) {
|
|
216
|
+
publishDiagnostics(connection, uri, diagnostics, documents.get(uri)?.version);
|
|
102
217
|
}
|
|
103
|
-
connection.sendDiagnostics({
|
|
104
|
-
uri,
|
|
105
|
-
version: documents.get(uri)?.version,
|
|
106
|
-
diagnostics,
|
|
107
|
-
});
|
|
108
218
|
}
|
|
109
219
|
publishedUrisByEntry.set(document.uri, visitedUris);
|
|
110
220
|
}
|
|
@@ -115,24 +225,69 @@ export const startLspServer = () => {
|
|
|
115
225
|
if (cached) {
|
|
116
226
|
return cached;
|
|
117
227
|
}
|
|
118
|
-
|
|
228
|
+
// Dedup concurrent requests: reuse in-flight promise for the same URI.
|
|
229
|
+
const pending = pendingGraphByUri.get(document.uri);
|
|
230
|
+
if (pending) {
|
|
231
|
+
return pending;
|
|
232
|
+
}
|
|
233
|
+
const promise = analyzeDocument(document, {
|
|
119
234
|
publishRelatedDiagnostics: false,
|
|
120
|
-
});
|
|
121
|
-
|
|
235
|
+
}).then((analyzed) => analyzed.graph);
|
|
236
|
+
pendingGraphByUri.set(document.uri, promise);
|
|
237
|
+
try {
|
|
238
|
+
return await promise;
|
|
239
|
+
}
|
|
240
|
+
finally {
|
|
241
|
+
pendingGraphByUri.delete(document.uri);
|
|
242
|
+
}
|
|
122
243
|
};
|
|
123
|
-
connection.onInitialize(() =>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
244
|
+
connection.onInitialize((params) => {
|
|
245
|
+
workspaceRootUris =
|
|
246
|
+
params.workspaceFolders
|
|
247
|
+
?.map((folder) => folder.uri)
|
|
248
|
+
.filter((uri) => uri.startsWith("file://")) ?? [];
|
|
249
|
+
if (workspaceRootUris.length === 0 &&
|
|
250
|
+
params.rootUri &&
|
|
251
|
+
params.rootUri.startsWith("file://")) {
|
|
252
|
+
workspaceRootUris = [params.rootUri];
|
|
253
|
+
}
|
|
254
|
+
return {
|
|
255
|
+
capabilities: {
|
|
256
|
+
textDocumentSync: TextDocumentSyncKind.Incremental,
|
|
257
|
+
documentSymbolProvider: true,
|
|
258
|
+
hoverProvider: true,
|
|
259
|
+
definitionProvider: true,
|
|
260
|
+
referencesProvider: true,
|
|
261
|
+
documentFormattingProvider: true,
|
|
262
|
+
completionProvider: {
|
|
263
|
+
resolveProvider: false,
|
|
264
|
+
triggerCharacters: [" ", "."],
|
|
265
|
+
},
|
|
266
|
+
inlayHintProvider: true,
|
|
133
267
|
},
|
|
134
|
-
}
|
|
135
|
-
})
|
|
268
|
+
};
|
|
269
|
+
});
|
|
270
|
+
connection.onInitialized(() => {
|
|
271
|
+
void (async () => {
|
|
272
|
+
for (const workspaceRootUri of workspaceRootUris) {
|
|
273
|
+
if (hasShutdownBeenRequested) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// eslint-disable-next-line no-await-in-loop
|
|
277
|
+
const hasProjectConfig = await hasProjectConfigAtWorkspaceRoot(workspaceRootUri);
|
|
278
|
+
if (hasProjectConfig) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
// eslint-disable-next-line no-await-in-loop
|
|
283
|
+
await detectWorkspaceEntry(workspaceRootUri, connection);
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
connection.console.log(`[init] workspace entry detection failed for ${workspaceRootUri}: ${error instanceof Error ? error.message : String(error)}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
})();
|
|
290
|
+
});
|
|
136
291
|
const scheduler = createValidationScheduler({
|
|
137
292
|
debounceMs: VALIDATION_DEBOUNCE_MS,
|
|
138
293
|
validate: async (textDocument) => {
|
|
@@ -146,8 +301,8 @@ export const startLspServer = () => {
|
|
|
146
301
|
return [toInternalErrorDiagnostic(error)];
|
|
147
302
|
}
|
|
148
303
|
},
|
|
149
|
-
publish: (
|
|
150
|
-
connection
|
|
304
|
+
publish: ({ uri, version, diagnostics }) => {
|
|
305
|
+
publishDiagnostics(connection, uri, diagnostics, version);
|
|
151
306
|
},
|
|
152
307
|
});
|
|
153
308
|
documents.onDidOpen((event) => {
|
|
@@ -159,6 +314,7 @@ export const startLspServer = () => {
|
|
|
159
314
|
documents.onDidClose((event) => {
|
|
160
315
|
parsedByUri.delete(event.document.uri);
|
|
161
316
|
clearEntryTracking(event.document.uri);
|
|
317
|
+
typeHintsByUri.delete(event.document.uri);
|
|
162
318
|
scheduler.close(event.document.uri);
|
|
163
319
|
});
|
|
164
320
|
const getParsedDocument = async (document) => {
|
|
@@ -173,27 +329,42 @@ export const startLspServer = () => {
|
|
|
173
329
|
});
|
|
174
330
|
return parsed;
|
|
175
331
|
};
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
if (
|
|
332
|
+
const getTypeHintsForDocument = async (document) => {
|
|
333
|
+
const cached = typeHintsByUri.get(document.uri);
|
|
334
|
+
if (cached && cached.version === document.version) {
|
|
335
|
+
return cached.hints;
|
|
336
|
+
}
|
|
337
|
+
const text = document.getText();
|
|
338
|
+
if (Buffer.byteLength(text, "utf8") > typeHintMaxBytes) {
|
|
339
|
+
typeHintsByUri.set(document.uri, {
|
|
340
|
+
version: document.version,
|
|
341
|
+
hints: [],
|
|
342
|
+
});
|
|
179
343
|
return [];
|
|
180
344
|
}
|
|
345
|
+
const hints = await collectFunctionReturnHints(text);
|
|
346
|
+
typeHintsByUri.set(document.uri, {
|
|
347
|
+
version: document.version,
|
|
348
|
+
hints,
|
|
349
|
+
});
|
|
350
|
+
return hints;
|
|
351
|
+
};
|
|
352
|
+
connection.onDocumentSymbol(async (params) => withDocument(documents, params.textDocument.uri, [], async (document) => {
|
|
181
353
|
const parsed = await getParsedDocument(document);
|
|
182
354
|
return createDocumentSymbolsFromParsed(parsed);
|
|
183
|
-
});
|
|
184
|
-
connection.onHover(async (params) => {
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
|
|
355
|
+
}));
|
|
356
|
+
connection.onHover(async (params) => withDocument(documents, params.textDocument.uri, null, async (document) => {
|
|
357
|
+
// Try ASN hover first (more specific)
|
|
358
|
+
if (asnIntel.available) {
|
|
359
|
+
const lineText = getLineText(document, params.position.line);
|
|
360
|
+
const asnHover = createAsnHover(asnIntel, lineText, params.position);
|
|
361
|
+
if (asnHover)
|
|
362
|
+
return asnHover;
|
|
188
363
|
}
|
|
189
364
|
const parsed = await getParsedDocument(document);
|
|
190
365
|
return createHoverFromParsed(parsed, document, params.position);
|
|
191
|
-
});
|
|
192
|
-
connection.onDefinition(async (params) => {
|
|
193
|
-
const document = documents.get(params.textDocument.uri);
|
|
194
|
-
if (!document) {
|
|
195
|
-
return [];
|
|
196
|
-
}
|
|
366
|
+
}));
|
|
367
|
+
connection.onDefinition(async (params) => withDocument(documents, params.textDocument.uri, [], async (document) => {
|
|
197
368
|
try {
|
|
198
369
|
const graph = await getGraphForDocument(document);
|
|
199
370
|
return createDefinitionLocations(graph.symbolTable, document.uri, params.position, document.getText());
|
|
@@ -201,12 +372,8 @@ export const startLspServer = () => {
|
|
|
201
372
|
catch {
|
|
202
373
|
return [];
|
|
203
374
|
}
|
|
204
|
-
});
|
|
205
|
-
connection.onReferences(async (params) => {
|
|
206
|
-
const document = documents.get(params.textDocument.uri);
|
|
207
|
-
if (!document) {
|
|
208
|
-
return [];
|
|
209
|
-
}
|
|
375
|
+
}));
|
|
376
|
+
connection.onReferences(async (params) => withDocument(documents, params.textDocument.uri, [], async (document) => {
|
|
210
377
|
try {
|
|
211
378
|
const graph = await getGraphForDocument(document);
|
|
212
379
|
return createReferenceLocations(graph.symbolTable, document.uri, params.position, document.getText());
|
|
@@ -214,17 +381,19 @@ export const startLspServer = () => {
|
|
|
214
381
|
catch {
|
|
215
382
|
return [];
|
|
216
383
|
}
|
|
217
|
-
});
|
|
218
|
-
connection.onCompletion(async (params) => {
|
|
219
|
-
const document = documents.get(params.textDocument.uri);
|
|
220
|
-
if (!document) {
|
|
221
|
-
return [];
|
|
222
|
-
}
|
|
384
|
+
}));
|
|
385
|
+
connection.onCompletion(async (params) => withDocument(documents, params.textDocument.uri, [], async (document) => {
|
|
223
386
|
const parsed = await getParsedDocument(document);
|
|
224
387
|
const linePrefix = document.getText({
|
|
225
388
|
start: { line: params.position.line, character: 0 },
|
|
226
389
|
end: params.position,
|
|
227
390
|
});
|
|
391
|
+
// Check if we're in an ASN context — return ASN completions instead
|
|
392
|
+
if (asnIntel.available) {
|
|
393
|
+
const asnItems = createAsnCompletionItems(asnIntel, linePrefix);
|
|
394
|
+
if (asnItems.length > 0)
|
|
395
|
+
return asnItems;
|
|
396
|
+
}
|
|
228
397
|
try {
|
|
229
398
|
const graph = await getGraphForDocument(document);
|
|
230
399
|
return createCompletionItemsFromParsed(parsed, {
|
|
@@ -235,7 +404,50 @@ export const startLspServer = () => {
|
|
|
235
404
|
catch {
|
|
236
405
|
return createCompletionItemsFromParsed(parsed, { linePrefix });
|
|
237
406
|
}
|
|
238
|
-
});
|
|
407
|
+
}));
|
|
408
|
+
connection.onDocumentFormatting(async (params) => withDocument(documents, params.textDocument.uri, [], async (document) => {
|
|
409
|
+
try {
|
|
410
|
+
const text = document.getText();
|
|
411
|
+
const result = await formatBirdConfig(text);
|
|
412
|
+
if (!result.changed) {
|
|
413
|
+
return [];
|
|
414
|
+
}
|
|
415
|
+
const lines = text.split("\n");
|
|
416
|
+
const lastLine = lines.length - 1;
|
|
417
|
+
const lastChar = lines[lastLine]?.length ?? 0;
|
|
418
|
+
return [
|
|
419
|
+
{
|
|
420
|
+
range: {
|
|
421
|
+
start: { line: 0, character: 0 },
|
|
422
|
+
end: { line: lastLine, character: lastChar },
|
|
423
|
+
},
|
|
424
|
+
newText: result.text,
|
|
425
|
+
},
|
|
426
|
+
];
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
connection.console.log(`[format] formatting failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
430
|
+
return [];
|
|
431
|
+
}
|
|
432
|
+
}));
|
|
433
|
+
// Inlay Hints (ASN + function return type)
|
|
434
|
+
connection.languages.inlayHint.on(async (params) => withDocument(documents, params.textDocument.uri, [], async (document) => {
|
|
435
|
+
const text = document.getText();
|
|
436
|
+
const results = [];
|
|
437
|
+
// ASN inlay hints
|
|
438
|
+
if (asnIntel.available) {
|
|
439
|
+
results.push(...createAsnInlayHints(asnIntel, text, params.range));
|
|
440
|
+
}
|
|
441
|
+
// Function return type inlay hints
|
|
442
|
+
try {
|
|
443
|
+
const hints = await getTypeHintsForDocument(document);
|
|
444
|
+
results.push(...createTypeHintInlayHints(hints, params.range));
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
// Type hint inference is best-effort
|
|
448
|
+
}
|
|
449
|
+
return results;
|
|
450
|
+
}));
|
|
239
451
|
connection.onShutdown(() => {
|
|
240
452
|
hasShutdownBeenRequested = true;
|
|
241
453
|
});
|
package/dist/lsp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-server.js","sourceRoot":"","sources":["../src/lsp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lsp-server.js","sourceRoot":"","sources":["../src/lsp-server.ts"],"names":[],"mappings":"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"}
|