monaco-languageclient-examples 2025.6.3 → 2025.8.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 +8 -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
|
@@ -5,26 +5,22 @@
|
|
|
5
5
|
|
|
6
6
|
import * as vscode from 'vscode';
|
|
7
7
|
import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
|
|
8
|
-
import {
|
|
8
|
+
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
9
9
|
import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
|
|
10
10
|
import workerUrl from './worker/statemachine-server?worker&url';
|
|
11
11
|
import workerPortUrl from './worker/statemachine-server-port?worker&url';
|
|
12
12
|
import text from '../../../resources/langium/statemachine/example.statemachine?raw';
|
|
13
13
|
import textMod from '../../../resources/langium/statemachine/example-mod.statemachine?raw';
|
|
14
|
-
import { disableElement } from '../../common/client/utils.js';
|
|
15
|
-
import { delayExecution } from 'monaco-languageclient/common';
|
|
16
|
-
import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
|
|
17
|
-
import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
|
|
14
|
+
import { delayExecution, disableElement } from '../../common/client/utils.js';
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
let lcWrapper: LanguageClientWrapper;
|
|
16
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
17
|
+
const wrapper2 = new MonacoEditorLanguageClientWrapper();
|
|
22
18
|
|
|
23
19
|
const startEditor = async () => {
|
|
24
20
|
disableElement('button-start', true);
|
|
25
21
|
disableElement('button-dispose', false);
|
|
26
22
|
|
|
27
|
-
if (
|
|
23
|
+
if (wrapper.isStarted() && wrapper2.isStarted()) {
|
|
28
24
|
alert('Editor was already started!');
|
|
29
25
|
return;
|
|
30
26
|
}
|
|
@@ -47,49 +43,39 @@ const startEditor = async () => {
|
|
|
47
43
|
});
|
|
48
44
|
|
|
49
45
|
// the configuration does not contain any text content
|
|
50
|
-
const
|
|
46
|
+
const langiumGlobalConfig = createLangiumGlobalConfig({
|
|
51
47
|
languageServerId: 'first',
|
|
52
48
|
codeContent: {
|
|
53
49
|
text,
|
|
54
50
|
uri: '/workspace/example.statemachine'
|
|
55
51
|
},
|
|
52
|
+
useLanguageClient: true,
|
|
56
53
|
worker: stateMachineWorkerPort,
|
|
57
54
|
messagePort: channel.port1,
|
|
58
55
|
messageTransports: { reader, writer },
|
|
59
56
|
htmlContainer: document.getElementById('monaco-editor-root')!
|
|
60
57
|
});
|
|
61
|
-
|
|
58
|
+
await wrapper.initAndStart(langiumGlobalConfig);
|
|
62
59
|
|
|
63
|
-
|
|
64
|
-
const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
|
|
65
|
-
await apiWrapper.init();
|
|
66
|
-
|
|
67
|
-
// init language client
|
|
68
|
-
lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
|
|
69
|
-
await lcWrapper.start();
|
|
70
|
-
|
|
71
|
-
// run editorApp
|
|
72
|
-
await editorApp.start(appConfig.vscodeApiConfig.htmlContainer!);
|
|
73
|
-
|
|
74
|
-
editorApp.updateCodeResources({
|
|
60
|
+
wrapper.updateCodeResources({
|
|
75
61
|
modified: {
|
|
76
62
|
text,
|
|
77
63
|
uri: '/workspace/statemachine-mod.statemachine'
|
|
78
64
|
}
|
|
79
65
|
});
|
|
80
66
|
|
|
81
|
-
// start the second
|
|
67
|
+
// start the second wrapper without any languageclient config
|
|
82
68
|
// => they share the language server and both text contents have different uris
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
await
|
|
69
|
+
const langiumGlobalConfig2 = createLangiumGlobalConfig({
|
|
70
|
+
languageServerId: 'second',
|
|
71
|
+
useLanguageClient: false,
|
|
72
|
+
codeContent: {
|
|
73
|
+
text: textMod,
|
|
74
|
+
uri: '/workspace/example-mod.statemachine'
|
|
75
|
+
},
|
|
76
|
+
htmlContainer: document.getElementById('monaco-editor-root2')!
|
|
77
|
+
});
|
|
78
|
+
await wrapper2.initAndStart(langiumGlobalConfig2);
|
|
93
79
|
|
|
94
80
|
vscode.commands.getCommands().then((x) => {
|
|
95
81
|
console.log('Currently registered # of vscode commands: ' + x.length);
|
|
@@ -97,7 +83,7 @@ const startEditor = async () => {
|
|
|
97
83
|
|
|
98
84
|
await delayExecution(1000);
|
|
99
85
|
|
|
100
|
-
|
|
86
|
+
wrapper.updateCodeResources({
|
|
101
87
|
modified: {
|
|
102
88
|
text: `// modified file\n\n${text}`,
|
|
103
89
|
uri: '/workspace/statemachine-mod2.statemachine'
|
|
@@ -109,15 +95,13 @@ const disposeEditor = async () => {
|
|
|
109
95
|
disableElement('button-start', false);
|
|
110
96
|
disableElement('button-dispose', true);
|
|
111
97
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
await editorApp?.dispose();
|
|
116
|
-
console.log(editorApp?.reportStatus().join('\n'));
|
|
98
|
+
wrapper.reportStatus();
|
|
99
|
+
await wrapper.dispose();
|
|
100
|
+
console.log(wrapper.reportStatus().join('\n'));
|
|
117
101
|
|
|
118
|
-
|
|
119
|
-
await
|
|
120
|
-
console.log(
|
|
102
|
+
wrapper2.reportStatus();
|
|
103
|
+
await wrapper2.dispose();
|
|
104
|
+
console.log(wrapper2.reportStatus().join('\n'));
|
|
121
105
|
};
|
|
122
106
|
|
|
123
107
|
export const runStatemachineWrapper = async () => {
|
package/src/multi/config.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
6
|
import * as vscode from 'vscode';
|
|
7
|
-
import
|
|
8
|
-
import type {
|
|
7
|
+
import { MonacoLanguageClient } from 'monaco-languageclient';
|
|
8
|
+
import type { LanguageClientConfig } from 'monaco-editor-wrapper';
|
|
9
9
|
|
|
10
10
|
export const createJsonLanguageClientConfig: () => LanguageClientConfig = () => {
|
|
11
11
|
return {
|
|
@@ -38,7 +38,7 @@ export const createPythonLanguageClientConfig: () => LanguageClientConfig = () =
|
|
|
38
38
|
authorization: 'UserAuth'
|
|
39
39
|
},
|
|
40
40
|
startOptions: {
|
|
41
|
-
onCall: (languageClient?:
|
|
41
|
+
onCall: (languageClient?: MonacoLanguageClient) => {
|
|
42
42
|
setTimeout(() => {
|
|
43
43
|
['pyright.restartserver', 'pyright.organizeimports'].forEach((cmdName) => {
|
|
44
44
|
vscode.commands.registerCommand(cmdName, (...args: unknown[]) => {
|
|
@@ -9,12 +9,10 @@ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-
|
|
|
9
9
|
import '@codingame/monaco-vscode-json-default-extension';
|
|
10
10
|
import '@codingame/monaco-vscode-python-default-extension';
|
|
11
11
|
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
12
|
-
import {
|
|
13
|
-
import { configureDefaultWorkerFactory } from 'monaco-
|
|
12
|
+
import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
|
|
13
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
14
14
|
import { disableElement } from '../common/client/utils.js';
|
|
15
15
|
import { createJsonLanguageClientConfig, createPythonLanguageClientConfig } from './config.js';
|
|
16
|
-
import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
17
|
-
import { LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
|
|
18
16
|
|
|
19
17
|
export const runMultipleLanguageClientsExample = async () => {
|
|
20
18
|
disableElement('button-flip', true);
|
|
@@ -33,63 +31,64 @@ print("Hello Moon!")
|
|
|
33
31
|
let currentText = textJson;
|
|
34
32
|
let currenFileExt = 'json';
|
|
35
33
|
|
|
36
|
-
const
|
|
37
|
-
|
|
34
|
+
const wrapperConfig: WrapperConfig = {
|
|
35
|
+
id: '42',
|
|
38
36
|
$type: 'extended',
|
|
39
|
-
htmlContainer
|
|
37
|
+
htmlContainer: document.getElementById('monaco-editor-root')!,
|
|
40
38
|
logLevel: LogLevel.Debug,
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
vscodeApiConfig: {
|
|
40
|
+
serviceOverrides: {
|
|
41
|
+
...getKeybindingsServiceOverride()
|
|
42
|
+
},
|
|
43
|
+
userConfiguration: {
|
|
44
|
+
json: JSON.stringify({
|
|
45
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
46
|
+
'editor.wordBasedSuggestions': 'off',
|
|
47
|
+
'editor.experimental.asyncTokenization': true
|
|
48
|
+
})
|
|
49
|
+
}
|
|
43
50
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
editorAppConfig: {
|
|
52
|
+
codeResources: {
|
|
53
|
+
modified: {
|
|
54
|
+
text: currentText,
|
|
55
|
+
uri: `/workspace/example.${currenFileExt}`
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
50
59
|
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
$type: vscodeApiConfig.$type,
|
|
56
|
-
id: '42',
|
|
57
|
-
codeResources: {
|
|
58
|
-
modified: {
|
|
59
|
-
text: currentText,
|
|
60
|
-
uri: `/workspace/example.${currenFileExt}`
|
|
60
|
+
languageClientConfigs: {
|
|
61
|
+
configs: {
|
|
62
|
+
json: createJsonLanguageClientConfig(),
|
|
63
|
+
python: createPythonLanguageClientConfig()
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
};
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
|
|
67
|
-
await apiWrapper.init();
|
|
68
|
-
|
|
69
|
-
const lcManager = new LanguageClientsManager();
|
|
70
|
-
const languageClientConfigs = {
|
|
71
|
-
configs: {
|
|
72
|
-
json: createJsonLanguageClientConfig(),
|
|
73
|
-
python: createPythonLanguageClientConfig()
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const editorApp = new EditorApp(editorAppConfig);
|
|
68
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
78
69
|
|
|
79
70
|
document.querySelector('#button-start')?.addEventListener('click', async () => {
|
|
80
71
|
try {
|
|
81
72
|
disableElement('button-start', true);
|
|
82
73
|
disableElement('button-flip', false);
|
|
74
|
+
disableElement('checkbox-extlc', true);
|
|
75
|
+
|
|
76
|
+
const externalLc = (document.getElementById('checkbox-extlc') as HTMLInputElement).checked;
|
|
77
|
+
wrapperConfig.languageClientConfigs!.automaticallyInit = !externalLc;
|
|
78
|
+
wrapperConfig.languageClientConfigs!.automaticallyStart = !externalLc;
|
|
79
|
+
wrapperConfig.languageClientConfigs!.automaticallyDispose = !externalLc;
|
|
83
80
|
|
|
84
|
-
await
|
|
85
|
-
if (editorAppConfig
|
|
86
|
-
editorAppConfig.codeResources.modified.text = currentText;
|
|
87
|
-
editorAppConfig.codeResources.modified.uri = `/workspace/example.${currenFileExt}`;
|
|
81
|
+
await wrapper.initAndStart(wrapperConfig);
|
|
82
|
+
if (wrapperConfig.editorAppConfig?.codeResources?.modified !== undefined) {
|
|
83
|
+
wrapperConfig.editorAppConfig.codeResources.modified.text = currentText;
|
|
84
|
+
wrapperConfig.editorAppConfig.codeResources.modified.uri = `/workspace/example.${currenFileExt}`;
|
|
88
85
|
}
|
|
89
86
|
|
|
90
|
-
// init
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
// init language clients after start
|
|
88
|
+
if (externalLc) {
|
|
89
|
+
wrapper.initLanguageClients();
|
|
90
|
+
await wrapper.startLanguageClients();
|
|
91
|
+
}
|
|
93
92
|
} catch (e) {
|
|
94
93
|
console.error(e);
|
|
95
94
|
}
|
|
@@ -99,13 +98,18 @@ print("Hello Moon!")
|
|
|
99
98
|
disableElement('button-dispose', true);
|
|
100
99
|
disableElement('button-start', false);
|
|
101
100
|
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
const externalLc = (document.getElementById('checkbox-extlc')! as HTMLInputElement).checked;
|
|
102
|
+
|
|
103
|
+
await wrapper.dispose();
|
|
104
|
+
|
|
105
|
+
if (externalLc) {
|
|
106
|
+
wrapper.disposeLanguageClients();
|
|
107
|
+
}
|
|
104
108
|
});
|
|
105
109
|
document.querySelector('#button-flip')?.addEventListener('click', async () => {
|
|
106
110
|
currentText = currentText === textJson ? textPython : textJson;
|
|
107
111
|
currenFileExt = currenFileExt === 'json' ? 'py' : 'json';
|
|
108
|
-
|
|
112
|
+
wrapper.updateCodeResources({
|
|
109
113
|
modified: {
|
|
110
114
|
text: currentText,
|
|
111
115
|
uri: `/workspace/example.${currenFileExt}`
|
package/src/node.ts
CHANGED
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
/* server side export only */
|
|
7
7
|
export * from './common/node/server-commons.js';
|
|
8
8
|
export * from './common/node/language-server-runner.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
export * from './json/server/json-server.js';
|
|
10
|
+
export * from './json/server/main.js';
|
|
11
|
+
export * from './python/server/main.js';
|
|
@@ -21,14 +21,13 @@ import getTestingServiceOverride from '@codingame/monaco-vscode-testing-service-
|
|
|
21
21
|
import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
|
|
22
22
|
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
|
|
23
23
|
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
|
|
24
|
-
import type {
|
|
25
|
-
import {
|
|
26
|
-
import
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
24
|
+
import type { WrapperConfig } from 'monaco-editor-wrapper';
|
|
25
|
+
import { defaultHtmlAugmentationInstructions, defaultViewsInit } from 'monaco-editor-wrapper/vscode/services';
|
|
26
|
+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
|
|
27
|
+
import { MonacoLanguageClient } from 'monaco-languageclient';
|
|
28
|
+
import { createUrl } from 'monaco-languageclient/tools';
|
|
29
|
+
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
|
|
30
30
|
import * as vscode from 'vscode';
|
|
31
|
-
import type { BaseLanguageClient } from 'vscode-languageclient/browser.js';
|
|
32
31
|
import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
|
|
33
32
|
import badPyCode from '../../../resources/python/bad.py?raw';
|
|
34
33
|
import helloPyCode from '../../../resources/python/hello.py?raw';
|
|
@@ -68,7 +67,7 @@ export const createDefaultConfigParams = (homeDir: string, htmlContainer?: HTMLE
|
|
|
68
67
|
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('hello.py')!.uri, helloPyCode));
|
|
69
68
|
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('hello2.py')!.uri, hello2PyCode));
|
|
70
69
|
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('bad.py')!.uri, badPyCode));
|
|
71
|
-
fileSystemProvider.registerFile(new RegisteredMemoryFile(configParams.workspaceFile, createDefaultWorkspaceContent(workspaceRoot)));
|
|
70
|
+
fileSystemProvider.registerFile(new RegisteredMemoryFile(configParams.workspaceFile, createDefaultWorkspaceContent(configParams.workspaceRoot)));
|
|
72
71
|
fileSystemProvider.registerFile(createDebugLaunchConfigFile(workspaceRoot, configParams.languageId));
|
|
73
72
|
registerFileSystemOverlay(1, fileSystemProvider);
|
|
74
73
|
|
|
@@ -76,13 +75,11 @@ export const createDefaultConfigParams = (homeDir: string, htmlContainer?: HTMLE
|
|
|
76
75
|
};
|
|
77
76
|
|
|
78
77
|
export type PythonAppConfig = {
|
|
79
|
-
|
|
80
|
-
vscodeApiConfig: MonacoVscodeApiConfig;
|
|
81
|
-
editorAppConfig: EditorAppConfig;
|
|
78
|
+
wrapperConfig: WrapperConfig;
|
|
82
79
|
configParams: ConfigParams;
|
|
83
80
|
}
|
|
84
81
|
|
|
85
|
-
export const
|
|
82
|
+
export const createWrapperConfig = (): PythonAppConfig => {
|
|
86
83
|
const configParams = createDefaultConfigParams('/home/mlc', document.body);
|
|
87
84
|
|
|
88
85
|
const url = createUrl({
|
|
@@ -99,65 +96,101 @@ export const createPythonAppConfig = (): PythonAppConfig => {
|
|
|
99
96
|
const reader = new WebSocketMessageReader(iWebSocket);
|
|
100
97
|
const writer = new WebSocketMessageWriter(iWebSocket);
|
|
101
98
|
|
|
102
|
-
const
|
|
99
|
+
const wrapperConfig: WrapperConfig = {
|
|
103
100
|
$type: 'extended',
|
|
104
101
|
htmlContainer: configParams.htmlContainer,
|
|
105
102
|
logLevel: LogLevel.Debug,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
103
|
+
languageClientConfigs: {
|
|
104
|
+
configs: {
|
|
105
|
+
python: {
|
|
106
|
+
name: 'Python Language Server Example',
|
|
107
|
+
connection: {
|
|
108
|
+
options: {
|
|
109
|
+
$type: 'WebSocketDirect',
|
|
110
|
+
webSocket: webSocket,
|
|
111
|
+
startOptions: {
|
|
112
|
+
onCall: (languageClient?: MonacoLanguageClient) => {
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
['pyright.restartserver', 'pyright.organizeimports'].forEach((cmdName) => {
|
|
115
|
+
vscode.commands.registerCommand(cmdName, (...args: unknown[]) => {
|
|
116
|
+
languageClient?.sendRequest('workspace/executeCommand', { command: cmdName, arguments: args });
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}, 250);
|
|
120
|
+
},
|
|
121
|
+
reportStatus: true,
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
messageTransports: { reader, writer }
|
|
125
|
+
},
|
|
126
|
+
clientOptions: {
|
|
127
|
+
documentSelector: [configParams.languageId],
|
|
128
|
+
workspaceFolder: {
|
|
129
|
+
index: 0,
|
|
130
|
+
name: configParams.workspaceRoot,
|
|
131
|
+
uri: vscode.Uri.parse(configParams.workspaceRoot)
|
|
132
|
+
},
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
136
|
},
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
vscodeApiConfig: {
|
|
138
|
+
serviceOverrides: {
|
|
139
|
+
...getKeybindingsServiceOverride(),
|
|
140
|
+
...getLifecycleServiceOverride(),
|
|
141
|
+
...getLocalizationServiceOverride(createDefaultLocaleConfiguration()),
|
|
142
|
+
...getBannerServiceOverride(),
|
|
143
|
+
...getStatusBarServiceOverride(),
|
|
144
|
+
...getTitleBarServiceOverride(),
|
|
145
|
+
...getExplorerServiceOverride(),
|
|
146
|
+
...getRemoteAgentServiceOverride(),
|
|
147
|
+
...getEnvironmentServiceOverride(),
|
|
148
|
+
...getSecretStorageServiceOverride(),
|
|
149
|
+
...getStorageServiceOverride(),
|
|
150
|
+
...getSearchServiceOverride(),
|
|
151
|
+
...getDebugServiceOverride(),
|
|
152
|
+
...getTestingServiceOverride(),
|
|
153
|
+
...getPreferencesServiceOverride()
|
|
143
154
|
},
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
155
|
+
viewsConfig: {
|
|
156
|
+
viewServiceType: 'ViewsService',
|
|
157
|
+
htmlAugmentationInstructions: defaultHtmlAugmentationInstructions,
|
|
158
|
+
viewsInitFunc: defaultViewsInit
|
|
159
|
+
},
|
|
160
|
+
userConfiguration: {
|
|
161
|
+
json: JSON.stringify({
|
|
162
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
163
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
164
|
+
'editor.wordBasedSuggestions': 'off',
|
|
165
|
+
'editor.experimental.asyncTokenization': true,
|
|
166
|
+
'debug.toolBarLocation': 'docked'
|
|
167
|
+
})
|
|
168
|
+
},
|
|
169
|
+
workspaceConfig: {
|
|
170
|
+
enableWorkspaceTrust: true,
|
|
171
|
+
windowIndicator: {
|
|
172
|
+
label: 'mlc-python-example',
|
|
173
|
+
tooltip: '',
|
|
174
|
+
command: ''
|
|
175
|
+
},
|
|
176
|
+
workspaceProvider: {
|
|
177
|
+
trusted: true,
|
|
178
|
+
async open() {
|
|
179
|
+
window.open(window.location.href);
|
|
180
|
+
return true;
|
|
181
|
+
},
|
|
182
|
+
workspace: {
|
|
183
|
+
workspaceUri: configParams.workspaceFile
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
configurationDefaults: {
|
|
187
|
+
'window.title': 'mlc-python-example${separator}${dirty}${activeEditorShort}'
|
|
149
188
|
},
|
|
150
|
-
|
|
151
|
-
|
|
189
|
+
productConfiguration: {
|
|
190
|
+
nameShort: 'mlc-python-example',
|
|
191
|
+
nameLong: 'mlc-python-example'
|
|
152
192
|
}
|
|
153
193
|
},
|
|
154
|
-
configurationDefaults: {
|
|
155
|
-
'window.title': 'mlc-python-example${separator}${dirty}${activeEditorShort}'
|
|
156
|
-
},
|
|
157
|
-
productConfiguration: {
|
|
158
|
-
nameShort: 'mlc-python-example',
|
|
159
|
-
nameLong: 'mlc-python-example'
|
|
160
|
-
}
|
|
161
194
|
},
|
|
162
195
|
extensions: [
|
|
163
196
|
{
|
|
@@ -172,48 +205,13 @@ export const createPythonAppConfig = (): PythonAppConfig => {
|
|
|
172
205
|
},
|
|
173
206
|
provideDebuggerExtensionConfig(configParams)
|
|
174
207
|
],
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const languageClientConfig: LanguageClientConfig = {
|
|
179
|
-
name: 'Python Language Server Example',
|
|
180
|
-
connection: {
|
|
181
|
-
options: {
|
|
182
|
-
$type: 'WebSocketDirect',
|
|
183
|
-
webSocket: webSocket,
|
|
184
|
-
startOptions: {
|
|
185
|
-
onCall: (languageClient?: BaseLanguageClient) => {
|
|
186
|
-
setTimeout(() => {
|
|
187
|
-
['pyright.restartserver', 'pyright.organizeimports'].forEach((cmdName) => {
|
|
188
|
-
vscode.commands.registerCommand(cmdName, (...args: unknown[]) => {
|
|
189
|
-
languageClient?.sendRequest('workspace/executeCommand', { command: cmdName, arguments: args });
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
}, 250);
|
|
193
|
-
},
|
|
194
|
-
reportStatus: true,
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
messageTransports: { reader, writer }
|
|
198
|
-
},
|
|
199
|
-
clientOptions: {
|
|
200
|
-
documentSelector: [configParams.languageId],
|
|
201
|
-
workspaceFolder: {
|
|
202
|
-
index: 0,
|
|
203
|
-
name: configParams.workspaceRoot,
|
|
204
|
-
uri: vscode.Uri.parse(configParams.workspaceRoot)
|
|
205
|
-
},
|
|
208
|
+
editorAppConfig: {
|
|
209
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
206
210
|
}
|
|
207
211
|
};
|
|
208
212
|
|
|
209
|
-
const editorAppConfig: EditorAppConfig = {
|
|
210
|
-
$type: vscodeApiConfig.$type
|
|
211
|
-
};
|
|
212
|
-
|
|
213
213
|
return {
|
|
214
|
-
|
|
215
|
-
languageClientConfig,
|
|
216
|
-
editorAppConfig,
|
|
214
|
+
wrapperConfig,
|
|
217
215
|
configParams: configParams
|
|
218
216
|
};
|
|
219
217
|
};
|
|
@@ -3,41 +3,32 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
-
import { type RegisterLocalProcessExtensionResult } from '@codingame/monaco-vscode-api/extensions';
|
|
7
|
-
import { EditorApp } from 'monaco-languageclient/editorApp';
|
|
8
|
-
import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
|
|
9
|
-
import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
|
|
10
6
|
import * as vscode from 'vscode';
|
|
7
|
+
import { type RegisterLocalProcessExtensionResult } from '@codingame/monaco-vscode-api/extensions';
|
|
8
|
+
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
9
|
+
import { createWrapperConfig } from './config.js';
|
|
11
10
|
import { configureDebugging } from '../../debugger/client/debugger.js';
|
|
12
|
-
import { createPythonAppConfig } from './config.js';
|
|
13
11
|
|
|
14
12
|
export const runPythonWrapper = async () => {
|
|
15
|
-
const appConfig =
|
|
16
|
-
|
|
17
|
-
// perform global init
|
|
18
|
-
const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
|
|
19
|
-
await apiWrapper.init();
|
|
20
|
-
|
|
21
|
-
const lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
|
|
13
|
+
const appConfig = createWrapperConfig();
|
|
14
|
+
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (editorApp.isStarted()) {
|
|
16
|
+
if (wrapper.isStarted()) {
|
|
26
17
|
console.warn('Editor was already started!');
|
|
27
18
|
} else {
|
|
28
|
-
|
|
19
|
+
await wrapper.init(appConfig.wrapperConfig);
|
|
20
|
+
|
|
21
|
+
const result = wrapper.getExtensionRegisterResult('mlc-python-example') as RegisterLocalProcessExtensionResult;
|
|
29
22
|
result.setAsDefaultApi();
|
|
30
23
|
|
|
31
|
-
const initResult =
|
|
24
|
+
const initResult = wrapper.getExtensionRegisterResult('debugger-py-client') as RegisterLocalProcessExtensionResult | undefined;
|
|
32
25
|
if (initResult !== undefined) {
|
|
33
26
|
configureDebugging(await initResult.getApi(), appConfig.configParams);
|
|
34
27
|
}
|
|
35
28
|
|
|
36
|
-
await lcWrapper.start();
|
|
37
|
-
|
|
38
29
|
await vscode.commands.executeCommand('workbench.view.explorer');
|
|
39
30
|
await vscode.window.showTextDocument(appConfig.configParams.files.get('hello2.py')!.uri);
|
|
40
31
|
|
|
41
|
-
await
|
|
32
|
+
await wrapper.start();
|
|
42
33
|
}
|
|
43
34
|
};
|
|
@@ -3,23 +3,23 @@
|
|
|
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';
|
|
6
7
|
import { type RegisterLocalProcessExtensionResult } from '@codingame/monaco-vscode-api/extensions';
|
|
7
|
-
import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
|
|
8
|
-
import type { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
|
|
9
8
|
import React from 'react';
|
|
10
9
|
import ReactDOM from 'react-dom/client';
|
|
11
|
-
import
|
|
10
|
+
import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
|
|
11
|
+
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
12
|
+
import { createWrapperConfig } from './config.js';
|
|
12
13
|
import { configureDebugging } from '../../debugger/client/debugger.js';
|
|
13
|
-
import { createPythonAppConfig } from './config.js';
|
|
14
14
|
|
|
15
15
|
export const runPythonReact = async () => {
|
|
16
|
-
const appConfig =
|
|
16
|
+
const appConfig = createWrapperConfig();
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
const result =
|
|
18
|
+
const onLoad = async (wrapper: MonacoEditorLanguageClientWrapper) => {
|
|
19
|
+
const result = wrapper.getExtensionRegisterResult('mlc-python-example') as RegisterLocalProcessExtensionResult;
|
|
20
20
|
result.setAsDefaultApi();
|
|
21
21
|
|
|
22
|
-
const initResult =
|
|
22
|
+
const initResult = wrapper.getExtensionRegisterResult('debugger-py-client') as RegisterLocalProcessExtensionResult | undefined;
|
|
23
23
|
if (initResult !== undefined) {
|
|
24
24
|
configureDebugging(await initResult.getApi(), appConfig.configParams);
|
|
25
25
|
}
|
|
@@ -34,10 +34,9 @@ export const runPythonReact = async () => {
|
|
|
34
34
|
return (
|
|
35
35
|
<div style={{ 'backgroundColor': '#1f1f1f' }} >
|
|
36
36
|
<MonacoEditorReactComp
|
|
37
|
-
|
|
38
|
-
editorAppConfig={appConfig.editorAppConfig}
|
|
37
|
+
wrapperConfig={appConfig.wrapperConfig}
|
|
39
38
|
style={{ 'height': '100%' }}
|
|
40
|
-
|
|
39
|
+
onLoad={onLoad}
|
|
41
40
|
onError={(e) => {
|
|
42
41
|
console.error(e);
|
|
43
42
|
}} />
|