monaco-languageclient-examples 2025.8.3 → 2025.8.4
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 +4 -0
- package/dist/appPlayground/common.d.ts +2 -2
- package/dist/appPlayground/common.d.ts.map +1 -1
- package/dist/appPlayground/common.js +2 -3
- package/dist/appPlayground/common.js.map +1 -1
- package/dist/appPlayground/config.d.ts +4 -2
- package/dist/appPlayground/config.d.ts.map +1 -1
- package/dist/appPlayground/config.js +65 -63
- 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 +5 -4
- 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 +2 -3
- package/dist/appPlayground/reactMain.js.map +1 -1
- package/dist/bare/client.d.ts.map +1 -1
- package/dist/bare/client.js +12 -15
- package/dist/bare/client.js.map +1 -1
- package/dist/browser/main.d.ts.map +1 -1
- package/dist/browser/main.js +28 -27
- package/dist/browser/main.js.map +1 -1
- package/dist/clangd/client/config.d.ts +10 -3
- 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 +12 -9
- package/dist/clangd/client/main.js.map +1 -1
- package/dist/common/client/extendedClient.d.ts +9 -0
- package/dist/common/client/extendedClient.d.ts.map +1 -0
- package/dist/common/client/extendedClient.js +97 -0
- package/dist/common/client/extendedClient.js.map +1 -0
- package/dist/common/client/utils.d.ts +8 -1
- package/dist/common/client/utils.d.ts.map +1 -1
- package/dist/common/client/utils.js +0 -3
- 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 +4 -74
- package/dist/eclipse.jdt.ls/client/main.js.map +1 -1
- package/dist/eclipse.jdt.ls/config.d.ts +2 -5
- package/dist/eclipse.jdt.ls/config.d.ts.map +1 -1
- package/dist/eclipse.jdt.ls/config.js +2 -1
- 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 +4 -63
- package/dist/groovy/client/main.js.map +1 -1
- package/dist/groovy/config.d.ts +2 -5
- package/dist/groovy/config.d.ts.map +1 -1
- package/dist/groovy/config.js +2 -1
- package/dist/groovy/config.js.map +1 -1
- package/dist/json/client/client.d.ts +3 -0
- package/dist/json/client/client.d.ts.map +1 -0
- package/dist/json/client/client.js +13 -0
- package/dist/json/client/client.js.map +1 -0
- package/dist/json/client/config.d.ts +3 -0
- package/dist/json/client/config.d.ts.map +1 -0
- package/dist/json/client/config.js +11 -0
- package/dist/json/client/config.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 +53 -45
- 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 +23 -16
- 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 +40 -41
- 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/main-react.js +2 -3
- 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 +38 -27
- 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 +0 -1
- package/dist/multi/config.js.map +1 -1
- package/dist/multi/twoLanguageClients.d.ts.map +1 -1
- package/dist/multi/twoLanguageClients.js +45 -49
- package/dist/multi/twoLanguageClients.js.map +1 -1
- package/dist/node.d.ts +0 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +0 -3
- package/dist/node.js.map +1 -1
- package/dist/python/client/config.d.ts +7 -3
- package/dist/python/client/config.d.ts.map +1 -1
- package/dist/python/client/config.js +93 -97
- 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 +16 -10
- 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 +8 -9
- package/dist/python/client/reactPython.js.map +1 -1
- package/dist/ts/wrapperTs.d.ts.map +1 -1
- package/dist/ts/wrapperTs.js +50 -45
- package/dist/ts/wrapperTs.js.map +1 -1
- package/json.html +1 -1
- package/package.json +5 -6
- package/src/appPlayground/common.ts +3 -3
- package/src/appPlayground/config.ts +69 -65
- package/src/appPlayground/launcher.ts +2 -1
- package/src/appPlayground/main.ts +8 -5
- package/src/appPlayground/reactLauncher.ts +2 -1
- package/src/appPlayground/reactMain.tsx +4 -4
- package/src/bare/client.ts +15 -16
- package/src/browser/main.ts +29 -27
- package/src/clangd/client/config.ts +97 -87
- package/src/clangd/client/main.ts +14 -10
- package/src/common/client/extendedClient.ts +111 -0
- package/src/common/client/utils.ts +7 -2
- package/src/debugger/client/debugger.ts +1 -1
- package/src/eclipse.jdt.ls/client/main.ts +4 -78
- package/src/eclipse.jdt.ls/config.ts +6 -2
- package/src/groovy/client/main.ts +4 -65
- package/src/groovy/config.ts +6 -2
- package/src/json/client/client.ts +14 -0
- package/src/json/client/config.ts +13 -0
- package/src/json/server/main.ts +1 -1
- package/src/langium/langium-dsl/config/classicConfig.ts +64 -48
- package/src/langium/langium-dsl/config/extendedConfig.ts +49 -42
- package/src/langium/langium-dsl/wrapperLangium.ts +25 -15
- package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +48 -45
- package/src/langium/statemachine/launcher.ts +1 -1
- package/src/langium/statemachine/main-react.tsx +4 -4
- package/src/langium/statemachine/main.ts +43 -27
- package/src/multi/config.ts +3 -3
- package/src/multi/twoLanguageClients.ts +48 -52
- package/src/node.ts +0 -3
- package/src/python/client/config.ts +101 -99
- package/src/python/client/main.ts +20 -11
- package/src/python/client/reactPython.tsx +11 -10
- package/src/ts/wrapperTs.ts +52 -45
- package/two_langauge_clients.html +0 -1
- package/dist/json/client/wrapperWs.d.ts +0 -5
- package/dist/json/client/wrapperWs.d.ts.map +0 -1
- package/dist/json/client/wrapperWs.js +0 -87
- package/dist/json/client/wrapperWs.js.map +0 -1
- package/src/json/client/wrapperWs.ts +0 -90
|
@@ -9,10 +9,12 @@ 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 { EditorApp, type EditorAppConfig } from 'monaco-languageclient/editorApp';
|
|
13
|
+
import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
|
|
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';
|
|
16
18
|
|
|
17
19
|
export const runMultipleLanguageClientsExample = async () => {
|
|
18
20
|
disableElement('button-flip', true);
|
|
@@ -31,64 +33,63 @@ print("Hello Moon!")
|
|
|
31
33
|
let currentText = textJson;
|
|
32
34
|
let currenFileExt = 'json';
|
|
33
35
|
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
+
const htmlContainer = document.getElementById('monaco-editor-root')!;
|
|
37
|
+
const vscodeApiConfig: MonacoVscodeApiConfig = {
|
|
36
38
|
$type: 'extended',
|
|
37
|
-
htmlContainer
|
|
39
|
+
htmlContainer,
|
|
38
40
|
logLevel: LogLevel.Debug,
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
}
|
|
41
|
+
serviceOverrides: {
|
|
42
|
+
...getKeybindingsServiceOverride()
|
|
50
43
|
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
44
|
+
userConfiguration: {
|
|
45
|
+
json: JSON.stringify({
|
|
46
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
47
|
+
'editor.wordBasedSuggestions': 'off',
|
|
48
|
+
'editor.experimental.asyncTokenization': true
|
|
49
|
+
})
|
|
59
50
|
},
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const editorAppConfig: EditorAppConfig = {
|
|
55
|
+
$type: vscodeApiConfig.$type,
|
|
56
|
+
id: '42',
|
|
57
|
+
codeResources: {
|
|
58
|
+
modified: {
|
|
59
|
+
text: currentText,
|
|
60
|
+
uri: `/workspace/example.${currenFileExt}`
|
|
64
61
|
}
|
|
65
62
|
}
|
|
66
63
|
};
|
|
67
64
|
|
|
68
|
-
|
|
65
|
+
// perform global init
|
|
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);
|
|
69
78
|
|
|
70
79
|
document.querySelector('#button-start')?.addEventListener('click', async () => {
|
|
71
80
|
try {
|
|
72
81
|
disableElement('button-start', true);
|
|
73
82
|
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;
|
|
80
83
|
|
|
81
|
-
await
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
await editorApp.start(htmlContainer);
|
|
85
|
+
if (editorAppConfig.codeResources?.modified !== undefined) {
|
|
86
|
+
editorAppConfig.codeResources.modified.text = currentText;
|
|
87
|
+
editorAppConfig.codeResources.modified.uri = `/workspace/example.${currenFileExt}`;
|
|
85
88
|
}
|
|
86
89
|
|
|
87
|
-
// init language clients after start
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await wrapper.startLanguageClients();
|
|
91
|
-
}
|
|
90
|
+
// init and start language clients after start
|
|
91
|
+
await lcManager.setConfigs(languageClientConfigs);
|
|
92
|
+
await lcManager.start();
|
|
92
93
|
} catch (e) {
|
|
93
94
|
console.error(e);
|
|
94
95
|
}
|
|
@@ -98,18 +99,13 @@ print("Hello Moon!")
|
|
|
98
99
|
disableElement('button-dispose', true);
|
|
99
100
|
disableElement('button-start', false);
|
|
100
101
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
await wrapper.dispose();
|
|
104
|
-
|
|
105
|
-
if (externalLc) {
|
|
106
|
-
wrapper.disposeLanguageClients();
|
|
107
|
-
}
|
|
102
|
+
await editorApp.dispose();
|
|
103
|
+
await lcManager.dispose();
|
|
108
104
|
});
|
|
109
105
|
document.querySelector('#button-flip')?.addEventListener('click', async () => {
|
|
110
106
|
currentText = currentText === textJson ? textPython : textJson;
|
|
111
107
|
currenFileExt = currenFileExt === 'json' ? 'py' : 'json';
|
|
112
|
-
|
|
108
|
+
editorApp.updateCodeResources({
|
|
113
109
|
modified: {
|
|
114
110
|
text: currentText,
|
|
115
111
|
uri: `/workspace/example.${currenFileExt}`
|
package/src/node.ts
CHANGED
|
@@ -6,6 +6,3 @@
|
|
|
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
|
-
export * from './json/server/json-server.js';
|
|
10
|
-
export * from './json/server/main.js';
|
|
11
|
-
export * from './python/server/main.js';
|
|
@@ -21,13 +21,14 @@ 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 { EditorAppConfig } from 'monaco-languageclient/editorApp';
|
|
25
|
+
import { createUrl } from 'monaco-languageclient/common';
|
|
26
|
+
import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
|
|
27
|
+
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
|
|
28
|
+
import { defaultHtmlAugmentationInstructions, defaultViewsInit, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
29
|
+
import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
|
|
30
30
|
import * as vscode from 'vscode';
|
|
31
|
+
import type { BaseLanguageClient } from 'vscode-languageclient/browser.js';
|
|
31
32
|
import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
|
|
32
33
|
import badPyCode from '../../../resources/python/bad.py?raw';
|
|
33
34
|
import helloPyCode from '../../../resources/python/hello.py?raw';
|
|
@@ -67,7 +68,7 @@ export const createDefaultConfigParams = (homeDir: string, htmlContainer?: HTMLE
|
|
|
67
68
|
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('hello.py')!.uri, helloPyCode));
|
|
68
69
|
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('hello2.py')!.uri, hello2PyCode));
|
|
69
70
|
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('bad.py')!.uri, badPyCode));
|
|
70
|
-
fileSystemProvider.registerFile(new RegisteredMemoryFile(configParams.workspaceFile, createDefaultWorkspaceContent(
|
|
71
|
+
fileSystemProvider.registerFile(new RegisteredMemoryFile(configParams.workspaceFile, createDefaultWorkspaceContent(workspaceRoot)));
|
|
71
72
|
fileSystemProvider.registerFile(createDebugLaunchConfigFile(workspaceRoot, configParams.languageId));
|
|
72
73
|
registerFileSystemOverlay(1, fileSystemProvider);
|
|
73
74
|
|
|
@@ -75,11 +76,13 @@ export const createDefaultConfigParams = (homeDir: string, htmlContainer?: HTMLE
|
|
|
75
76
|
};
|
|
76
77
|
|
|
77
78
|
export type PythonAppConfig = {
|
|
78
|
-
|
|
79
|
+
languageClientConfig: LanguageClientConfig;
|
|
80
|
+
vscodeApiConfig: MonacoVscodeApiConfig;
|
|
81
|
+
editorAppConfig: EditorAppConfig;
|
|
79
82
|
configParams: ConfigParams;
|
|
80
83
|
}
|
|
81
84
|
|
|
82
|
-
export const
|
|
85
|
+
export const createPythonAppConfig = (): PythonAppConfig => {
|
|
83
86
|
const configParams = createDefaultConfigParams('/home/mlc', document.body);
|
|
84
87
|
|
|
85
88
|
const url = createUrl({
|
|
@@ -96,101 +99,65 @@ export const createWrapperConfig = (): PythonAppConfig => {
|
|
|
96
99
|
const reader = new WebSocketMessageReader(iWebSocket);
|
|
97
100
|
const writer = new WebSocketMessageWriter(iWebSocket);
|
|
98
101
|
|
|
99
|
-
const
|
|
102
|
+
const vscodeApiConfig: MonacoVscodeApiConfig = {
|
|
100
103
|
$type: 'extended',
|
|
101
104
|
htmlContainer: configParams.htmlContainer,
|
|
102
105
|
logLevel: LogLevel.Debug,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
}
|
|
106
|
+
serviceOverrides: {
|
|
107
|
+
...getKeybindingsServiceOverride(),
|
|
108
|
+
...getLifecycleServiceOverride(),
|
|
109
|
+
...getLocalizationServiceOverride(createDefaultLocaleConfiguration()),
|
|
110
|
+
...getBannerServiceOverride(),
|
|
111
|
+
...getStatusBarServiceOverride(),
|
|
112
|
+
...getTitleBarServiceOverride(),
|
|
113
|
+
...getExplorerServiceOverride(),
|
|
114
|
+
...getRemoteAgentServiceOverride(),
|
|
115
|
+
...getEnvironmentServiceOverride(),
|
|
116
|
+
...getSecretStorageServiceOverride(),
|
|
117
|
+
...getStorageServiceOverride(),
|
|
118
|
+
...getSearchServiceOverride(),
|
|
119
|
+
...getDebugServiceOverride(),
|
|
120
|
+
...getTestingServiceOverride(),
|
|
121
|
+
...getPreferencesServiceOverride()
|
|
136
122
|
},
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
})
|
|
123
|
+
viewsConfig: {
|
|
124
|
+
viewServiceType: 'ViewsService',
|
|
125
|
+
htmlAugmentationInstructions: defaultHtmlAugmentationInstructions,
|
|
126
|
+
viewsInitFunc: defaultViewsInit
|
|
127
|
+
},
|
|
128
|
+
userConfiguration: {
|
|
129
|
+
json: JSON.stringify({
|
|
130
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
131
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
132
|
+
'editor.wordBasedSuggestions': 'off',
|
|
133
|
+
'editor.experimental.asyncTokenization': true,
|
|
134
|
+
'debug.toolBarLocation': 'docked'
|
|
135
|
+
})
|
|
136
|
+
},
|
|
137
|
+
workspaceConfig: {
|
|
138
|
+
enableWorkspaceTrust: true,
|
|
139
|
+
windowIndicator: {
|
|
140
|
+
label: 'mlc-python-example',
|
|
141
|
+
tooltip: '',
|
|
142
|
+
command: ''
|
|
168
143
|
},
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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}'
|
|
144
|
+
workspaceProvider: {
|
|
145
|
+
trusted: true,
|
|
146
|
+
async open() {
|
|
147
|
+
window.open(window.location.href);
|
|
148
|
+
return true;
|
|
188
149
|
},
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
nameLong: 'mlc-python-example'
|
|
150
|
+
workspace: {
|
|
151
|
+
workspaceUri: configParams.workspaceFile
|
|
192
152
|
}
|
|
193
153
|
},
|
|
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
|
+
}
|
|
194
161
|
},
|
|
195
162
|
extensions: [
|
|
196
163
|
{
|
|
@@ -205,13 +172,48 @@ export const createWrapperConfig = (): PythonAppConfig => {
|
|
|
205
172
|
},
|
|
206
173
|
provideDebuggerExtensionConfig(configParams)
|
|
207
174
|
],
|
|
208
|
-
|
|
209
|
-
|
|
175
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
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
|
+
},
|
|
210
206
|
}
|
|
211
207
|
};
|
|
212
208
|
|
|
209
|
+
const editorAppConfig: EditorAppConfig = {
|
|
210
|
+
$type: vscodeApiConfig.$type
|
|
211
|
+
};
|
|
212
|
+
|
|
213
213
|
return {
|
|
214
|
-
|
|
214
|
+
vscodeApiConfig,
|
|
215
|
+
languageClientConfig,
|
|
216
|
+
editorAppConfig,
|
|
215
217
|
configParams: configParams
|
|
216
218
|
};
|
|
217
219
|
};
|
|
@@ -3,32 +3,41 @@
|
|
|
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
6
|
import { type RegisterLocalProcessExtensionResult } from '@codingame/monaco-vscode-api/extensions';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { EditorApp } from 'monaco-languageclient/editorApp';
|
|
8
|
+
import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
|
|
9
|
+
import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
|
|
10
|
+
import * as vscode from 'vscode';
|
|
10
11
|
import { configureDebugging } from '../../debugger/client/debugger.js';
|
|
12
|
+
import { createPythonAppConfig } from './config.js';
|
|
11
13
|
|
|
12
14
|
export const runPythonWrapper = async () => {
|
|
13
|
-
const appConfig =
|
|
14
|
-
|
|
15
|
+
const appConfig = createPythonAppConfig();
|
|
16
|
+
|
|
17
|
+
// perform global init
|
|
18
|
+
const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
|
|
19
|
+
await apiWrapper.init();
|
|
20
|
+
|
|
21
|
+
const lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
const editorApp = new EditorApp(appConfig.editorAppConfig);
|
|
24
|
+
|
|
25
|
+
if (editorApp.isStarted()) {
|
|
17
26
|
console.warn('Editor was already started!');
|
|
18
27
|
} else {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const result = wrapper.getExtensionRegisterResult('mlc-python-example') as RegisterLocalProcessExtensionResult;
|
|
28
|
+
const result = apiWrapper.getExtensionRegisterResult('mlc-python-example') as RegisterLocalProcessExtensionResult;
|
|
22
29
|
result.setAsDefaultApi();
|
|
23
30
|
|
|
24
|
-
const initResult =
|
|
31
|
+
const initResult = apiWrapper.getExtensionRegisterResult('debugger-py-client') as RegisterLocalProcessExtensionResult | undefined;
|
|
25
32
|
if (initResult !== undefined) {
|
|
26
33
|
configureDebugging(await initResult.getApi(), appConfig.configParams);
|
|
27
34
|
}
|
|
28
35
|
|
|
36
|
+
await lcWrapper.start();
|
|
37
|
+
|
|
29
38
|
await vscode.commands.executeCommand('workbench.view.explorer');
|
|
30
39
|
await vscode.window.showTextDocument(appConfig.configParams.files.get('hello2.py')!.uri);
|
|
31
40
|
|
|
32
|
-
await
|
|
41
|
+
await editorApp.start(appConfig.vscodeApiConfig.htmlContainer!);
|
|
33
42
|
}
|
|
34
43
|
};
|
|
@@ -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';
|
|
7
6
|
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';
|
|
8
9
|
import React from 'react';
|
|
9
10
|
import ReactDOM from 'react-dom/client';
|
|
10
|
-
import
|
|
11
|
-
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
12
|
-
import { createWrapperConfig } from './config.js';
|
|
11
|
+
import * as vscode from 'vscode';
|
|
13
12
|
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 = createPythonAppConfig();
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
const result =
|
|
18
|
+
const onVscodeApiInitDone = async (apiWrapper: MonacoVscodeApiWrapper) => {
|
|
19
|
+
const result = apiWrapper.getExtensionRegisterResult('mlc-python-example') as RegisterLocalProcessExtensionResult;
|
|
20
20
|
result.setAsDefaultApi();
|
|
21
21
|
|
|
22
|
-
const initResult =
|
|
22
|
+
const initResult = apiWrapper.getExtensionRegisterResult('debugger-py-client') as RegisterLocalProcessExtensionResult | undefined;
|
|
23
23
|
if (initResult !== undefined) {
|
|
24
24
|
configureDebugging(await initResult.getApi(), appConfig.configParams);
|
|
25
25
|
}
|
|
@@ -34,9 +34,10 @@ export const runPythonReact = async () => {
|
|
|
34
34
|
return (
|
|
35
35
|
<div style={{ 'backgroundColor': '#1f1f1f' }} >
|
|
36
36
|
<MonacoEditorReactComp
|
|
37
|
-
|
|
37
|
+
vscodeApiConfig={appConfig.vscodeApiConfig}
|
|
38
|
+
editorAppConfig={appConfig.editorAppConfig}
|
|
38
39
|
style={{ 'height': '100%' }}
|
|
39
|
-
|
|
40
|
+
onVscodeApiInitDone={onVscodeApiInitDone}
|
|
40
41
|
onError={(e) => {
|
|
41
42
|
console.error(e);
|
|
42
43
|
}} />
|
package/src/ts/wrapperTs.ts
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
-
import
|
|
7
|
-
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
|
|
6
|
+
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
8
7
|
import '@codingame/monaco-vscode-javascript-default-extension';
|
|
8
|
+
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
|
|
9
9
|
import '@codingame/monaco-vscode-typescript-basics-default-extension';
|
|
10
10
|
import '@codingame/monaco-vscode-typescript-language-features-default-extension';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { configureDefaultWorkerFactory } from 'monaco-
|
|
11
|
+
import { EditorApp, type EditorAppConfig } from 'monaco-languageclient/editorApp';
|
|
12
|
+
import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
13
|
+
import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
|
|
14
|
+
import * as vscode from 'vscode';
|
|
14
15
|
import { disableElement } from '../common/client/utils.js';
|
|
15
16
|
|
|
16
17
|
export const runTsWrapper = async () => {
|
|
@@ -24,49 +25,55 @@ export const runTsWrapper = async () => {
|
|
|
24
25
|
return "Goodbye";
|
|
25
26
|
};`;
|
|
26
27
|
|
|
27
|
-
const
|
|
28
|
+
const htmlContainer = document.getElementById('monaco-editor-root')!;
|
|
29
|
+
const vscodeApiConfig: MonacoVscodeApiConfig = {
|
|
28
30
|
$type: 'extended',
|
|
29
|
-
htmlContainer
|
|
31
|
+
htmlContainer,
|
|
30
32
|
logLevel: LogLevel.Debug,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
serviceOverrides: {
|
|
34
|
+
...getKeybindingsServiceOverride()
|
|
35
|
+
},
|
|
36
|
+
advanced: {
|
|
35
37
|
enableExtHostWorker: true,
|
|
36
|
-
userConfiguration: {
|
|
37
|
-
json: JSON.stringify({
|
|
38
|
-
'workbench.colorTheme': 'Default Dark Modern',
|
|
39
|
-
'typescript.tsserver.web.projectWideIntellisense.enabled': true,
|
|
40
|
-
'typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors': false,
|
|
41
|
-
'diffEditor.renderSideBySide': false,
|
|
42
|
-
'editor.lightbulb.enabled': 'on',
|
|
43
|
-
'editor.glyphMargin': true,
|
|
44
|
-
'editor.guides.bracketPairsHorizontal': true,
|
|
45
|
-
'editor.experimental.asyncTokenization': true
|
|
46
|
-
})
|
|
47
|
-
}
|
|
48
38
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
39
|
+
userConfiguration: {
|
|
40
|
+
json: JSON.stringify({
|
|
41
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
42
|
+
'typescript.tsserver.web.projectWideIntellisense.enabled': true,
|
|
43
|
+
'typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors': false,
|
|
44
|
+
'diffEditor.renderSideBySide': false,
|
|
45
|
+
'editor.lightbulb.enabled': 'on',
|
|
46
|
+
'editor.glyphMargin': true,
|
|
47
|
+
'editor.guides.bracketPairsHorizontal': true,
|
|
48
|
+
'editor.experimental.asyncTokenization': true
|
|
49
|
+
})
|
|
50
|
+
},
|
|
51
|
+
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const editorAppConfig: EditorAppConfig = {
|
|
55
|
+
$type: vscodeApiConfig.$type,
|
|
56
|
+
codeResources: {
|
|
57
|
+
modified: {
|
|
58
|
+
text: code,
|
|
59
|
+
uri: codeUri
|
|
59
60
|
},
|
|
60
|
-
|
|
61
|
+
original: {
|
|
62
|
+
text: codeOriginal,
|
|
63
|
+
uri: codeOriginalUri,
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
};
|
|
63
67
|
|
|
64
|
-
const
|
|
68
|
+
const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
|
|
69
|
+
await apiWrapper.init();
|
|
70
|
+
|
|
71
|
+
const editorApp = new EditorApp(editorAppConfig);
|
|
65
72
|
disableElement('button-swap-code', true);
|
|
66
73
|
|
|
67
74
|
try {
|
|
68
75
|
document.querySelector('#button-start')?.addEventListener('click', async () => {
|
|
69
|
-
await
|
|
76
|
+
await editorApp.start(htmlContainer);
|
|
70
77
|
|
|
71
78
|
vscode.commands.getCommands().then((x) => {
|
|
72
79
|
console.log(`Found ${x.length} commands`);
|
|
@@ -74,13 +81,13 @@ export const runTsWrapper = async () => {
|
|
|
74
81
|
console.log(`Found command: ${finding}`);
|
|
75
82
|
});
|
|
76
83
|
|
|
77
|
-
|
|
84
|
+
editorApp.getEditor()?.focus();
|
|
78
85
|
await vscode.commands.executeCommand('actions.find');
|
|
79
86
|
});
|
|
80
87
|
document.querySelector('#button-swap-code')?.addEventListener('click', () => {
|
|
81
|
-
const codeResources =
|
|
88
|
+
const codeResources = editorApp.getConfig().codeResources;
|
|
82
89
|
if (codeResources?.modified?.uri === codeUri) {
|
|
83
|
-
|
|
90
|
+
editorApp.updateCodeResources({
|
|
84
91
|
modified: {
|
|
85
92
|
text: codeOriginal,
|
|
86
93
|
uri: codeOriginalUri
|
|
@@ -91,7 +98,7 @@ export const runTsWrapper = async () => {
|
|
|
91
98
|
}
|
|
92
99
|
});
|
|
93
100
|
} else {
|
|
94
|
-
|
|
101
|
+
editorApp.updateCodeResources({
|
|
95
102
|
modified: {
|
|
96
103
|
text: code,
|
|
97
104
|
uri: codeUri
|
|
@@ -105,14 +112,14 @@ export const runTsWrapper = async () => {
|
|
|
105
112
|
});
|
|
106
113
|
document.querySelector('#button-diff')?.addEventListener('click', async () => {
|
|
107
114
|
// ensure it is boolean value and not undefined
|
|
108
|
-
const useDiffEditor =
|
|
109
|
-
|
|
110
|
-
disableElement('button-swap-code', !
|
|
115
|
+
const useDiffEditor = editorAppConfig.useDiffEditor ?? false;
|
|
116
|
+
editorAppConfig.useDiffEditor = !useDiffEditor;
|
|
117
|
+
disableElement('button-swap-code', !editorAppConfig.useDiffEditor);
|
|
111
118
|
|
|
112
|
-
await
|
|
119
|
+
await editorApp.start(htmlContainer);
|
|
113
120
|
});
|
|
114
121
|
document.querySelector('#button-dispose')?.addEventListener('click', async () => {
|
|
115
|
-
await
|
|
122
|
+
await editorApp.dispose();
|
|
116
123
|
});
|
|
117
124
|
} catch (e) {
|
|
118
125
|
console.error(e);
|