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
|
@@ -7,39 +7,42 @@ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-
|
|
|
7
7
|
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
8
8
|
import '../../../../resources/vsix/github-vscode-theme.vsix';
|
|
9
9
|
import { MessageTransports } from 'vscode-languageclient';
|
|
10
|
-
import type {
|
|
11
|
-
import {
|
|
10
|
+
import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
11
|
+
import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
|
|
12
|
+
import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
|
|
12
13
|
import langiumLanguageConfig from './langium.configuration.json?raw';
|
|
13
14
|
import langiumTextmateGrammar from './langium.tmLanguage.json?raw';
|
|
14
15
|
import text from '../../../../resources/langium/langium-dsl//example.langium?raw';
|
|
16
|
+
import type { ExampleAppConfig } from '../../../common/client/utils.js';
|
|
17
|
+
import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
|
|
15
18
|
|
|
16
|
-
export const setupLangiumClientExtended =
|
|
19
|
+
export const setupLangiumClientExtended = (params: {
|
|
17
20
|
worker: Worker
|
|
18
21
|
messageTransports?: MessageTransports,
|
|
19
|
-
}):
|
|
22
|
+
}): ExampleAppConfig => {
|
|
20
23
|
|
|
21
24
|
const extensionFilesOrContents = new Map<string, string | URL>();
|
|
22
25
|
// vite build is easier with string content
|
|
23
26
|
extensionFilesOrContents.set('/langium-configuration.json', langiumLanguageConfig);
|
|
24
27
|
extensionFilesOrContents.set('/langium-grammar.json', langiumTextmateGrammar);
|
|
25
|
-
|
|
28
|
+
|
|
29
|
+
const vscodeApiConfig: MonacoVscodeApiConfig = {
|
|
26
30
|
$type: 'extended',
|
|
27
|
-
htmlContainer: document.getElementById('monaco-editor-root')!,
|
|
28
31
|
logLevel: LogLevel.Debug,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
32
|
+
htmlContainer: document.getElementById('monaco-editor-root')!,
|
|
33
|
+
serviceOverrides: {
|
|
34
|
+
...getKeybindingsServiceOverride()
|
|
35
|
+
},
|
|
36
|
+
userConfiguration: {
|
|
37
|
+
json: JSON.stringify({
|
|
38
|
+
'workbench.colorTheme': 'GitHub Dark High Contrast',
|
|
39
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
40
|
+
'editor.wordBasedSuggestions': 'off',
|
|
41
|
+
'editor.experimental.asyncTokenization': true,
|
|
42
|
+
'vitest.disableWorkspaceWarning': true
|
|
43
|
+
})
|
|
42
44
|
},
|
|
45
|
+
monacoWorkerFactory: configureDefaultWorkerFactory,
|
|
43
46
|
extensions: [{
|
|
44
47
|
config: {
|
|
45
48
|
name: 'langium-example',
|
|
@@ -63,31 +66,35 @@ export const setupLangiumClientExtended = async (params: {
|
|
|
63
66
|
}
|
|
64
67
|
},
|
|
65
68
|
filesOrContents: extensionFilesOrContents
|
|
66
|
-
}]
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
monacoWorkerFactory: configureDefaultWorkerFactory
|
|
69
|
+
}]
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const languageClientConfig: LanguageClientConfig = {
|
|
73
|
+
clientOptions: {
|
|
74
|
+
documentSelector: ['langium']
|
|
75
75
|
},
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
76
|
+
connection: {
|
|
77
|
+
options: {
|
|
78
|
+
$type: 'WorkerDirect',
|
|
79
|
+
worker: params.worker
|
|
80
|
+
},
|
|
81
|
+
messageTransports: params.messageTransports
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const editorAppConfig: EditorAppConfig = {
|
|
86
|
+
$type: vscodeApiConfig.$type,
|
|
87
|
+
codeResources: {
|
|
88
|
+
modified: {
|
|
89
|
+
text,
|
|
90
|
+
uri: '/workspace/grammar.langium'
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
};
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
editorAppConfig,
|
|
97
|
+
vscodeApiConfig,
|
|
98
|
+
languageClientConfig
|
|
99
|
+
};
|
|
93
100
|
};
|
|
@@ -4,16 +4,19 @@
|
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
6
|
import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
|
|
7
|
-
import {
|
|
7
|
+
import { delayExecution } from 'monaco-languageclient/common';
|
|
8
|
+
import { EditorApp } from 'monaco-languageclient/editorApp';
|
|
8
9
|
import { setupLangiumClientExtended } from './config/extendedConfig.js';
|
|
9
10
|
import { setupLangiumClientClassic } from './config/classicConfig.js';
|
|
10
|
-
import {
|
|
11
|
+
import { disableElement, type ExampleAppConfig } from '../../common/client/utils.js';
|
|
11
12
|
import text from '../../../resources/langium/langium-dsl/example.langium?raw';
|
|
12
13
|
import workerUrl from './worker/langium-server?worker&url';
|
|
14
|
+
import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
|
|
15
|
+
import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
|
|
13
16
|
|
|
14
17
|
export const runLangiumDslWrapper = async (extendedMode: boolean) => {
|
|
15
18
|
try {
|
|
16
|
-
let
|
|
19
|
+
let editorApp: EditorApp | undefined;
|
|
17
20
|
|
|
18
21
|
const loadLangiumWorker = () => {
|
|
19
22
|
console.log(`Langium worker URL: ${workerUrl}`);
|
|
@@ -24,7 +27,7 @@ export const runLangiumDslWrapper = async (extendedMode: boolean) => {
|
|
|
24
27
|
};
|
|
25
28
|
|
|
26
29
|
const checkStarted = () => {
|
|
27
|
-
if (
|
|
30
|
+
if (editorApp?.isStarted() ?? false) {
|
|
28
31
|
alert('Editor was already started!\nPlease reload the page to test the alternative editor.');
|
|
29
32
|
return true;
|
|
30
33
|
}
|
|
@@ -42,24 +45,32 @@ export const runLangiumDslWrapper = async (extendedMode: boolean) => {
|
|
|
42
45
|
console.log('Received message from worker:', message);
|
|
43
46
|
});
|
|
44
47
|
|
|
48
|
+
let appConfig: ExampleAppConfig;
|
|
45
49
|
if (extendedMode) {
|
|
46
|
-
|
|
50
|
+
appConfig = setupLangiumClientExtended({
|
|
47
51
|
worker,
|
|
48
52
|
messageTransports: { reader, writer }
|
|
49
53
|
});
|
|
50
|
-
wrapper = new MonacoEditorLanguageClientWrapper();
|
|
51
|
-
await wrapper.initAndStart(config);
|
|
52
54
|
} else {
|
|
53
|
-
|
|
55
|
+
appConfig = setupLangiumClientClassic({
|
|
54
56
|
worker,
|
|
55
57
|
messageTransports: { reader, writer }
|
|
56
58
|
});
|
|
57
|
-
wrapper = new MonacoEditorLanguageClientWrapper();
|
|
58
|
-
await wrapper.initAndStart(config);
|
|
59
59
|
}
|
|
60
|
+
// perform global init
|
|
61
|
+
const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
|
|
62
|
+
await apiWrapper.init();
|
|
63
|
+
|
|
64
|
+
// init language client
|
|
65
|
+
const lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
|
|
66
|
+
await lcWrapper.start();
|
|
67
|
+
|
|
68
|
+
// run editorApp
|
|
69
|
+
editorApp = new EditorApp(appConfig.editorAppConfig);
|
|
70
|
+
await editorApp.start(appConfig.vscodeApiConfig.htmlContainer!);
|
|
60
71
|
|
|
61
72
|
await delayExecution(1000);
|
|
62
|
-
await
|
|
73
|
+
await editorApp.updateCodeResources({
|
|
63
74
|
modified: {
|
|
64
75
|
text: `// modified file\n\n${text}`,
|
|
65
76
|
uri: '/workspace/mod.langium',
|
|
@@ -69,10 +80,9 @@ export const runLangiumDslWrapper = async (extendedMode: boolean) => {
|
|
|
69
80
|
};
|
|
70
81
|
|
|
71
82
|
const disposeEditor = async () => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
wrapper = undefined;
|
|
83
|
+
editorApp?.reportStatus();
|
|
84
|
+
await editorApp?.dispose();
|
|
85
|
+
editorApp = undefined;
|
|
76
86
|
disableElement('button-start', false);
|
|
77
87
|
};
|
|
78
88
|
|
|
@@ -6,65 +6,62 @@
|
|
|
6
6
|
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
|
|
7
7
|
import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
|
|
8
8
|
import getLocalizationServiceOverride from '@codingame/monaco-vscode-localization-service-override';
|
|
9
|
-
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
|
|
10
9
|
import { LogLevel } from '@codingame/monaco-vscode-api';
|
|
11
10
|
import { MessageTransports } from 'vscode-languageclient';
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
11
|
+
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
|
|
12
|
+
import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
|
|
13
|
+
import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
|
|
14
|
+
import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
|
|
15
|
+
import type { CodeContent, EditorAppConfig } from 'monaco-languageclient/editorApp';
|
|
14
16
|
|
|
15
17
|
// cannot be imported with assert as json contains comments
|
|
16
18
|
import statemachineLanguageConfig from './language-configuration.json?raw';
|
|
17
19
|
import responseStatemachineTm from '../syntaxes/statemachine.tmLanguage.json?raw';
|
|
20
|
+
import type { ExampleAppConfig } from '../../../common/client/utils.js';
|
|
18
21
|
|
|
19
22
|
export const createLangiumGlobalConfig = (params: {
|
|
20
23
|
languageServerId: string,
|
|
21
|
-
useLanguageClient: boolean,
|
|
22
24
|
codeContent: CodeContent,
|
|
23
|
-
worker
|
|
25
|
+
worker: Worker,
|
|
24
26
|
messagePort?: MessagePort,
|
|
25
27
|
messageTransports?: MessageTransports,
|
|
26
28
|
htmlContainer: HTMLElement
|
|
27
|
-
}):
|
|
29
|
+
}): ExampleAppConfig => {
|
|
28
30
|
const extensionFilesOrContents = new Map<string, string | URL>();
|
|
29
31
|
extensionFilesOrContents.set(`/${params.languageServerId}-statemachine-configuration.json`, statemachineLanguageConfig);
|
|
30
32
|
extensionFilesOrContents.set(`/${params.languageServerId}-statemachine-grammar.json`, responseStatemachineTm);
|
|
31
33
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
},
|
|
44
|
-
messageTransports: params.messageTransports
|
|
45
|
-
}
|
|
46
|
-
}
|
|
34
|
+
const languageClientConfig: LanguageClientConfig = {
|
|
35
|
+
clientOptions: {
|
|
36
|
+
documentSelector: ['statemachine']
|
|
37
|
+
},
|
|
38
|
+
connection: {
|
|
39
|
+
options: {
|
|
40
|
+
$type: 'WorkerDirect',
|
|
41
|
+
worker: params.worker,
|
|
42
|
+
messagePort: params.messagePort,
|
|
43
|
+
},
|
|
44
|
+
messageTransports: params.messageTransports
|
|
47
45
|
}
|
|
48
|
-
}
|
|
46
|
+
};
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
const vscodeApiConfig: MonacoVscodeApiConfig = {
|
|
51
49
|
$type: 'extended',
|
|
52
50
|
htmlContainer: params.htmlContainer,
|
|
53
51
|
logLevel: LogLevel.Debug,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
},
|
|
52
|
+
serviceOverrides: {
|
|
53
|
+
...getKeybindingsServiceOverride(),
|
|
54
|
+
...getLifecycleServiceOverride(),
|
|
55
|
+
...getLocalizationServiceOverride(createDefaultLocaleConfiguration()),
|
|
56
|
+
},
|
|
57
|
+
monacoWorkerFactory: configureDefaultWorkerFactory,
|
|
58
|
+
userConfiguration: {
|
|
59
|
+
json: JSON.stringify({
|
|
60
|
+
'workbench.colorTheme': 'Default Dark Modern',
|
|
61
|
+
'editor.guides.bracketPairsHorizontal': 'active',
|
|
62
|
+
'editor.wordBasedSuggestions': 'off',
|
|
63
|
+
'editor.experimental.asyncTokenization': true
|
|
64
|
+
})
|
|
68
65
|
},
|
|
69
66
|
extensions: [{
|
|
70
67
|
config: {
|
|
@@ -89,13 +86,19 @@ export const createLangiumGlobalConfig = (params: {
|
|
|
89
86
|
}
|
|
90
87
|
},
|
|
91
88
|
filesOrContents: extensionFilesOrContents
|
|
92
|
-
}]
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
89
|
+
}]
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const editorAppConfig: EditorAppConfig = {
|
|
93
|
+
$type: vscodeApiConfig.$type,
|
|
94
|
+
codeResources: {
|
|
95
|
+
modified: params.codeContent
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
editorAppConfig,
|
|
101
|
+
vscodeApiConfig,
|
|
102
|
+
languageClientConfig
|
|
100
103
|
};
|
|
101
104
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the package root for license information.
|
|
4
4
|
* ------------------------------------------------------------------------------------------ */
|
|
5
5
|
|
|
6
|
-
import { initLocaleLoader } from 'monaco-
|
|
6
|
+
import { initLocaleLoader } from 'monaco-languageclient/vscodeApiLocales';
|
|
7
7
|
await initLocaleLoader();
|
|
8
8
|
|
|
9
9
|
const { runStatemachineWrapper } = await import('./main.js');
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import React, { StrictMode, useEffect, useState } from 'react';
|
|
7
7
|
import ReactDOM from 'react-dom/client';
|
|
8
8
|
import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
|
|
9
|
-
import type { TextContents } from 'monaco-
|
|
9
|
+
import type { TextContents } from 'monaco-languageclient/editorApp';
|
|
10
10
|
import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
|
|
11
11
|
import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
|
|
12
12
|
import { loadStatemachineWorkerRegular } from './main.js';
|
|
@@ -20,9 +20,8 @@ export const runStatemachineReact = async () => {
|
|
|
20
20
|
reader.listen((message) => {
|
|
21
21
|
console.log('Received message from worker:', message);
|
|
22
22
|
});
|
|
23
|
-
const
|
|
23
|
+
const appConfig = createLangiumGlobalConfig({
|
|
24
24
|
languageServerId: 'react',
|
|
25
|
-
useLanguageClient: true,
|
|
26
25
|
codeContent: {
|
|
27
26
|
text,
|
|
28
27
|
uri: '/workspace/example.statemachine'
|
|
@@ -62,7 +61,8 @@ export const runStatemachineReact = async () => {
|
|
|
62
61
|
<div style={{ 'height': height }} >
|
|
63
62
|
<MonacoEditorReactComp
|
|
64
63
|
style={{ 'height': '100%' }}
|
|
65
|
-
|
|
64
|
+
vscodeApiConfig={appConfig.vscodeApiConfig}
|
|
65
|
+
editorAppConfig={appConfig.editorAppConfig}
|
|
66
66
|
onTextChanged={onTextChanged}
|
|
67
67
|
/>
|
|
68
68
|
<b>Debug:</b><br />{testState}
|
|
@@ -5,22 +5,26 @@
|
|
|
5
5
|
|
|
6
6
|
import * as vscode from 'vscode';
|
|
7
7
|
import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
|
|
8
|
-
import {
|
|
8
|
+
import { EditorApp } from 'monaco-languageclient/editorApp';
|
|
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 {
|
|
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';
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
let editorApp: EditorApp | undefined;
|
|
20
|
+
let editorApp2: EditorApp | undefined;
|
|
21
|
+
let lcWrapper: LanguageClientWrapper;
|
|
18
22
|
|
|
19
23
|
const startEditor = async () => {
|
|
20
24
|
disableElement('button-start', true);
|
|
21
25
|
disableElement('button-dispose', false);
|
|
22
26
|
|
|
23
|
-
if (
|
|
27
|
+
if (editorApp?.isStarted() === true || editorApp2?.isStarted() === true) {
|
|
24
28
|
alert('Editor was already started!');
|
|
25
29
|
return;
|
|
26
30
|
}
|
|
@@ -43,39 +47,49 @@ const startEditor = async () => {
|
|
|
43
47
|
});
|
|
44
48
|
|
|
45
49
|
// the configuration does not contain any text content
|
|
46
|
-
const
|
|
50
|
+
const appConfig = createLangiumGlobalConfig({
|
|
47
51
|
languageServerId: 'first',
|
|
48
52
|
codeContent: {
|
|
49
53
|
text,
|
|
50
54
|
uri: '/workspace/example.statemachine'
|
|
51
55
|
},
|
|
52
|
-
useLanguageClient: true,
|
|
53
56
|
worker: stateMachineWorkerPort,
|
|
54
57
|
messagePort: channel.port1,
|
|
55
58
|
messageTransports: { reader, writer },
|
|
56
59
|
htmlContainer: document.getElementById('monaco-editor-root')!
|
|
57
60
|
});
|
|
58
|
-
|
|
61
|
+
editorApp = new EditorApp(appConfig.editorAppConfig);
|
|
59
62
|
|
|
60
|
-
|
|
63
|
+
// perform global init
|
|
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({
|
|
61
75
|
modified: {
|
|
62
76
|
text,
|
|
63
77
|
uri: '/workspace/statemachine-mod.statemachine'
|
|
64
78
|
}
|
|
65
79
|
});
|
|
66
80
|
|
|
67
|
-
// start the second
|
|
81
|
+
// start the second editorApp without any languageclient config
|
|
68
82
|
// => they share the language server and both text contents have different uris
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
await
|
|
83
|
+
const appConfig2 = appConfig;
|
|
84
|
+
appConfig2.editorAppConfig.codeResources!.modified = {
|
|
85
|
+
text: textMod,
|
|
86
|
+
uri: '/workspace/example-mod.statemachine'
|
|
87
|
+
};
|
|
88
|
+
appConfig2.vscodeApiConfig.htmlContainer = document.getElementById('monaco-editor-root2')!;
|
|
89
|
+
editorApp2 = new EditorApp(appConfig2.editorAppConfig);
|
|
90
|
+
|
|
91
|
+
// run editorApp
|
|
92
|
+
await editorApp2.start(appConfig2.vscodeApiConfig.htmlContainer);
|
|
79
93
|
|
|
80
94
|
vscode.commands.getCommands().then((x) => {
|
|
81
95
|
console.log('Currently registered # of vscode commands: ' + x.length);
|
|
@@ -83,7 +97,7 @@ const startEditor = async () => {
|
|
|
83
97
|
|
|
84
98
|
await delayExecution(1000);
|
|
85
99
|
|
|
86
|
-
|
|
100
|
+
editorApp.updateCodeResources({
|
|
87
101
|
modified: {
|
|
88
102
|
text: `// modified file\n\n${text}`,
|
|
89
103
|
uri: '/workspace/statemachine-mod2.statemachine'
|
|
@@ -95,13 +109,15 @@ const disposeEditor = async () => {
|
|
|
95
109
|
disableElement('button-start', false);
|
|
96
110
|
disableElement('button-dispose', true);
|
|
97
111
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
lcWrapper.dispose();
|
|
113
|
+
|
|
114
|
+
editorApp?.reportStatus();
|
|
115
|
+
await editorApp?.dispose();
|
|
116
|
+
console.log(editorApp?.reportStatus().join('\n'));
|
|
101
117
|
|
|
102
|
-
|
|
103
|
-
await
|
|
104
|
-
console.log(
|
|
118
|
+
editorApp2?.reportStatus();
|
|
119
|
+
await editorApp2?.dispose();
|
|
120
|
+
console.log(editorApp2?.reportStatus().join('\n'));
|
|
105
121
|
};
|
|
106
122
|
|
|
107
123
|
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 type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
|
|
8
|
+
import type { BaseLanguageClient } from 'vscode-languageclient/browser.js';
|
|
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?: BaseLanguageClient) => {
|
|
42
42
|
setTimeout(() => {
|
|
43
43
|
['pyright.restartserver', 'pyright.organizeimports'].forEach((cmdName) => {
|
|
44
44
|
vscode.commands.registerCommand(cmdName, (...args: unknown[]) => {
|