monaco-lsp-bridge 0.0.1
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 +61 -0
- package/lib/cjs/error.js +46 -0
- package/lib/cjs/error.js.map +1 -0
- package/lib/cjs/index.js +594 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/protocol.js +21 -0
- package/lib/cjs/protocol.js.map +1 -0
- package/lib/cjs/transport.js +269 -0
- package/lib/cjs/transport.js.map +1 -0
- package/lib/cjs/util.js +264 -0
- package/lib/cjs/util.js.map +1 -0
- package/lib/esm/error.js +40 -0
- package/lib/esm/error.js.map +1 -0
- package/lib/esm/index.js +576 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/protocol.js +15 -0
- package/lib/esm/protocol.js.map +1 -0
- package/lib/esm/transport.js +265 -0
- package/lib/esm/transport.js.map +1 -0
- package/lib/esm/util.js +252 -0
- package/lib/esm/util.js.map +1 -0
- package/lib/ts/error.d.ts +26 -0
- package/lib/ts/error.d.ts.map +1 -0
- package/lib/ts/index.d.ts +78 -0
- package/lib/ts/index.d.ts.map +1 -0
- package/lib/ts/protocol.d.ts +80 -0
- package/lib/ts/protocol.d.ts.map +1 -0
- package/lib/ts/transport.d.ts +74 -0
- package/lib/ts/transport.d.ts.map +1 -0
- package/lib/ts/util.d.ts +21 -0
- package/lib/ts/util.d.ts.map +1 -0
- package/package.json +68 -0
- package/src/error.ts +48 -0
- package/src/index.ts +709 -0
- package/src/protocol.ts +129 -0
- package/src/transport.ts +337 -0
- package/src/util.ts +300 -0
- package/tsconfig.json +49 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { JSONRPC_VERSION, makeRequest, makeNotification, isId, } from './protocol.js';
|
|
2
|
+
import { LspError, LspErrorCode, toLspError, isCancellationError } from './error.js';
|
|
3
|
+
export class LspTransport {
|
|
4
|
+
sender;
|
|
5
|
+
receiver;
|
|
6
|
+
defaultTimeoutMs;
|
|
7
|
+
nextId = 1;
|
|
8
|
+
nextTokenId = 1;
|
|
9
|
+
disposables = new Set();
|
|
10
|
+
// Fire-and-forget requests handled by withHandlers()
|
|
11
|
+
pending = new Map();
|
|
12
|
+
// Async bookkeeping
|
|
13
|
+
timeouts = new Map();
|
|
14
|
+
rejectors = new Map();
|
|
15
|
+
// Central dispatcher: subscribers + per-id waiters (for sendAsync)
|
|
16
|
+
subs = new Set();
|
|
17
|
+
waiters = new Map();
|
|
18
|
+
// Progress tracking (both work done progress and partial results use $/progress)
|
|
19
|
+
progressCallbacks = new Map();
|
|
20
|
+
/** Construct a binding over a sender/receiver transport */
|
|
21
|
+
constructor(sender, receiver, defaultTimeoutMs = 15_000) {
|
|
22
|
+
this.sender = sender;
|
|
23
|
+
this.receiver = receiver;
|
|
24
|
+
this.defaultTimeoutMs = defaultTimeoutMs;
|
|
25
|
+
// One receiver to rule them all — handles single or batch frames.
|
|
26
|
+
const unbind = this.receiver((raw) => this.ingest(raw));
|
|
27
|
+
this.disposables.add(unbind);
|
|
28
|
+
}
|
|
29
|
+
// ---------------- Constructors ----------------
|
|
30
|
+
/** Create a binding from a Worker-like endpoint */
|
|
31
|
+
static fromWorker(worker) {
|
|
32
|
+
const sender = (message) => worker.postMessage(message);
|
|
33
|
+
const receiver = (cb) => {
|
|
34
|
+
const handler = (e) => cb(e.data);
|
|
35
|
+
worker.addEventListener('message', handler);
|
|
36
|
+
return () => worker.removeEventListener('message', handler);
|
|
37
|
+
};
|
|
38
|
+
return new LspTransport(sender, receiver);
|
|
39
|
+
}
|
|
40
|
+
/** Infer a binding from either a worker or an existing binding */
|
|
41
|
+
static infer(endpoint) {
|
|
42
|
+
return endpoint instanceof LspTransport ? endpoint : LspTransport.fromWorker(endpoint);
|
|
43
|
+
}
|
|
44
|
+
// -------- Helpers
|
|
45
|
+
/** Track a Monaco disposable for cleanup */
|
|
46
|
+
addDisposable(d) {
|
|
47
|
+
this.disposables.add(() => d.dispose());
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/** Listen for error responses and forward normalized errors */
|
|
51
|
+
onError(cb) {
|
|
52
|
+
const onMessage = (res) => {
|
|
53
|
+
if (res?.jsonrpc !== JSONRPC_VERSION)
|
|
54
|
+
return;
|
|
55
|
+
if (res?.error)
|
|
56
|
+
cb(toLspError(res.error));
|
|
57
|
+
};
|
|
58
|
+
this.disposables.add(this.subscribe(onMessage));
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/** Register a progress callback for a specific token */
|
|
62
|
+
onProgress(token, callback) {
|
|
63
|
+
this.progressCallbacks.set(token, callback);
|
|
64
|
+
return () => this.progressCallbacks.delete(token);
|
|
65
|
+
}
|
|
66
|
+
/** Register a callback for all $/progress notifications */
|
|
67
|
+
onProgressNotification(callback) {
|
|
68
|
+
const onMessage = (msg) => {
|
|
69
|
+
if (msg?.jsonrpc !== JSONRPC_VERSION || msg?.method !== '$/progress')
|
|
70
|
+
return;
|
|
71
|
+
if (msg.params)
|
|
72
|
+
callback(msg.params);
|
|
73
|
+
};
|
|
74
|
+
this.disposables.add(this.subscribe(onMessage));
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/** Listen for a specific server notification method */
|
|
78
|
+
onServerNotification(method, cb) {
|
|
79
|
+
const onMessage = (msg) => {
|
|
80
|
+
if (msg?.jsonrpc !== JSONRPC_VERSION || msg?.method !== method)
|
|
81
|
+
return;
|
|
82
|
+
cb(msg.params);
|
|
83
|
+
};
|
|
84
|
+
this.disposables.add(this.subscribe(onMessage));
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/** Dispose all resources and reject in-flight requests */
|
|
88
|
+
dispose() {
|
|
89
|
+
for (const rej of this.rejectors.values()) {
|
|
90
|
+
try {
|
|
91
|
+
rej(new LspError({ code: LspErrorCode.Disposed, message: 'Binding disposed before response' }));
|
|
92
|
+
}
|
|
93
|
+
catch { }
|
|
94
|
+
}
|
|
95
|
+
this.rejectors.clear();
|
|
96
|
+
for (const t of this.timeouts.values())
|
|
97
|
+
clearTimeout(t);
|
|
98
|
+
this.timeouts.clear();
|
|
99
|
+
this.disposables.forEach((d) => d());
|
|
100
|
+
this.disposables.clear();
|
|
101
|
+
this.pending.clear();
|
|
102
|
+
this.waiters.clear();
|
|
103
|
+
this.subs.clear();
|
|
104
|
+
this.progressCallbacks.clear();
|
|
105
|
+
}
|
|
106
|
+
// -------- Core API
|
|
107
|
+
/** Send a client-to-server notification (no response expected) */
|
|
108
|
+
sendNotification(method, params) {
|
|
109
|
+
this.sender(makeNotification(method, params));
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
/** Send an async request with timeout, cancellation and progress support */
|
|
113
|
+
sendRequest(method, params, opts) {
|
|
114
|
+
const id = this.nextId++;
|
|
115
|
+
// Generate tokens if callbacks provided but tokens not specified
|
|
116
|
+
const workDoneToken = opts?.workDoneToken ?? (opts?.onProgress ? `work-${this.nextTokenId++}` : undefined);
|
|
117
|
+
const partialResultToken = opts?.partialResultToken ?? (opts?.onPartialResult ? `partial-${this.nextTokenId++}` : undefined);
|
|
118
|
+
// Augment params with tokens if provided
|
|
119
|
+
const augmentedParams = { ...params };
|
|
120
|
+
if (workDoneToken !== undefined) {
|
|
121
|
+
augmentedParams.workDoneToken = workDoneToken;
|
|
122
|
+
}
|
|
123
|
+
if (partialResultToken !== undefined) {
|
|
124
|
+
augmentedParams.partialResultToken = partialResultToken;
|
|
125
|
+
}
|
|
126
|
+
const m = makeRequest(id, method, augmentedParams);
|
|
127
|
+
if (opts?.signal?.aborted) {
|
|
128
|
+
return Promise.resolve({ cancelled: true, code: LspErrorCode.RequestCancelled });
|
|
129
|
+
}
|
|
130
|
+
// Register progress callbacks if provided
|
|
131
|
+
// Both work done progress and partial results use $/progress notifications
|
|
132
|
+
if (workDoneToken !== undefined && opts?.onProgress) {
|
|
133
|
+
this.progressCallbacks.set(workDoneToken, opts.onProgress);
|
|
134
|
+
}
|
|
135
|
+
if (partialResultToken !== undefined && opts?.onPartialResult) {
|
|
136
|
+
this.progressCallbacks.set(partialResultToken, opts.onPartialResult);
|
|
137
|
+
}
|
|
138
|
+
this.sender(m);
|
|
139
|
+
return new Promise((resolve, reject) => {
|
|
140
|
+
const resolveCancelled = (code) => {
|
|
141
|
+
cleanup();
|
|
142
|
+
resolve({ cancelled: true, code });
|
|
143
|
+
};
|
|
144
|
+
const rejectAs = (err) => {
|
|
145
|
+
cleanup();
|
|
146
|
+
reject(err);
|
|
147
|
+
};
|
|
148
|
+
const onResponse = (res) => {
|
|
149
|
+
if (res?.id !== id)
|
|
150
|
+
return;
|
|
151
|
+
if (res.error) {
|
|
152
|
+
const err = toLspError(res.error);
|
|
153
|
+
if (isCancellationError(err))
|
|
154
|
+
return resolveCancelled(err.code);
|
|
155
|
+
return rejectAs(err);
|
|
156
|
+
}
|
|
157
|
+
cleanup();
|
|
158
|
+
resolve({ cancelled: false, result: res.result });
|
|
159
|
+
};
|
|
160
|
+
// route by id via central dispatcher
|
|
161
|
+
this.waiters.set(id, onResponse);
|
|
162
|
+
const cleanup = () => {
|
|
163
|
+
this.waiters.delete(id);
|
|
164
|
+
const t = this.timeouts.get(id);
|
|
165
|
+
if (t)
|
|
166
|
+
clearTimeout(t);
|
|
167
|
+
this.timeouts.delete(id);
|
|
168
|
+
this.rejectors.delete(id);
|
|
169
|
+
// Clean up progress callbacks (on completion, cancellation, or error)
|
|
170
|
+
// Per LSP spec: workDoneToken is only valid until response/cancellation
|
|
171
|
+
if (workDoneToken !== undefined) {
|
|
172
|
+
this.progressCallbacks.delete(workDoneToken);
|
|
173
|
+
}
|
|
174
|
+
if (partialResultToken !== undefined) {
|
|
175
|
+
this.progressCallbacks.delete(partialResultToken);
|
|
176
|
+
}
|
|
177
|
+
if (abortCleanup)
|
|
178
|
+
opts?.signal?.removeEventListener('abort', abortCleanup);
|
|
179
|
+
};
|
|
180
|
+
// Timeout
|
|
181
|
+
const timeoutMs = opts?.timeoutMs ?? this.defaultTimeoutMs;
|
|
182
|
+
if (timeoutMs > 0 && Number.isFinite(timeoutMs)) {
|
|
183
|
+
const t = setTimeout(() => {
|
|
184
|
+
rejectAs(new LspError({
|
|
185
|
+
code: LspErrorCode.Timeout,
|
|
186
|
+
message: `Request timed out: ${String(method)} (${id}) after ${timeoutMs}ms`,
|
|
187
|
+
}));
|
|
188
|
+
}, timeoutMs);
|
|
189
|
+
this.timeouts.set(id, t);
|
|
190
|
+
}
|
|
191
|
+
// Allow dispose() to reject in-flight requests
|
|
192
|
+
this.rejectors.set(id, rejectAs);
|
|
193
|
+
// AbortSignal → send $/cancelRequest and resolve immediately (eager cancel)
|
|
194
|
+
// Don't wait for server response - some servers don't echo promptly
|
|
195
|
+
let abortCleanup;
|
|
196
|
+
if (opts?.signal) {
|
|
197
|
+
const onAbort = () => {
|
|
198
|
+
// Notify server of cancellation (best effort)
|
|
199
|
+
this.sendNotification('$/cancelRequest', { id });
|
|
200
|
+
// Resolve immediately for better UX (don't wait for server acknowledgement)
|
|
201
|
+
resolveCancelled(LspErrorCode.RequestCancelled);
|
|
202
|
+
};
|
|
203
|
+
opts.signal.addEventListener('abort', onAbort, { once: true });
|
|
204
|
+
abortCleanup = () => opts.signal?.removeEventListener('abort', onAbort);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/** Subscribe to all inbound JSON-RPC messages */
|
|
209
|
+
subscribe(cb) {
|
|
210
|
+
this.subs.add(cb);
|
|
211
|
+
return () => this.subs.delete(cb);
|
|
212
|
+
}
|
|
213
|
+
/** Ingest an incoming frame and dispatch to listeners/waiters */
|
|
214
|
+
ingest = (raw) => {
|
|
215
|
+
// Batch: process each frame independently
|
|
216
|
+
if (Array.isArray(raw)) {
|
|
217
|
+
for (const frame of raw)
|
|
218
|
+
this.ingest(frame);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Early drop anything that isn't a proper JSON-RPC 2.0 message
|
|
222
|
+
if (!raw || typeof raw !== 'object' || raw.jsonrpc !== JSONRPC_VERSION)
|
|
223
|
+
return;
|
|
224
|
+
// Handle $/progress notifications
|
|
225
|
+
if (raw.method === '$/progress' && raw.params) {
|
|
226
|
+
const params = raw.params;
|
|
227
|
+
const callback = this.progressCallbacks.get(params.token);
|
|
228
|
+
if (callback) {
|
|
229
|
+
try {
|
|
230
|
+
callback(params.value);
|
|
231
|
+
}
|
|
232
|
+
catch { }
|
|
233
|
+
// Auto-remove workDoneToken callbacks when receiving WorkDoneProgressEnd
|
|
234
|
+
if (params.value && typeof params.value === 'object' && params.value.kind === 'end') {
|
|
235
|
+
this.progressCallbacks.delete(params.token);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Still fan out to subscribers for withProgress handlers
|
|
239
|
+
}
|
|
240
|
+
// If it's a response with an id and a waiting promise, resolve that first
|
|
241
|
+
if (Object.prototype.hasOwnProperty.call(raw, 'id')) {
|
|
242
|
+
const id = raw.id;
|
|
243
|
+
if (isId(id)) {
|
|
244
|
+
const waiter = this.waiters.get(id);
|
|
245
|
+
if (waiter) {
|
|
246
|
+
// Claim and stop propagation to generic handlers
|
|
247
|
+
this.waiters.delete(id);
|
|
248
|
+
try {
|
|
249
|
+
waiter(raw);
|
|
250
|
+
}
|
|
251
|
+
catch { }
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Fan-out to generic subscribers (e.g. withHandlers / withError / withProgress)
|
|
257
|
+
for (const cb of Array.from(this.subs)) {
|
|
258
|
+
try {
|
|
259
|
+
cb(raw);
|
|
260
|
+
}
|
|
261
|
+
catch { }
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/util.js
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/** Store original LSP item on Monaco completion item */
|
|
2
|
+
const LSP_ITEM_KEY = Symbol.for('__lsp_completion_item__');
|
|
3
|
+
/** Convert LSP CompletionItem to Monaco and stash original */
|
|
4
|
+
export const toMonacoCompletionItem = (monacoApi, item) => {
|
|
5
|
+
const insertText = getInsertText(item);
|
|
6
|
+
const range = toMonacoRange(item.textEdit);
|
|
7
|
+
// Determine insert text format (snippet vs plain)
|
|
8
|
+
const insertTextFormat = item.insertTextFormat ?? 1; // 1 = PlainText, 2 = Snippet
|
|
9
|
+
const isSnippet = insertTextFormat === 2;
|
|
10
|
+
const result = {
|
|
11
|
+
label: item.label,
|
|
12
|
+
insertText,
|
|
13
|
+
kind: item.kind ?? 0,
|
|
14
|
+
detail: item.detail,
|
|
15
|
+
documentation: typeof item.documentation === 'string' ? item.documentation : item.documentation?.value,
|
|
16
|
+
sortText: item.sortText,
|
|
17
|
+
filterText: item.filterText,
|
|
18
|
+
commitCharacters: item.commitCharacters,
|
|
19
|
+
additionalTextEdits: item.additionalTextEdits?.map(toMonacoTextEdit),
|
|
20
|
+
// Insert as snippet when requested
|
|
21
|
+
insertTextRules: isSnippet ? monacoApi.languages.CompletionItemInsertTextRule.InsertAsSnippet : undefined, // 4 = InsertAsSnippet
|
|
22
|
+
};
|
|
23
|
+
// Set explicit range only when provided by LSP
|
|
24
|
+
if (range !== undefined) {
|
|
25
|
+
result.range = range;
|
|
26
|
+
}
|
|
27
|
+
// Keep original for resolve
|
|
28
|
+
result[LSP_ITEM_KEY] = item;
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
/** Convert Monaco CompletionItem to LSP, preferring original */
|
|
32
|
+
export const toLspCompletionItem = (item) => {
|
|
33
|
+
// Try to retrieve the original LSP item
|
|
34
|
+
const originalItem = item[LSP_ITEM_KEY];
|
|
35
|
+
if (originalItem) {
|
|
36
|
+
// Use original to preserve LSP fields
|
|
37
|
+
return originalItem;
|
|
38
|
+
}
|
|
39
|
+
// Fallback: convert Monaco item to LSP format
|
|
40
|
+
const result = {
|
|
41
|
+
label: typeof item.label === 'string' ? item.label : item.label.label,
|
|
42
|
+
kind: item.kind,
|
|
43
|
+
detail: item.detail,
|
|
44
|
+
documentation: typeof item.documentation === 'string' ? item.documentation : item.documentation?.value,
|
|
45
|
+
sortText: item.sortText,
|
|
46
|
+
filterText: item.filterText,
|
|
47
|
+
insertText: typeof item.insertText === 'string' ? item.insertText : undefined,
|
|
48
|
+
commitCharacters: item.commitCharacters,
|
|
49
|
+
};
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
/** Merge resolved LSP fields into Monaco item */
|
|
53
|
+
export const mergeResolvedCompletionItem = (monacoItem, resolvedLspItem) => {
|
|
54
|
+
// Merge fields that may be resolved
|
|
55
|
+
const merged = {
|
|
56
|
+
...monacoItem,
|
|
57
|
+
detail: resolvedLspItem.detail ?? monacoItem.detail,
|
|
58
|
+
documentation: resolvedLspItem.documentation !== undefined
|
|
59
|
+
? typeof resolvedLspItem.documentation === 'string'
|
|
60
|
+
? resolvedLspItem.documentation
|
|
61
|
+
: resolvedLspItem.documentation?.value
|
|
62
|
+
: monacoItem.documentation,
|
|
63
|
+
additionalTextEdits: resolvedLspItem.additionalTextEdits?.map(toMonacoTextEdit) ?? monacoItem.additionalTextEdits,
|
|
64
|
+
command: resolvedLspItem.command
|
|
65
|
+
? {
|
|
66
|
+
id: resolvedLspItem.command.command,
|
|
67
|
+
title: resolvedLspItem.command.title,
|
|
68
|
+
arguments: resolvedLspItem.command.arguments,
|
|
69
|
+
}
|
|
70
|
+
: monacoItem.command,
|
|
71
|
+
};
|
|
72
|
+
// Update insert text/range when textEdit provided
|
|
73
|
+
if (resolvedLspItem.textEdit) {
|
|
74
|
+
const insertText = getInsertText(resolvedLspItem);
|
|
75
|
+
const range = toMonacoRange(resolvedLspItem.textEdit);
|
|
76
|
+
merged.insertText = insertText;
|
|
77
|
+
if (range !== undefined) {
|
|
78
|
+
merged.range = range;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (resolvedLspItem.insertText !== undefined) {
|
|
82
|
+
// Handle resolve without textEdit
|
|
83
|
+
merged.insertText = resolvedLspItem.insertText;
|
|
84
|
+
}
|
|
85
|
+
// Update snippet rule if format changed
|
|
86
|
+
if (resolvedLspItem.insertTextFormat !== undefined) {
|
|
87
|
+
const isSnippet = resolvedLspItem.insertTextFormat === 2;
|
|
88
|
+
merged.insertTextRules = isSnippet ? 4 : undefined; // 4 = InsertAsSnippet
|
|
89
|
+
}
|
|
90
|
+
// Store updated LSP item
|
|
91
|
+
;
|
|
92
|
+
merged[LSP_ITEM_KEY] = resolvedLspItem;
|
|
93
|
+
return merged;
|
|
94
|
+
};
|
|
95
|
+
/** Extract insert text: textEdit.newText → insertText → label */
|
|
96
|
+
const getInsertText = (item) => {
|
|
97
|
+
if (item.textEdit && 'newText' in item.textEdit) {
|
|
98
|
+
return item.textEdit.newText;
|
|
99
|
+
}
|
|
100
|
+
return item.insertText ?? item.label;
|
|
101
|
+
};
|
|
102
|
+
/** Convert LSP TextEdit to Monaco */
|
|
103
|
+
const toMonacoTextEdit = (edit) => {
|
|
104
|
+
return {
|
|
105
|
+
range: toMonacoIRange(edit.range),
|
|
106
|
+
text: edit.newText,
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
/** Convert LSP TextEdit/InsertReplaceEdit to Monaco range */
|
|
110
|
+
const toMonacoRange = (edit) => {
|
|
111
|
+
if (!edit)
|
|
112
|
+
return undefined;
|
|
113
|
+
if ('range' in edit) {
|
|
114
|
+
return toMonacoIRange(edit.range);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
insert: toMonacoIRange(edit.insert),
|
|
118
|
+
replace: toMonacoIRange(edit.replace),
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
/** Convert LSP Range to Monaco IRange (0-based → 1-based) */
|
|
122
|
+
const toMonacoIRange = (range) => {
|
|
123
|
+
return {
|
|
124
|
+
startLineNumber: range.start.line + 1,
|
|
125
|
+
startColumn: range.start.character + 1,
|
|
126
|
+
endLineNumber: range.end.line + 1,
|
|
127
|
+
endColumn: range.end.character + 1,
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
/** Convert Monaco IRange to LSP Range (1-based → 0-based) */
|
|
131
|
+
export const toLspRange = (range) => {
|
|
132
|
+
return {
|
|
133
|
+
start: {
|
|
134
|
+
line: range.startLineNumber - 1,
|
|
135
|
+
character: range.startColumn - 1,
|
|
136
|
+
},
|
|
137
|
+
end: {
|
|
138
|
+
line: range.endLineNumber - 1,
|
|
139
|
+
character: range.endColumn - 1,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
/** Convert LSP Position to Monaco IPosition */
|
|
144
|
+
export const toMonacoPosition = (position) => {
|
|
145
|
+
return {
|
|
146
|
+
lineNumber: position.line + 1,
|
|
147
|
+
column: position.character + 1,
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
/** Convert Monaco IPosition to LSP Position */
|
|
151
|
+
export const toLspPosition = (position) => {
|
|
152
|
+
return {
|
|
153
|
+
line: position.lineNumber - 1,
|
|
154
|
+
character: position.column - 1,
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
/** Map LSP diagnostics to Monaco markers */
|
|
158
|
+
export const toMonacoMarkers = (monacoApi, diagnostics) => {
|
|
159
|
+
const toSeverity = (s) => {
|
|
160
|
+
switch (s) {
|
|
161
|
+
case 1:
|
|
162
|
+
return monacoApi.MarkerSeverity.Error;
|
|
163
|
+
case 2:
|
|
164
|
+
return monacoApi.MarkerSeverity.Warning;
|
|
165
|
+
case 3:
|
|
166
|
+
return monacoApi.MarkerSeverity.Info;
|
|
167
|
+
case 4:
|
|
168
|
+
return monacoApi.MarkerSeverity.Hint;
|
|
169
|
+
default:
|
|
170
|
+
return monacoApi.MarkerSeverity.Info;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const toTags = (tags) => {
|
|
174
|
+
if (!tags || tags.length === 0)
|
|
175
|
+
return undefined;
|
|
176
|
+
const mapped = [];
|
|
177
|
+
for (const t of tags) {
|
|
178
|
+
if (t === 1)
|
|
179
|
+
mapped.push(monacoApi.MarkerTag.Unnecessary);
|
|
180
|
+
if (t === 2)
|
|
181
|
+
mapped.push(monacoApi.MarkerTag.Deprecated);
|
|
182
|
+
}
|
|
183
|
+
return mapped.length ? mapped : undefined;
|
|
184
|
+
};
|
|
185
|
+
const toRelated = (infos) => {
|
|
186
|
+
if (!infos || infos.length === 0)
|
|
187
|
+
return undefined;
|
|
188
|
+
return infos.map((ri) => ({
|
|
189
|
+
resource: monacoApi.Uri.parse(ri.location.uri),
|
|
190
|
+
message: ri.message,
|
|
191
|
+
startLineNumber: ri.location.range.start.line + 1,
|
|
192
|
+
startColumn: ri.location.range.start.character + 1,
|
|
193
|
+
endLineNumber: ri.location.range.end.line + 1,
|
|
194
|
+
endColumn: ri.location.range.end.character + 1,
|
|
195
|
+
}));
|
|
196
|
+
};
|
|
197
|
+
return diagnostics.map((d) => ({
|
|
198
|
+
severity: toSeverity(d.severity),
|
|
199
|
+
message: d.message,
|
|
200
|
+
code: typeof d.code === 'string' ? d.code : typeof d.code === 'number' ? String(d.code) : undefined,
|
|
201
|
+
source: d.source,
|
|
202
|
+
tags: toTags(d.tags),
|
|
203
|
+
relatedInformation: toRelated(d.relatedInformation),
|
|
204
|
+
startLineNumber: d.range.start.line + 1,
|
|
205
|
+
startColumn: d.range.start.character + 1,
|
|
206
|
+
endLineNumber: d.range.end.line + 1,
|
|
207
|
+
endColumn: d.range.end.character + 1,
|
|
208
|
+
}));
|
|
209
|
+
};
|
|
210
|
+
/** Map LSP TextEdits to Monaco edits */
|
|
211
|
+
export const toMonacoTextEdits = (edits) => {
|
|
212
|
+
return edits.map((e) => ({
|
|
213
|
+
range: toMonacoIRange(e.range),
|
|
214
|
+
text: e.newText,
|
|
215
|
+
}));
|
|
216
|
+
};
|
|
217
|
+
/** Convert LSP Hover to Monaco Hover */
|
|
218
|
+
export const lspHoverToMonaco = (hover) => {
|
|
219
|
+
const contents = [];
|
|
220
|
+
const pushString = (value) => contents.push({ value });
|
|
221
|
+
const pushMarked = (m) => {
|
|
222
|
+
if (typeof m === 'string') {
|
|
223
|
+
pushString(m);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// { language, value } → markdown code block
|
|
227
|
+
const fenced = '```' + (m.language || '') + '\n' + m.value + '\n```';
|
|
228
|
+
pushString(fenced);
|
|
229
|
+
};
|
|
230
|
+
const pushMarkup = (mc) => {
|
|
231
|
+
// kind: 'markdown' | 'plaintext'. For plaintext, keep as-is.
|
|
232
|
+
pushString(mc.value);
|
|
233
|
+
};
|
|
234
|
+
const c = hover.contents;
|
|
235
|
+
if (Array.isArray(c)) {
|
|
236
|
+
for (const item of c)
|
|
237
|
+
pushMarked(item);
|
|
238
|
+
}
|
|
239
|
+
else if (typeof c === 'string' || (c && typeof c === 'object' && 'language' in c)) {
|
|
240
|
+
pushMarked(c);
|
|
241
|
+
}
|
|
242
|
+
else if (c && typeof c === 'object' && 'kind' in c) {
|
|
243
|
+
pushMarkup(c);
|
|
244
|
+
}
|
|
245
|
+
const result = {
|
|
246
|
+
contents,
|
|
247
|
+
};
|
|
248
|
+
if (hover.range)
|
|
249
|
+
result.range = toMonacoIRange(hover.range);
|
|
250
|
+
return result;
|
|
251
|
+
};
|
|
252
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare enum LspErrorCode {
|
|
2
|
+
ParseError = -32700,
|
|
3
|
+
InvalidRequest = -32600,
|
|
4
|
+
MethodNotFound = -32601,
|
|
5
|
+
InvalidParams = -32602,
|
|
6
|
+
InternalError = -32603,
|
|
7
|
+
ServerErrorBase = -32000,
|
|
8
|
+
RequestCancelled = -32800,
|
|
9
|
+
ContentModified = -32801,
|
|
10
|
+
ServerCancelled = -32802,
|
|
11
|
+
Timeout = 1001,
|
|
12
|
+
Disposed = 1002
|
|
13
|
+
}
|
|
14
|
+
export type LspErrorShape = {
|
|
15
|
+
code: number;
|
|
16
|
+
message: string;
|
|
17
|
+
data?: unknown;
|
|
18
|
+
};
|
|
19
|
+
export declare class LspError extends Error {
|
|
20
|
+
code: number;
|
|
21
|
+
data?: unknown;
|
|
22
|
+
constructor(shape: LspErrorShape);
|
|
23
|
+
}
|
|
24
|
+
export declare const isCancellationError: (e: unknown) => boolean;
|
|
25
|
+
export declare const toLspError: (e: any) => LspError;
|
|
26
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IAEtB,UAAU,SAAS;IACnB,cAAc,SAAS;IACvB,cAAc,SAAS;IACvB,aAAa,SAAS;IACtB,aAAa,SAAS;IAGtB,eAAe,SAAS;IAGxB,gBAAgB,SAAS;IACzB,eAAe,SAAS;IACxB,eAAe,SAAS;IAGxB,OAAO,OAAO;IACd,QAAQ,OAAO;CAChB;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE7E,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;gBACF,KAAK,EAAE,aAAa;CAMjC;AAED,eAAO,MAAM,mBAAmB,GAAI,GAAG,OAAO,YAI2D,CAAA;AAEzG,eAAO,MAAM,UAAU,GAAI,GAAG,GAAG,KAAG,QAO5B,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { InitializeResult, InitializeParams } from 'vscode-languageserver-protocol';
|
|
2
|
+
import type * as monaco from 'monaco-editor';
|
|
3
|
+
import { Transport } from './transport.js';
|
|
4
|
+
import { ProgressPayload } from './protocol.js';
|
|
5
|
+
import type { LspError } from './error.js';
|
|
6
|
+
export type * from './protocol.js';
|
|
7
|
+
export * from './transport.js';
|
|
8
|
+
type Monaco = typeof monaco;
|
|
9
|
+
export type ClientEvent = {
|
|
10
|
+
type: 'initialized';
|
|
11
|
+
capabilities: InitializeResult['capabilities'];
|
|
12
|
+
} | {
|
|
13
|
+
type: 'error';
|
|
14
|
+
error: LspError;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'workDoneProgress';
|
|
17
|
+
params: ProgressPayload;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'logMessage';
|
|
20
|
+
method: string;
|
|
21
|
+
params: any;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'shutdownError';
|
|
24
|
+
error: unknown;
|
|
25
|
+
};
|
|
26
|
+
export type ClientEventHandler = (event: ClientEvent) => void;
|
|
27
|
+
export type MonacoLspClientOptions = {
|
|
28
|
+
languageSelector: monaco.languages.LanguageSelector;
|
|
29
|
+
/** Send shutdown/exit on dispose when server is dedicated */
|
|
30
|
+
dedicatedServer?: boolean;
|
|
31
|
+
initialParams?: InitializeParams;
|
|
32
|
+
};
|
|
33
|
+
export declare class LspMonacoClient {
|
|
34
|
+
private options;
|
|
35
|
+
static CLIENT_NAME: string;
|
|
36
|
+
static CLIENT_VERSION: string;
|
|
37
|
+
private editor;
|
|
38
|
+
private monaco;
|
|
39
|
+
private binding;
|
|
40
|
+
private endpoint;
|
|
41
|
+
private openDocuments;
|
|
42
|
+
private initialized;
|
|
43
|
+
private eventHandlers;
|
|
44
|
+
private syncKind;
|
|
45
|
+
private readonly MARKER_OWNER;
|
|
46
|
+
/** Construct a Monaco LSP client bound to an endpoint */
|
|
47
|
+
constructor(endpoint: Transport, options: MonacoLspClientOptions);
|
|
48
|
+
/** Register an event handler for client events */
|
|
49
|
+
onEvent(handler: ClientEventHandler): () => void;
|
|
50
|
+
/** Emit an event to all registered handlers */
|
|
51
|
+
private emit;
|
|
52
|
+
/** Register Monaco editor instance and initialize LSP wiring */
|
|
53
|
+
connect(monaco: Monaco, editor: monaco.editor.ICodeEditor): void;
|
|
54
|
+
/** Initialize the LSP server connection and capabilities */
|
|
55
|
+
private initialize;
|
|
56
|
+
/** Dispose the client, closing docs and optionally shutting down server */
|
|
57
|
+
dispose(): Promise<void>;
|
|
58
|
+
/** Register Monaco features based on server-reported capabilities */
|
|
59
|
+
private applyServerCapabilities;
|
|
60
|
+
/** Register hover provider backed by the LSP server */
|
|
61
|
+
private registerHoverProvider;
|
|
62
|
+
/** Register Monaco completion provider backed by the LSP server */
|
|
63
|
+
private registerCompletionProvider;
|
|
64
|
+
/** Register document formatting provider backed by the LSP server */
|
|
65
|
+
private registerFormattingProvider;
|
|
66
|
+
/** Register range formatting provider backed by the LSP server */
|
|
67
|
+
private registerRangeFormattingProvider;
|
|
68
|
+
/** Register on-type formatting provider backed by the LSP server */
|
|
69
|
+
private registerOnTypeFormattingProvider;
|
|
70
|
+
/** Send textDocument/didChange according to server sync kind */
|
|
71
|
+
private handleContentChange;
|
|
72
|
+
/** Handle model open/close and send didOpen/didClose notifications */
|
|
73
|
+
private handleModelChange;
|
|
74
|
+
/** Listen for publishDiagnostics and update Monaco markers */
|
|
75
|
+
private wireDiagnostics;
|
|
76
|
+
private static CAPABILITIES;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,gCAAgC,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAY5C,OAAO,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,mBAAmB,eAAe,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAE9B,KAAK,MAAM,GAAG,OAAO,MAAM,CAAA;AAG3B,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAE7C,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAA;IACnD,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,gBAAgB,CAAA;CACjC,CAAA;AAED,qBAAa,eAAe;IAiBxB,OAAO,CAAC,OAAO;IAhBjB,MAAM,CAAC,WAAW,SAAsB;IACxC,MAAM,CAAC,cAAc,SAAU;IAE/B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAEjD,yDAAyD;gBAEvD,QAAQ,EAAE,SAAS,EACX,OAAO,EAAE,sBAAsB;IAMzC,kDAAkD;IAClD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKhD,+CAA+C;IAC/C,OAAO,CAAC,IAAI;IAWZ,gEAAgE;IAChE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;IAsBzD,4DAA4D;YAC9C,UAAU;IA0BxB,2EAA2E;IACrE,OAAO;IAqCb,qEAAqE;IACrE,OAAO,CAAC,uBAAuB;IAoC/B,uDAAuD;IACvD,OAAO,CAAC,qBAAqB;IAuB7B,mEAAmE;IACnE,OAAO,CAAC,0BAA0B;IAgDlC,qEAAqE;IACrE,OAAO,CAAC,0BAA0B;IAuBlC,kEAAkE;IAClE,OAAO,CAAC,+BAA+B;IAwBvC,oEAAoE;IACpE,OAAO,CAAC,gCAAgC;IA4BxC,gEAAgE;IAChE,OAAO,CAAC,mBAAmB;IA0B3B,sEAAsE;IACtE,OAAO,CAAC,iBAAiB;IAmDzB,8DAA8D;IAC9D,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,MAAM,CAAC,YAAY,CA8N1B;CACF"}
|