monaco-languageclient 10.0.0-next.0 → 10.0.0-next.2
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/CHANGELOG.md +20 -3
- package/README.md +98 -34
- package/lib/common/utils.d.ts +1 -1
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +1 -1
- package/lib/common/utils.js.map +1 -1
- package/lib/editorApp/config.d.ts +0 -2
- package/lib/editorApp/config.d.ts.map +1 -1
- package/lib/editorApp/config.js +1 -2
- package/lib/editorApp/config.js.map +1 -1
- package/lib/editorApp/editorApp.d.ts +4 -11
- package/lib/editorApp/editorApp.d.ts.map +1 -1
- package/lib/editorApp/editorApp.js +73 -88
- package/lib/editorApp/editorApp.js.map +1 -1
- package/lib/fs/definitions.d.ts +2 -2
- package/lib/fs/definitions.d.ts.map +1 -1
- package/lib/vscode/apiWrapper.d.ts +21 -6
- package/lib/vscode/apiWrapper.d.ts.map +1 -1
- package/lib/vscode/apiWrapper.js +67 -39
- package/lib/vscode/apiWrapper.js.map +1 -1
- package/lib/vscode/config.d.ts +8 -6
- package/lib/vscode/config.d.ts.map +1 -1
- package/lib/vscode/config.js +1 -1
- package/lib/vscode/utils.d.ts.map +1 -1
- package/lib/vscode/utils.js +4 -5
- package/lib/vscode/utils.js.map +1 -1
- package/lib/worker/index.js +1 -1
- package/lib/wrapper/lcconfig.d.ts +3 -3
- package/lib/wrapper/lcconfig.d.ts.map +1 -1
- package/lib/wrapper/lcconfig.js +1 -1
- package/lib/wrapper/lcmanager.d.ts +2 -1
- package/lib/wrapper/lcmanager.d.ts.map +1 -1
- package/lib/wrapper/lcmanager.js +21 -17
- package/lib/wrapper/lcmanager.js.map +1 -1
- package/lib/wrapper/lcwrapper.d.ts +1 -1
- package/lib/wrapper/lcwrapper.d.ts.map +1 -1
- package/lib/wrapper/lcwrapper.js +10 -9
- package/lib/wrapper/lcwrapper.js.map +1 -1
- package/package.json +41 -40
- package/src/common/utils.ts +1 -1
- package/src/editorApp/config.ts +1 -3
- package/src/editorApp/editorApp.ts +81 -96
- package/src/fs/definitions.ts +2 -2
- package/src/vscode/apiWrapper.ts +84 -44
- package/src/vscode/config.ts +13 -8
- package/src/vscode/utils.ts +4 -5
- package/src/worker/index.ts +1 -1
- package/src/wrapper/lcconfig.ts +5 -5
- package/src/wrapper/lcmanager.ts +23 -18
- package/src/wrapper/lcwrapper.ts +10 -9
package/src/vscode/utils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* --------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025 TypeFox and others.
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
@@ -12,11 +12,10 @@ import { FakeWorker as Worker } from 'monaco-languageclient/workerFactory';
|
|
|
12
12
|
import type { MonacoEnvironmentEnhanced } from './config.js';
|
|
13
13
|
|
|
14
14
|
export const getEnhancedMonacoEnvironment = (): MonacoEnvironmentEnhanced => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
monWin.MonacoEnvironment = {};
|
|
15
|
+
if (typeof MonacoEnvironment === 'undefined') {
|
|
16
|
+
globalThis.MonacoEnvironment = {};
|
|
18
17
|
}
|
|
19
|
-
const envEnhanced =
|
|
18
|
+
const envEnhanced = MonacoEnvironment as MonacoEnvironmentEnhanced;
|
|
20
19
|
if (envEnhanced.vscodeApiInitialising === undefined) {
|
|
21
20
|
envEnhanced.vscodeApiInitialising = false;
|
|
22
21
|
}
|
package/src/worker/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* --------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025 TypeFox and others.
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
package/src/wrapper/lcconfig.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* --------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025 TypeFox and others.
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
@@ -12,11 +12,13 @@ export interface ConnectionConfig {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export interface LanguageClientConfig {
|
|
15
|
-
|
|
15
|
+
languageId: string;
|
|
16
16
|
connection: ConnectionConfig;
|
|
17
17
|
clientOptions: LanguageClientOptions;
|
|
18
18
|
restartOptions?: LanguageClientRestartOptions;
|
|
19
19
|
disposeWorker?: boolean;
|
|
20
|
+
overwriteExisting?: boolean;
|
|
21
|
+
enforceDispose?: boolean;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
export interface LanguageClientRestartOptions {
|
|
@@ -26,7 +28,5 @@ export interface LanguageClientRestartOptions {
|
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
export interface LanguageClientConfigs {
|
|
29
|
-
configs: Record<string, LanguageClientConfig
|
|
30
|
-
overwriteExisting?: boolean;
|
|
31
|
-
enforceDispose?: boolean;
|
|
31
|
+
configs: Record<string, LanguageClientConfig>;
|
|
32
32
|
}
|
package/src/wrapper/lcmanager.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* --------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025 TypeFox and others.
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
6
|
import type { Logger } from 'monaco-languageclient/common';
|
|
7
|
-
import type { LanguageClientConfigs } from './lcconfig.js';
|
|
7
|
+
import type { LanguageClientConfig, LanguageClientConfigs } from './lcconfig.js';
|
|
8
8
|
import { LanguageClientWrapper } from './lcwrapper.js';
|
|
9
9
|
|
|
10
10
|
export class LanguageClientsManager {
|
|
@@ -33,25 +33,30 @@ export class LanguageClientsManager {
|
|
|
33
33
|
return this.languageClientWrappers.get(languageId)?.getWorker();
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
async setConfig(languageClientConfig: LanguageClientConfig): Promise<void> {
|
|
37
|
+
const languageId = languageClientConfig.languageId;
|
|
38
|
+
const current = this.languageClientWrappers.get(languageId);
|
|
39
|
+
const lcw = new LanguageClientWrapper(languageClientConfig, this.logger);
|
|
40
|
+
|
|
41
|
+
if (current !== undefined) {
|
|
42
|
+
if (languageClientConfig.overwriteExisting === true) {
|
|
43
|
+
if (languageClientConfig.enforceDispose === true) {
|
|
44
|
+
await current.dispose();
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
throw new Error(`A languageclient config with id "${languageId}" already exists and you confiured to not override.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
this.languageClientWrappers.set(languageId, lcw);
|
|
51
|
+
}
|
|
52
|
+
|
|
36
53
|
async setConfigs(languageClientConfigs: LanguageClientConfigs): Promise<void> {
|
|
37
54
|
this.languageClientConfigs = languageClientConfigs;
|
|
38
55
|
|
|
39
|
-
const
|
|
40
|
-
if (
|
|
41
|
-
for (const
|
|
42
|
-
|
|
43
|
-
const lcw = new LanguageClientWrapper(lcc, this.logger);
|
|
44
|
-
|
|
45
|
-
if (current !== undefined) {
|
|
46
|
-
if (languageClientConfigs.overwriteExisting === true) {
|
|
47
|
-
if (languageClientConfigs.enforceDispose === true) {
|
|
48
|
-
await current.dispose();
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
throw new Error(`A languageclient config with id "${languageId}" already exists and you confiured to not override.`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
this.languageClientWrappers.set(languageId, lcw);
|
|
56
|
+
const lccs = Object.values(this.languageClientConfigs.configs);
|
|
57
|
+
if (lccs.length > 0) {
|
|
58
|
+
for (const lcc of lccs) {
|
|
59
|
+
await this.setConfig(lcc);
|
|
55
60
|
}
|
|
56
61
|
}
|
|
57
62
|
}
|
package/src/wrapper/lcwrapper.ts
CHANGED
|
@@ -21,12 +21,12 @@ export class LanguageClientWrapper {
|
|
|
21
21
|
private languageClientConfig: LanguageClientConfig;
|
|
22
22
|
private worker?: Worker;
|
|
23
23
|
private port?: MessagePort;
|
|
24
|
-
private
|
|
24
|
+
private languageId: string;
|
|
25
25
|
private logger: Logger | undefined;
|
|
26
26
|
|
|
27
27
|
constructor(config: LanguageClientConfig, logger?: Logger) {
|
|
28
28
|
this.languageClientConfig = config;
|
|
29
|
-
this.
|
|
29
|
+
this.languageId = this.languageClientConfig.languageId;
|
|
30
30
|
this.logger = logger;
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -102,7 +102,7 @@ export class LanguageClientWrapper {
|
|
|
102
102
|
};
|
|
103
103
|
webSocket.onerror = (ev: Event) => {
|
|
104
104
|
const languageClientError: LanguageClientError = {
|
|
105
|
-
message: `languageClientWrapper (${this.
|
|
105
|
+
message: `languageClientWrapper (${this.languageId}): Websocket connection failed.`,
|
|
106
106
|
error: (ev as ErrorEvent).error ?? 'No error was provided.'
|
|
107
107
|
};
|
|
108
108
|
reject(languageClientError);
|
|
@@ -120,7 +120,7 @@ export class LanguageClientWrapper {
|
|
|
120
120
|
|
|
121
121
|
this.worker.onerror = (ev) => {
|
|
122
122
|
const languageClientError: LanguageClientError = {
|
|
123
|
-
message: `languageClientWrapper (${this.
|
|
123
|
+
message: `languageClientWrapper (${this.languageId}): Illegal worker configuration detected.`,
|
|
124
124
|
error: ev.error ?? 'No error was provided.'
|
|
125
125
|
};
|
|
126
126
|
reject(languageClientError);
|
|
@@ -155,7 +155,8 @@ export class LanguageClientWrapper {
|
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
const mlcConfig = {
|
|
158
|
-
|
|
158
|
+
id: this.languageClientConfig.languageId,
|
|
159
|
+
name: 'Monaco Wrapper Language Client',
|
|
159
160
|
clientOptions: {
|
|
160
161
|
// disable the default error handler...
|
|
161
162
|
errorHandler: {
|
|
@@ -205,12 +206,12 @@ export class LanguageClientWrapper {
|
|
|
205
206
|
}
|
|
206
207
|
} catch (e: unknown) {
|
|
207
208
|
const languageClientError: LanguageClientError = {
|
|
208
|
-
message: `languageClientWrapper (${this.
|
|
209
|
+
message: `languageClientWrapper (${this.languageId}): Start was unsuccessful.`,
|
|
209
210
|
error: Object.hasOwn(e ?? {}, 'cause') ? (e as Error) : 'No error was provided.'
|
|
210
211
|
};
|
|
211
212
|
reject(languageClientError);
|
|
212
213
|
}
|
|
213
|
-
this.logger?.info(`languageClientWrapper (${this.
|
|
214
|
+
this.logger?.info(`languageClientWrapper (${this.languageId}): Started successfully.`);
|
|
214
215
|
resolve();
|
|
215
216
|
starting = false;
|
|
216
217
|
}
|
|
@@ -232,7 +233,7 @@ export class LanguageClientWrapper {
|
|
|
232
233
|
} finally {
|
|
233
234
|
retry++;
|
|
234
235
|
if (retry > (restartOptions.retries) && !this.isStarted()) {
|
|
235
|
-
this.logger?.info(
|
|
236
|
+
this.logger?.info(`Disabling Language Client. Failed to start clangd after ${restartOptions.retries} retries`);
|
|
236
237
|
} else {
|
|
237
238
|
setTimeout(async () => {
|
|
238
239
|
await this.restart(this.worker, restartOptions.keepWorker);
|
|
@@ -258,7 +259,7 @@ export class LanguageClientWrapper {
|
|
|
258
259
|
}
|
|
259
260
|
} catch (e) {
|
|
260
261
|
const languageClientError: LanguageClientError = {
|
|
261
|
-
message: `languageClientWrapper (${this.
|
|
262
|
+
message: `languageClientWrapper (${this.languageId}): Disposing the monaco-languageclient resulted in error.`,
|
|
262
263
|
error: Object.hasOwn(e ?? {}, 'cause') ? (e as Error) : 'No error was provided.'
|
|
263
264
|
};
|
|
264
265
|
return Promise.reject(languageClientError);
|