monaco-languageclient-examples 2025.6.3 → 2025.8.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/CHANGELOG.md +3 -2
- package/dist/appPlayground/common.d.ts +2 -2
- package/dist/appPlayground/common.d.ts.map +1 -1
- package/dist/appPlayground/common.js +3 -2
- package/dist/appPlayground/common.js.map +1 -1
- package/dist/appPlayground/config.d.ts +2 -4
- package/dist/appPlayground/config.d.ts.map +1 -1
- package/dist/appPlayground/config.js +63 -65
- package/dist/appPlayground/config.js.map +1 -1
- package/dist/appPlayground/launcher.js +1 -1
- package/dist/appPlayground/launcher.js.map +1 -1
- package/dist/appPlayground/main.d.ts.map +1 -1
- package/dist/appPlayground/main.js +4 -5
- package/dist/appPlayground/main.js.map +1 -1
- package/dist/appPlayground/reactLauncher.js +1 -1
- package/dist/appPlayground/reactLauncher.js.map +1 -1
- package/dist/appPlayground/reactMain.d.ts.map +1 -1
- package/dist/appPlayground/reactMain.js +3 -2
- package/dist/appPlayground/reactMain.js.map +1 -1
- package/dist/bare/client.d.ts.map +1 -1
- package/dist/bare/client.js +15 -12
- package/dist/bare/client.js.map +1 -1
- package/dist/browser/main.d.ts.map +1 -1
- package/dist/browser/main.js +27 -28
- package/dist/browser/main.js.map +1 -1
- package/dist/clangd/client/config.d.ts +3 -10
- package/dist/clangd/client/config.d.ts.map +1 -1
- package/dist/clangd/client/config.js +85 -85
- package/dist/clangd/client/config.js.map +1 -1
- package/dist/clangd/client/main.d.ts.map +1 -1
- package/dist/clangd/client/main.js +9 -12
- package/dist/clangd/client/main.js.map +1 -1
- package/dist/clangd/worker/clangd-server.js.map +1 -1
- package/dist/common/client/utils.d.ts +1 -8
- package/dist/common/client/utils.d.ts.map +1 -1
- package/dist/common/client/utils.js +3 -0
- package/dist/common/client/utils.js.map +1 -1
- package/dist/debugger/client/debugger.d.ts +1 -1
- package/dist/debugger/client/debugger.d.ts.map +1 -1
- package/dist/eclipse.jdt.ls/client/main.d.ts +1 -1
- package/dist/eclipse.jdt.ls/client/main.d.ts.map +1 -1
- package/dist/eclipse.jdt.ls/client/main.js +74 -4
- package/dist/eclipse.jdt.ls/client/main.js.map +1 -1
- package/dist/eclipse.jdt.ls/config.d.ts +5 -2
- package/dist/eclipse.jdt.ls/config.d.ts.map +1 -1
- package/dist/eclipse.jdt.ls/config.js +1 -2
- package/dist/eclipse.jdt.ls/config.js.map +1 -1
- package/dist/groovy/client/main.d.ts +1 -1
- package/dist/groovy/client/main.d.ts.map +1 -1
- package/dist/groovy/client/main.js +63 -4
- package/dist/groovy/client/main.js.map +1 -1
- package/dist/groovy/config.d.ts +5 -2
- package/dist/groovy/config.d.ts.map +1 -1
- package/dist/groovy/config.js +1 -2
- package/dist/groovy/config.js.map +1 -1
- package/dist/json/client/wrapperWs.d.ts +5 -0
- package/dist/json/client/wrapperWs.d.ts.map +1 -0
- package/dist/json/client/wrapperWs.js +87 -0
- package/dist/json/client/wrapperWs.js.map +1 -0
- package/dist/json/server/main.js.map +1 -1
- package/dist/langium/langium-dsl/config/classicConfig.d.ts +2 -2
- package/dist/langium/langium-dsl/config/classicConfig.d.ts.map +1 -1
- package/dist/langium/langium-dsl/config/classicConfig.js +45 -53
- package/dist/langium/langium-dsl/config/classicConfig.js.map +1 -1
- package/dist/langium/langium-dsl/config/extendedConfig.d.ts +2 -2
- package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +1 -1
- package/dist/langium/langium-dsl/config/extendedConfig.js +40 -40
- package/dist/langium/langium-dsl/config/extendedConfig.js.map +1 -1
- package/dist/langium/langium-dsl/wrapperLangium.d.ts.map +1 -1
- package/dist/langium/langium-dsl/wrapperLangium.js +16 -23
- package/dist/langium/langium-dsl/wrapperLangium.js.map +1 -1
- package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts +4 -4
- package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +1 -1
- package/dist/langium/statemachine/config/wrapperStatemachineConfig.js +41 -40
- package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +1 -1
- package/dist/langium/statemachine/launcher.js +1 -1
- package/dist/langium/statemachine/launcher.js.map +1 -1
- package/dist/langium/statemachine/ls/generated/ast.d.ts +127 -22
- package/dist/langium/statemachine/ls/generated/ast.d.ts.map +1 -1
- package/dist/langium/statemachine/ls/generated/ast.js +112 -97
- package/dist/langium/statemachine/ls/generated/ast.js.map +1 -1
- package/dist/langium/statemachine/ls/generated/grammar.d.ts +2 -2
- package/dist/langium/statemachine/ls/generated/grammar.d.ts.map +1 -1
- package/dist/langium/statemachine/ls/generated/grammar.js +43 -41
- package/dist/langium/statemachine/ls/generated/grammar.js.map +1 -1
- package/dist/langium/statemachine/ls/generated/module.d.ts +3 -3
- package/dist/langium/statemachine/ls/generated/module.d.ts.map +1 -1
- package/dist/langium/statemachine/ls/generated/module.js +6 -6
- package/dist/langium/statemachine/ls/generated/module.js.map +1 -1
- package/dist/langium/statemachine/ls/statemachine-module.js +2 -2
- package/dist/langium/statemachine/ls/statemachine-module.js.map +1 -1
- package/dist/langium/statemachine/main-react.js +3 -2
- package/dist/langium/statemachine/main-react.js.map +1 -1
- package/dist/langium/statemachine/main.d.ts.map +1 -1
- package/dist/langium/statemachine/main.js +27 -38
- package/dist/langium/statemachine/main.js.map +1 -1
- package/dist/multi/config.d.ts +1 -1
- package/dist/multi/config.d.ts.map +1 -1
- package/dist/multi/config.js +1 -0
- package/dist/multi/config.js.map +1 -1
- package/dist/multi/twoLanguageClients.d.ts.map +1 -1
- package/dist/multi/twoLanguageClients.js +49 -45
- package/dist/multi/twoLanguageClients.js.map +1 -1
- package/dist/node.d.ts +3 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +3 -3
- package/dist/node.js.map +1 -1
- package/dist/python/client/config.d.ts +3 -7
- package/dist/python/client/config.d.ts.map +1 -1
- package/dist/python/client/config.js +97 -93
- package/dist/python/client/config.js.map +1 -1
- package/dist/python/client/main.d.ts.map +1 -1
- package/dist/python/client/main.js +10 -16
- package/dist/python/client/main.js.map +1 -1
- package/dist/python/client/reactPython.d.ts.map +1 -1
- package/dist/python/client/reactPython.js +9 -8
- package/dist/python/client/reactPython.js.map +1 -1
- package/dist/ts/wrapperTs.d.ts.map +1 -1
- package/dist/ts/wrapperTs.js +45 -50
- package/dist/ts/wrapperTs.js.map +1 -1
- package/json.html +1 -1
- package/package.json +45 -44
- package/src/appPlayground/common.ts +3 -3
- package/src/appPlayground/config.ts +65 -69
- package/src/appPlayground/launcher.ts +1 -2
- package/src/appPlayground/main.ts +5 -8
- package/src/appPlayground/reactLauncher.ts +1 -2
- package/src/appPlayground/reactMain.tsx +4 -4
- package/src/bare/client.ts +16 -15
- package/src/browser/main.ts +27 -29
- package/src/clangd/client/config.ts +87 -97
- package/src/clangd/client/main.ts +10 -14
- package/src/clangd/worker/clangd-server.ts +2 -2
- package/src/common/client/utils.ts +2 -7
- package/src/debugger/client/debugger.ts +1 -1
- package/src/eclipse.jdt.ls/client/main.ts +78 -4
- package/src/eclipse.jdt.ls/config.ts +2 -6
- package/src/groovy/client/main.ts +65 -4
- package/src/groovy/config.ts +2 -6
- package/src/json/client/wrapperWs.ts +90 -0
- package/src/json/server/main.ts +1 -1
- package/src/langium/langium-dsl/config/classicConfig.ts +48 -64
- package/src/langium/langium-dsl/config/extendedConfig.ts +42 -49
- package/src/langium/langium-dsl/wrapperLangium.ts +15 -25
- package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +45 -48
- package/src/langium/statemachine/launcher.ts +1 -1
- package/src/langium/statemachine/ls/generated/ast.ts +131 -111
- package/src/langium/statemachine/ls/generated/grammar.ts +43 -41
- package/src/langium/statemachine/ls/generated/module.ts +6 -6
- package/src/langium/statemachine/ls/statemachine-module.ts +2 -2
- package/src/langium/statemachine/ls/statemachine.langium +20 -5
- package/src/langium/statemachine/main-react.tsx +4 -4
- package/src/langium/statemachine/main.ts +27 -43
- package/src/multi/config.ts +3 -3
- package/src/multi/twoLanguageClients.ts +52 -48
- package/src/node.ts +3 -3
- package/src/python/client/config.ts +99 -101
- package/src/python/client/main.ts +11 -20
- package/src/python/client/reactPython.tsx +10 -11
- package/src/ts/wrapperTs.ts +45 -52
- package/two_langauge_clients.html +1 -0
- package/dist/common/client/extendedClient.d.ts +0 -9
- package/dist/common/client/extendedClient.d.ts.map +0 -1
- package/dist/common/client/extendedClient.js +0 -97
- package/dist/common/client/extendedClient.js.map +0 -1
- package/dist/json/client/client.d.ts +0 -3
- package/dist/json/client/client.d.ts.map +0 -1
- package/dist/json/client/client.js +0 -13
- package/dist/json/client/client.js.map +0 -1
- package/dist/json/client/config.d.ts +0 -3
- package/dist/json/client/config.d.ts.map +0 -1
- package/dist/json/client/config.js +0 -11
- package/dist/json/client/config.js.map +0 -1
- package/src/common/client/extendedClient.ts +0 -111
- package/src/json/client/client.ts +0 -14
- package/src/json/client/config.ts +0 -13
package/src/bare/client.ts
CHANGED
|
@@ -3,22 +3,22 @@
|
|
|
3
3
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
-
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
7
6
|
import * as monaco from '@codingame/monaco-vscode-editor-api';
|
|
7
|
+
import { initServices } from 'monaco-languageclient/vscode/services';
|
|
8
8
|
import getTextmateServiceOverride from '@codingame/monaco-vscode-textmate-service-override';
|
|
9
9
|
import getThemeServiceOverride from '@codingame/monaco-vscode-theme-service-override';
|
|
10
|
-
import {
|
|
10
|
+
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
11
11
|
// monaco-editor does not supply json highlighting with the json worker,
|
|
12
12
|
// that's why we use the textmate extension from VSCode
|
|
13
13
|
import '@codingame/monaco-vscode-json-default-extension';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { ConsoleLogger } from 'monaco-languageclient/tools';
|
|
15
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
16
|
+
import { LanguageClientWrapper, type LanguageClientConfig } from 'monaco-editor-wrapper';
|
|
16
17
|
|
|
17
18
|
export const runClient = async () => {
|
|
19
|
+
const logger = new ConsoleLogger(LogLevel.Debug);
|
|
18
20
|
const htmlContainer = document.getElementById('monaco-editor-root')!;
|
|
19
|
-
|
|
20
|
-
$type: 'classic',
|
|
21
|
-
logLevel: LogLevel.Debug,
|
|
21
|
+
await initServices({
|
|
22
22
|
serviceOverrides: {
|
|
23
23
|
...getTextmateServiceOverride(),
|
|
24
24
|
...getThemeServiceOverride()
|
|
@@ -28,11 +28,9 @@ export const runClient = async () => {
|
|
|
28
28
|
'editor.experimental.asyncTokenization': true
|
|
29
29
|
})
|
|
30
30
|
},
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
|
|
35
|
-
await apiWrapper.init();
|
|
31
|
+
}, {
|
|
32
|
+
logger
|
|
33
|
+
});
|
|
36
34
|
|
|
37
35
|
// register the JSON language with Monaco
|
|
38
36
|
monaco.languages.register({
|
|
@@ -42,6 +40,8 @@ export const runClient = async () => {
|
|
|
42
40
|
mimetypes: ['application/json']
|
|
43
41
|
});
|
|
44
42
|
|
|
43
|
+
configureDefaultWorkerFactory(logger);
|
|
44
|
+
|
|
45
45
|
// create monaco editor
|
|
46
46
|
monaco.editor.create(htmlContainer, {
|
|
47
47
|
value: `{
|
|
@@ -64,9 +64,10 @@ export const runClient = async () => {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
|
-
const languageClientWrapper = new LanguageClientWrapper(
|
|
67
|
+
const languageClientWrapper = new LanguageClientWrapper({
|
|
68
68
|
languageClientConfig,
|
|
69
|
-
|
|
70
|
-
);
|
|
69
|
+
logger
|
|
70
|
+
});
|
|
71
|
+
|
|
71
72
|
await languageClientWrapper.start();
|
|
72
73
|
};
|
package/src/browser/main.ts
CHANGED
|
@@ -11,9 +11,8 @@ import { getLanguageService, TextDocument } from 'vscode-json-languageservice';
|
|
|
11
11
|
import { createConverter as createCodeConverter } from 'vscode-languageclient/lib/common/codeConverter.js';
|
|
12
12
|
import { createConverter as createProtocolConverter } from 'vscode-languageclient/lib/common/protocolConverter.js';
|
|
13
13
|
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
14
|
-
import {
|
|
15
|
-
import { configureDefaultWorkerFactory } from 'monaco-
|
|
16
|
-
import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
14
|
+
import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
|
|
15
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
17
16
|
|
|
18
17
|
export const runBrowserEditor = async () => {
|
|
19
18
|
const codeConverter = createCodeConverter();
|
|
@@ -28,36 +27,35 @@ export const runBrowserEditor = async () => {
|
|
|
28
27
|
}`;
|
|
29
28
|
const codeUri = '/workspace/model.json';
|
|
30
29
|
|
|
31
|
-
const
|
|
30
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
31
|
+
const jsonClientUserConfig: WrapperConfig = {
|
|
32
32
|
$type: 'extended',
|
|
33
33
|
htmlContainer,
|
|
34
34
|
logLevel: LogLevel.Debug,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
47
|
-
};
|
|
48
|
-
const editorAppConfig: EditorAppConfig = {
|
|
49
|
-
$type: vscodeApiConfig.$type,
|
|
50
|
-
codeResources: {
|
|
51
|
-
modified: {
|
|
52
|
-
text: code,
|
|
53
|
-
uri: codeUri
|
|
35
|
+
vscodeApiConfig: {
|
|
36
|
+
serviceOverrides: {
|
|
37
|
+
...getKeybindingsServiceOverride(),
|
|
38
|
+
},
|
|
39
|
+
userConfiguration: {
|
|
40
|
+
json: JSON.stringify({
|
|
41
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
42
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
43
|
+
'editor.lightbulb.enabled': 'On',
|
|
44
|
+
'editor.experimental.asyncTokenization': true
|
|
45
|
+
})
|
|
54
46
|
}
|
|
47
|
+
},
|
|
48
|
+
editorAppConfig: {
|
|
49
|
+
codeResources: {
|
|
50
|
+
modified: {
|
|
51
|
+
text: code,
|
|
52
|
+
uri: codeUri
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
55
56
|
}
|
|
56
57
|
};
|
|
57
|
-
|
|
58
|
-
await apiWrapper.init();
|
|
59
|
-
|
|
60
|
-
const editorApp = new EditorApp(editorAppConfig);
|
|
58
|
+
await wrapper.init(jsonClientUserConfig);
|
|
61
59
|
|
|
62
60
|
vscode.workspace.onDidOpenTextDocument((_event) => {
|
|
63
61
|
mainVscodeDocument = _event;
|
|
@@ -157,9 +155,9 @@ export const runBrowserEditor = async () => {
|
|
|
157
155
|
diagnosticCollection.clear();
|
|
158
156
|
};
|
|
159
157
|
|
|
160
|
-
await
|
|
158
|
+
await wrapper.start();
|
|
161
159
|
|
|
162
|
-
|
|
160
|
+
wrapper.getTextModels()?.modified?.onDidChangeContent(() => {
|
|
163
161
|
validate();
|
|
164
162
|
});
|
|
165
163
|
};
|
|
@@ -3,91 +3,113 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
|
|
8
|
-
import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
|
|
6
|
+
import { Uri } from 'vscode';
|
|
9
7
|
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
|
|
10
8
|
import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
|
|
11
|
-
import getRemoteAgentServiceOverride from '@codingame/monaco-vscode-remote-agent-service-override';
|
|
12
|
-
import getSecretStorageServiceOverride from '@codingame/monaco-vscode-secret-storage-service-override';
|
|
13
9
|
import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
|
|
14
10
|
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
|
|
15
11
|
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import {
|
|
12
|
+
import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
|
|
13
|
+
import getRemoteAgentServiceOverride from '@codingame/monaco-vscode-remote-agent-service-override';
|
|
14
|
+
import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
|
|
15
|
+
import getSecretStorageServiceOverride from '@codingame/monaco-vscode-secret-storage-service-override';
|
|
16
|
+
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
17
|
+
import type { WrapperConfig } from 'monaco-editor-wrapper';
|
|
18
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
19
|
+
import { defaultHtmlAugmentationInstructions, defaultViewsInit } from 'monaco-editor-wrapper/vscode/services';
|
|
21
20
|
import { ClangdWorkerHandler } from './workerHandler.js';
|
|
22
21
|
|
|
23
|
-
export
|
|
24
|
-
languageClientConfig: LanguageClientConfig;
|
|
25
|
-
vscodeApiConfig: MonacoVscodeApiConfig;
|
|
26
|
-
editorAppConfig: EditorAppConfig;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const createClangdAppConfig = async (config: {
|
|
22
|
+
export const createWrapperConfig = async (config: {
|
|
30
23
|
htmlContainer: HTMLElement,
|
|
31
24
|
workspaceUri: Uri,
|
|
32
25
|
workspaceFileUri: Uri,
|
|
33
26
|
clangdWorkerHandler: ClangdWorkerHandler,
|
|
34
27
|
lsMessageLocalPort: MessagePort
|
|
35
|
-
}): Promise<
|
|
36
|
-
|
|
28
|
+
}): Promise<WrapperConfig> => {
|
|
29
|
+
return {
|
|
37
30
|
$type: 'extended',
|
|
38
31
|
htmlContainer: config.htmlContainer,
|
|
39
32
|
logLevel: LogLevel.Debug,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
33
|
+
languageClientConfigs: {
|
|
34
|
+
configs: {
|
|
35
|
+
LANGUAGE_ID: {
|
|
36
|
+
name: 'Clangd WASM Language Server',
|
|
37
|
+
connection: {
|
|
38
|
+
options: {
|
|
39
|
+
$type: 'WorkerDirect',
|
|
40
|
+
worker: await config.clangdWorkerHandler.createWorker(),
|
|
41
|
+
messagePort: config.lsMessageLocalPort
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
restartOptions: {
|
|
45
|
+
retries: 5,
|
|
46
|
+
timeout: 1000,
|
|
47
|
+
keepWorker: true
|
|
48
|
+
},
|
|
49
|
+
clientOptions: {
|
|
50
|
+
documentSelector: ['cpp'],
|
|
51
|
+
workspaceFolder: {
|
|
52
|
+
index: 0,
|
|
53
|
+
name: 'workspace',
|
|
54
|
+
uri: config.workspaceUri
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
55
59
|
},
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
vscodeApiConfig: {
|
|
61
|
+
serviceOverrides: {
|
|
62
|
+
...getKeybindingsServiceOverride(),
|
|
63
|
+
...getLifecycleServiceOverride(),
|
|
64
|
+
...getBannerServiceOverride(),
|
|
65
|
+
...getStatusBarServiceOverride(),
|
|
66
|
+
...getTitleBarServiceOverride(),
|
|
67
|
+
...getExplorerServiceOverride(),
|
|
68
|
+
...getRemoteAgentServiceOverride(),
|
|
69
|
+
...getEnvironmentServiceOverride(),
|
|
70
|
+
...getSecretStorageServiceOverride()
|
|
62
71
|
},
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
viewsConfig: {
|
|
73
|
+
viewServiceType: 'ViewsService',
|
|
74
|
+
htmlAugmentationInstructions: defaultHtmlAugmentationInstructions,
|
|
75
|
+
viewsInitFunc: defaultViewsInit
|
|
76
|
+
},
|
|
77
|
+
workspaceConfig: {
|
|
78
|
+
enableWorkspaceTrust: true,
|
|
79
|
+
windowIndicator: {
|
|
80
|
+
label: 'mlc-clangd-example',
|
|
81
|
+
tooltip: '',
|
|
82
|
+
command: ''
|
|
68
83
|
},
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
workspaceProvider: {
|
|
85
|
+
trusted: true,
|
|
86
|
+
async open() {
|
|
87
|
+
window.open(window.location.href);
|
|
88
|
+
return true;
|
|
89
|
+
},
|
|
90
|
+
workspace: {
|
|
91
|
+
workspaceUri: config.workspaceFileUri
|
|
92
|
+
},
|
|
71
93
|
},
|
|
94
|
+
configurationDefaults: {
|
|
95
|
+
'window.title': 'mlc-clangd-exampled${separator}${dirty}${activeEditorShort}'
|
|
96
|
+
},
|
|
97
|
+
productConfiguration: {
|
|
98
|
+
nameShort: 'mlc-clangd-example',
|
|
99
|
+
nameLong: 'mlc-clangd-example'
|
|
100
|
+
}
|
|
72
101
|
},
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
102
|
+
userConfiguration: {
|
|
103
|
+
json: JSON.stringify({
|
|
104
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
105
|
+
'editor.wordBasedSuggestions': 'off',
|
|
106
|
+
'editor.guides.bracketPairsHorizontal': true,
|
|
107
|
+
'editor.inlayHints.enabled': 'offUnlessPressed',
|
|
108
|
+
'editor.quickSuggestionsDelay': 200,
|
|
109
|
+
'editor.experimental.asyncTokenization': false
|
|
110
|
+
})
|
|
79
111
|
}
|
|
80
112
|
},
|
|
81
|
-
userConfiguration: {
|
|
82
|
-
json: JSON.stringify({
|
|
83
|
-
'workbench.colorTheme': 'Default Dark Modern',
|
|
84
|
-
'editor.wordBasedSuggestions': 'off',
|
|
85
|
-
'editor.guides.bracketPairsHorizontal': true,
|
|
86
|
-
'editor.inlayHints.enabled': 'offUnlessPressed',
|
|
87
|
-
'editor.quickSuggestionsDelay': 200,
|
|
88
|
-
'editor.experimental.asyncTokenization': false
|
|
89
|
-
})
|
|
90
|
-
},
|
|
91
113
|
extensions: [{
|
|
92
114
|
config: {
|
|
93
115
|
name: 'mlc-clangd-example',
|
|
@@ -98,40 +120,8 @@ export const createClangdAppConfig = async (config: {
|
|
|
98
120
|
}
|
|
99
121
|
}
|
|
100
122
|
}],
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const languageClientConfig: LanguageClientConfig = {
|
|
105
|
-
name: 'Clangd WASM Language Server',
|
|
106
|
-
connection: {
|
|
107
|
-
options: {
|
|
108
|
-
$type: 'WorkerDirect',
|
|
109
|
-
worker: await config.clangdWorkerHandler.createWorker(),
|
|
110
|
-
messagePort: config.lsMessageLocalPort
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
restartOptions: {
|
|
114
|
-
retries: 5,
|
|
115
|
-
timeout: 1000,
|
|
116
|
-
keepWorker: true
|
|
117
|
-
},
|
|
118
|
-
clientOptions: {
|
|
119
|
-
documentSelector: ['cpp'],
|
|
120
|
-
workspaceFolder: {
|
|
121
|
-
index: 0,
|
|
122
|
-
name: 'workspace',
|
|
123
|
-
uri: config.workspaceUri
|
|
124
|
-
}
|
|
123
|
+
editorAppConfig: {
|
|
124
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
125
125
|
}
|
|
126
126
|
};
|
|
127
|
-
|
|
128
|
-
const editorAppConfig: EditorAppConfig = {
|
|
129
|
-
$type: vscodeApiConfig.$type
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
vscodeApiConfig,
|
|
134
|
-
languageClientConfig,
|
|
135
|
-
editorAppConfig
|
|
136
|
-
};
|
|
137
127
|
};
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
-
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
|
|
7
6
|
import * as vscode from 'vscode';
|
|
7
|
+
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
|
|
8
8
|
// this is required syntax highlighting
|
|
9
9
|
import '@codingame/monaco-vscode-cpp-default-extension';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
11
|
+
import { createWrapperConfig } from './config.js';
|
|
12
|
+
import { ClangdWorkerHandler } from './workerHandler.js';
|
|
13
|
+
import { MainRemoteMessageChannelFs } from './mainRemoteMessageChannelFs.js';
|
|
12
14
|
import { createDefaultWorkspaceContent, disableElement } from '../../common/client/utils.js';
|
|
13
15
|
import { HOME_DIR, WORKSPACE_PATH } from '../definitions.js';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import { ClangdWorkerHandler } from './workerHandler.js';
|
|
16
|
+
|
|
17
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
17
18
|
|
|
18
19
|
export const runClangdWrapper = async () => {
|
|
19
20
|
const channelLs = new MessageChannel();
|
|
@@ -31,7 +32,7 @@ export const runClangdWrapper = async () => {
|
|
|
31
32
|
new MainRemoteMessageChannelFs(fileSystemProvider, channelFs.port1, readiness);
|
|
32
33
|
|
|
33
34
|
const clangdWorkerHandler = new ClangdWorkerHandler();
|
|
34
|
-
const
|
|
35
|
+
const wrapperConfig = await createWrapperConfig({
|
|
35
36
|
htmlContainer: document.body,
|
|
36
37
|
workspaceUri: vscode.Uri.file(WORKSPACE_PATH),
|
|
37
38
|
workspaceFileUri,
|
|
@@ -39,12 +40,7 @@ export const runClangdWrapper = async () => {
|
|
|
39
40
|
lsMessageLocalPort: channelLs.port1
|
|
40
41
|
});
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
|
|
44
|
-
await apiWrapper.init();
|
|
45
|
-
|
|
46
|
-
const lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
|
|
47
|
-
|
|
43
|
+
await wrapper.init(wrapperConfig);
|
|
48
44
|
const initConfig = {
|
|
49
45
|
lsMessagePort: channelLs.port2,
|
|
50
46
|
fsMessagePort: channelFs.port2,
|
|
@@ -57,7 +53,7 @@ export const runClangdWrapper = async () => {
|
|
|
57
53
|
const startWrapper = async () => {
|
|
58
54
|
await clangdWorkerHandler.init(initConfig);
|
|
59
55
|
await clangdWorkerHandler.launch();
|
|
60
|
-
await
|
|
56
|
+
await wrapper.startLanguageClients();
|
|
61
57
|
};
|
|
62
58
|
|
|
63
59
|
try {
|
|
@@ -104,7 +104,7 @@ export class ClangdInteractionWorker implements ComRouter {
|
|
|
104
104
|
// Pre-fetch wasm file
|
|
105
105
|
const wasmReader = (await fetch(clangdWasmUrl)).body!.getReader();
|
|
106
106
|
|
|
107
|
-
const chunks:
|
|
107
|
+
const chunks: BlobPart[] = [];
|
|
108
108
|
let loadingComplete = false;
|
|
109
109
|
while (!loadingComplete) {
|
|
110
110
|
const { done, value } = await wasmReader.read();
|
|
@@ -446,7 +446,7 @@ export class ClangdInteractionWorker implements ComRouter {
|
|
|
446
446
|
const content = this.emscriptenFS.readFile(filename, { encoding: 'binary' });
|
|
447
447
|
allPromises.push(this.remoteFs.syncFile({
|
|
448
448
|
resourceUri: filename,
|
|
449
|
-
content: content
|
|
449
|
+
content: content as unknown as ArrayBufferLike
|
|
450
450
|
}));
|
|
451
451
|
|
|
452
452
|
} catch (e) {
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
6
|
import type { IStoredWorkspace } from '@codingame/monaco-vscode-configuration-service-override';
|
|
7
|
-
import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
|
|
8
|
-
import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
|
|
9
|
-
import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
10
7
|
|
|
11
8
|
export const disableElement = (id: string, disabled: boolean) => {
|
|
12
9
|
const button = document.getElementById(id) as HTMLButtonElement | HTMLInputElement | null;
|
|
@@ -29,8 +26,6 @@ export const createDefaultWorkspaceContent = (workspacePath: string) => {
|
|
|
29
26
|
);
|
|
30
27
|
};
|
|
31
28
|
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
languageClientConfig: LanguageClientConfig;
|
|
35
|
-
editorAppConfig: EditorAppConfig;
|
|
29
|
+
export const delayExecution = (ms: number) => {
|
|
30
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
36
31
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
6
|
import * as vscode from 'vscode';
|
|
7
|
-
import type { ExtensionConfig } from 'monaco-
|
|
7
|
+
import type { ExtensionConfig } from 'monaco-editor-wrapper';
|
|
8
8
|
import type { ConfigParams, InitMessage } from '../common/definitions.js';
|
|
9
9
|
|
|
10
10
|
// This is derived from:
|
|
@@ -3,12 +3,86 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
+
import * as vscode from 'vscode';
|
|
7
|
+
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
|
|
8
|
+
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
|
|
6
9
|
// this is required syntax highlighting
|
|
7
10
|
import '@codingame/monaco-vscode-java-default-extension';
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
11
|
+
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
12
|
+
import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
|
|
13
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
10
14
|
import { eclipseJdtLsConfig } from '../config.js';
|
|
15
|
+
import helloJavaCode from '../../../resources/eclipse.jdt.ls/workspace/hello.java?raw';
|
|
16
|
+
|
|
17
|
+
export const runEclipseJdtLsClient = () => {
|
|
18
|
+
const helloJavaUri = vscode.Uri.file(`${eclipseJdtLsConfig.basePath}/workspace/hello.java`);
|
|
19
|
+
const fileSystemProvider = new RegisteredFileSystemProvider(false);
|
|
20
|
+
fileSystemProvider.registerFile(new RegisteredMemoryFile(helloJavaUri, helloJavaCode));
|
|
21
|
+
registerFileSystemOverlay(1, fileSystemProvider);
|
|
22
|
+
|
|
23
|
+
const wrapperConfig: WrapperConfig = {
|
|
24
|
+
$type: 'extended',
|
|
25
|
+
htmlContainer: document.getElementById('monaco-editor-root')!,
|
|
26
|
+
logLevel: LogLevel.Debug,
|
|
27
|
+
vscodeApiConfig: {
|
|
28
|
+
serviceOverrides: {
|
|
29
|
+
...getKeybindingsServiceOverride(),
|
|
30
|
+
},
|
|
31
|
+
userConfiguration: {
|
|
32
|
+
json: JSON.stringify({
|
|
33
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
34
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
35
|
+
'editor.wordBasedSuggestions': 'off',
|
|
36
|
+
'editor.experimental.asyncTokenization': true
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
editorAppConfig: {
|
|
41
|
+
codeResources: {
|
|
42
|
+
modified: {
|
|
43
|
+
text: helloJavaCode,
|
|
44
|
+
uri: `${eclipseJdtLsConfig.basePath}/workspace/hello.java`
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
48
|
+
},
|
|
49
|
+
languageClientConfigs: {
|
|
50
|
+
configs: {
|
|
51
|
+
java: {
|
|
52
|
+
connection: {
|
|
53
|
+
options: {
|
|
54
|
+
$type: 'WebSocketUrl',
|
|
55
|
+
url: 'ws://localhost:30003/jdtls'
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
clientOptions: {
|
|
59
|
+
documentSelector: ['java'],
|
|
60
|
+
workspaceFolder: {
|
|
61
|
+
index: 0,
|
|
62
|
+
name: 'workspace',
|
|
63
|
+
uri: vscode.Uri.parse(`${eclipseJdtLsConfig.basePath}/workspace`)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
document.querySelector('#button-start')?.addEventListener('click', async () => {
|
|
75
|
+
await wrapper.init(wrapperConfig);
|
|
76
|
+
|
|
77
|
+
// open files, so the LS can pick it up
|
|
78
|
+
await vscode.workspace.openTextDocument(helloJavaUri);
|
|
11
79
|
|
|
12
|
-
|
|
13
|
-
|
|
80
|
+
await wrapper.start();
|
|
81
|
+
});
|
|
82
|
+
document.querySelector('#button-dispose')?.addEventListener('click', async () => {
|
|
83
|
+
await wrapper.dispose();
|
|
84
|
+
});
|
|
85
|
+
} catch (e) {
|
|
86
|
+
console.error(e);
|
|
87
|
+
}
|
|
14
88
|
};
|
|
@@ -2,12 +2,8 @@
|
|
|
2
2
|
* Copyright (c) 2024 TypeFox and others.
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
|
-
|
|
6
|
-
import type { ExampleLsConfig } from '../common/client/extendedClient.js';
|
|
7
|
-
|
|
8
|
-
export const eclipseJdtLsConfig: ExampleLsConfig = {
|
|
5
|
+
export const eclipseJdtLsConfig = {
|
|
9
6
|
port: 30003,
|
|
10
7
|
path: '/jdtls',
|
|
11
|
-
basePath: '/home/mlc/packages/examples/resources/eclipse.jdt.ls'
|
|
12
|
-
documentSelector: 'java'
|
|
8
|
+
basePath: '/home/mlc/packages/examples/resources/eclipse.jdt.ls'
|
|
13
9
|
};
|
|
@@ -3,12 +3,73 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
+
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
|
|
6
7
|
// this is required syntax highlighting
|
|
7
8
|
import '@codingame/monaco-vscode-groovy-default-extension';
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
9
|
+
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
10
|
+
import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
|
|
11
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
10
12
|
import { groovyConfig } from '../config.js';
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
const code = `package test.org;
|
|
15
|
+
import java.io.File;
|
|
16
|
+
File file = new File("E:/Example.txt");
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
const wrapperConfig: WrapperConfig = {
|
|
20
|
+
$type: 'extended',
|
|
21
|
+
htmlContainer: document.getElementById('monaco-editor-root')!,
|
|
22
|
+
logLevel: LogLevel.Debug,
|
|
23
|
+
vscodeApiConfig: {
|
|
24
|
+
serviceOverrides: {
|
|
25
|
+
...getKeybindingsServiceOverride(),
|
|
26
|
+
},
|
|
27
|
+
userConfiguration: {
|
|
28
|
+
json: JSON.stringify({
|
|
29
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
30
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
31
|
+
'editor.wordBasedSuggestions': 'off',
|
|
32
|
+
'editor.experimental.asyncTokenization': true
|
|
33
|
+
})
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
editorAppConfig: {
|
|
37
|
+
codeResources: {
|
|
38
|
+
modified: {
|
|
39
|
+
text: code,
|
|
40
|
+
uri: '/workspace/test.groovy'
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
44
|
+
},
|
|
45
|
+
languageClientConfigs: {
|
|
46
|
+
configs: {
|
|
47
|
+
groovy: {
|
|
48
|
+
clientOptions: {
|
|
49
|
+
documentSelector: ['groovy']
|
|
50
|
+
},
|
|
51
|
+
connection: {
|
|
52
|
+
options: {
|
|
53
|
+
$type: 'WebSocketUrl',
|
|
54
|
+
url: `ws://localhost:${groovyConfig.port}${groovyConfig.path}`
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const runGroovyClient = () => {
|
|
63
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
document.querySelector('#button-start')?.addEventListener('click', async () => {
|
|
67
|
+
await wrapper.initAndStart(wrapperConfig);
|
|
68
|
+
});
|
|
69
|
+
document.querySelector('#button-dispose')?.addEventListener('click', async () => {
|
|
70
|
+
await wrapper.dispose();
|
|
71
|
+
});
|
|
72
|
+
} catch (e) {
|
|
73
|
+
console.error(e);
|
|
74
|
+
}
|
|
14
75
|
};
|