monaco-languageclient-examples 8.3.1 → 8.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/bare.html +2 -2
  3. package/browser.html +2 -2
  4. package/dist/browser/main.d.ts.map +1 -1
  5. package/dist/browser/main.js +7 -4
  6. package/dist/browser/main.js.map +1 -1
  7. package/dist/common/client/app-utils.d.ts +3 -0
  8. package/dist/common/client/app-utils.d.ts.map +1 -0
  9. package/dist/common/client/app-utils.js +15 -0
  10. package/dist/common/client/app-utils.js.map +1 -0
  11. package/dist/common/client/localeLoader.d.ts +2 -0
  12. package/dist/common/client/localeLoader.d.ts.map +1 -0
  13. package/dist/common/client/localeLoader.js +61 -0
  14. package/dist/common/client/localeLoader.js.map +1 -0
  15. package/dist/common/node/language-server-runner.d.ts.map +1 -0
  16. package/dist/common/{language-server-runner.js → node/language-server-runner.js} +2 -3
  17. package/dist/common/node/language-server-runner.js.map +1 -0
  18. package/dist/common/{server-commons.d.ts → node/server-commons.d.ts} +7 -1
  19. package/dist/common/node/server-commons.d.ts.map +1 -0
  20. package/dist/common/{server-commons.js → node/server-commons.js} +10 -1
  21. package/dist/common/node/server-commons.js.map +1 -0
  22. package/dist/groovy/client/main.d.ts.map +1 -1
  23. package/dist/groovy/client/main.js +14 -7
  24. package/dist/groovy/client/main.js.map +1 -1
  25. package/dist/groovy/server/direct.js +2 -2
  26. package/dist/groovy/server/direct.js.map +1 -1
  27. package/dist/groovy/server/main.js +3 -3
  28. package/dist/groovy/server/main.js.map +1 -1
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/json/client/wrapperWs.d.ts.map +1 -1
  34. package/dist/json/client/wrapperWs.js +15 -16
  35. package/dist/json/client/wrapperWs.js.map +1 -1
  36. package/dist/json/server/direct.js +2 -2
  37. package/dist/json/server/direct.js.map +1 -1
  38. package/dist/json/server/main.d.ts.map +1 -1
  39. package/dist/json/server/main.js +3 -3
  40. package/dist/json/server/main.js.map +1 -1
  41. package/dist/langium/langium-dsl/config/classicConfig.d.ts.map +1 -1
  42. package/dist/langium/langium-dsl/config/classicConfig.js +15 -7
  43. package/dist/langium/langium-dsl/config/classicConfig.js.map +1 -1
  44. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +1 -1
  45. package/dist/langium/langium-dsl/config/extendedConfig.js +14 -3
  46. package/dist/langium/langium-dsl/config/extendedConfig.js.map +1 -1
  47. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts +5 -1
  48. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +1 -1
  49. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js +14 -7
  50. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +1 -1
  51. package/dist/langium/statemachine/main-react.d.ts.map +1 -1
  52. package/dist/langium/statemachine/main-react.js +8 -3
  53. package/dist/langium/statemachine/main-react.js.map +1 -1
  54. package/dist/langium/statemachine/main.d.ts.map +1 -1
  55. package/dist/langium/statemachine/main.js +19 -3
  56. package/dist/langium/statemachine/main.js.map +1 -1
  57. package/dist/node.d.ts +2 -3
  58. package/dist/node.d.ts.map +1 -1
  59. package/dist/node.js +2 -3
  60. package/dist/node.js.map +1 -1
  61. package/dist/python/client/config.d.ts +1 -1
  62. package/dist/python/client/config.d.ts.map +1 -1
  63. package/dist/python/client/config.js +14 -25
  64. package/dist/python/client/config.js.map +1 -1
  65. package/dist/python/client/main.d.ts +1 -1
  66. package/dist/python/client/main.d.ts.map +1 -1
  67. package/dist/python/client/main.js +24 -9
  68. package/dist/python/client/main.js.map +1 -1
  69. package/dist/python/client/reactPython.d.ts +1 -1
  70. package/dist/python/client/reactPython.d.ts.map +1 -1
  71. package/dist/python/client/reactPython.js +14 -11
  72. package/dist/python/client/reactPython.js.map +1 -1
  73. package/dist/python/server/direct.js +2 -2
  74. package/dist/python/server/direct.js.map +1 -1
  75. package/dist/python/server/main.js +3 -3
  76. package/dist/python/server/main.js.map +1 -1
  77. package/dist/ts/wrapperAdvanced.d.ts.map +1 -1
  78. package/dist/ts/wrapperAdvanced.js +64 -25
  79. package/dist/ts/wrapperAdvanced.js.map +1 -1
  80. package/dist/ts/wrapperTs.d.ts.map +1 -1
  81. package/dist/ts/wrapperTs.js +43 -28
  82. package/dist/ts/wrapperTs.js.map +1 -1
  83. package/groovy.html +2 -2
  84. package/package.json +46 -45
  85. package/python.html +2 -2
  86. package/react_python.html +3 -3
  87. package/react_statemachine.html +3 -3
  88. package/src/browser/main.ts +7 -4
  89. package/src/common/client/app-utils.ts +16 -0
  90. package/src/common/client/localeLoader.ts +61 -0
  91. package/src/common/{language-server-runner.ts → node/language-server-runner.ts} +3 -4
  92. package/src/common/{server-commons.ts → node/server-commons.ts} +13 -3
  93. package/src/groovy/client/main.ts +15 -8
  94. package/src/groovy/server/direct.ts +3 -3
  95. package/src/groovy/server/main.ts +3 -3
  96. package/src/index.ts +2 -2
  97. package/src/json/client/wrapperWs.ts +17 -18
  98. package/src/json/server/direct.ts +2 -2
  99. package/src/json/server/main.ts +4 -3
  100. package/src/langium/langium-dsl/config/classicConfig.ts +15 -7
  101. package/src/langium/langium-dsl/config/extendedConfig.ts +15 -3
  102. package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +19 -8
  103. package/src/langium/statemachine/main-react.tsx +8 -3
  104. package/src/langium/statemachine/main.ts +22 -3
  105. package/src/node.ts +2 -3
  106. package/src/python/client/bad.py +3 -0
  107. package/src/python/client/config.ts +13 -24
  108. package/src/python/client/hello.py +4 -0
  109. package/src/python/client/hello2.py +2 -0
  110. package/src/python/client/main.ts +29 -9
  111. package/src/python/client/reactPython.tsx +15 -11
  112. package/src/python/client/tester.py +5 -0
  113. package/src/python/server/direct.ts +2 -2
  114. package/src/python/server/main.ts +4 -4
  115. package/src/ts/wrapperAdvanced.ts +64 -25
  116. package/src/ts/wrapperTs.ts +44 -28
  117. package/vite.bundle.config.ts +32 -0
  118. package/wrapper_adv.html +2 -2
  119. package/wrapper_langium.html +2 -2
  120. package/wrapper_statemachine.html +6 -3
  121. package/wrapper_ts.html +1 -1
  122. package/wrapper_ws.html +2 -3
  123. package/dist/common/example-apps-common.d.ts +0 -8
  124. package/dist/common/example-apps-common.d.ts.map +0 -1
  125. package/dist/common/example-apps-common.js +0 -81
  126. package/dist/common/example-apps-common.js.map +0 -1
  127. package/dist/common/language-server-runner.d.ts.map +0 -1
  128. package/dist/common/language-server-runner.js.map +0 -1
  129. package/dist/common/server-commons.d.ts.map +0 -1
  130. package/dist/common/server-commons.js.map +0 -1
  131. package/dist/utils/fs-utils.d.ts +0 -5
  132. package/dist/utils/fs-utils.d.ts.map +0 -1
  133. package/dist/utils/fs-utils.js +0 -14
  134. package/dist/utils/fs-utils.js.map +0 -1
  135. package/dist/utils/localeLoader.d.ts +0 -2
  136. package/dist/utils/localeLoader.d.ts.map +0 -1
  137. package/dist/utils/localeLoader.js +0 -60
  138. package/dist/utils/localeLoader.js.map +0 -1
  139. package/src/common/example-apps-common.ts +0 -90
  140. package/src/utils/fs-utils.ts +0 -14
  141. package/src/utils/localeLoader.ts +0 -59
  142. /package/dist/common/{language-server-runner.d.ts → node/language-server-runner.d.ts} +0 -0
@@ -0,0 +1,61 @@
1
+ /* --------------------------------------------------------------------------------------------
2
+ * Copyright (c) 2024 TypeFox and others.
3
+ * Licensed under the MIT License. See LICENSE in the package root for license information.
4
+ * ------------------------------------------------------------------------------------------ */
5
+
6
+ export const initLocalLoader = async () => {
7
+ const locale = new URLSearchParams(window.location.search).get('locale');
8
+ const localeLoader: Partial<Record<string, () => Promise<void>>> = {
9
+ cs: async () => {
10
+ await import('@codingame/monaco-vscode-language-pack-cs');
11
+ },
12
+ de: async () => {
13
+ await import('@codingame/monaco-vscode-language-pack-de');
14
+ },
15
+ es: async () => {
16
+ await import('@codingame/monaco-vscode-language-pack-es');
17
+ },
18
+ fr: async () => {
19
+ await import('@codingame/monaco-vscode-language-pack-fr');
20
+ },
21
+ it: async () => {
22
+ await import('@codingame/monaco-vscode-language-pack-it');
23
+ },
24
+ ja: async () => {
25
+ await import('@codingame/monaco-vscode-language-pack-ja');
26
+ },
27
+ ko: async () => {
28
+ await import('@codingame/monaco-vscode-language-pack-ko');
29
+ },
30
+ pl: async () => {
31
+ await import('@codingame/monaco-vscode-language-pack-pl');
32
+ },
33
+ 'pt-br': async () => {
34
+ await import('@codingame/monaco-vscode-language-pack-pt-br');
35
+ },
36
+ 'qps-ploc': async () => {
37
+ await import('@codingame/monaco-vscode-language-pack-qps-ploc');
38
+ },
39
+ ru: async () => {
40
+ await import('@codingame/monaco-vscode-language-pack-ru');
41
+ },
42
+ tr: async () => {
43
+ await import('@codingame/monaco-vscode-language-pack-tr');
44
+ },
45
+ 'zh-hans': async () => {
46
+ await import('@codingame/monaco-vscode-language-pack-zh-hans');
47
+ },
48
+ 'zh-hant': async () => {
49
+ await import('@codingame/monaco-vscode-language-pack-zh-hant');
50
+ }
51
+ };
52
+
53
+ if (locale !== null) {
54
+ const loader = localeLoader[locale];
55
+ if (loader) {
56
+ await loader();
57
+ } else {
58
+ console.error(`Unknown locale ${locale}`);
59
+ }
60
+ }
61
+ };
@@ -4,16 +4,15 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { WebSocketServer } from 'ws';
7
- import { Server } from 'http';
7
+ import { Server } from 'node:http';
8
8
  import express from 'express';
9
- import { getLocalDirectory } from '../utils/fs-utils.js';
10
- import { LanguageServerRunConfig, upgradeWsServer } from './server-commons.js';
9
+ import { getLocalDirectory, LanguageServerRunConfig, upgradeWsServer } from './server-commons.js';
11
10
 
12
11
  /** LSP server runner */
13
12
  export const runLanguageServer = (
14
13
  languageServerRunConfig: LanguageServerRunConfig
15
14
  ) => {
16
- process.on('uncaughtException', function(err) {
15
+ process.on('uncaughtException', err => {
17
16
  console.error('Uncaught Exception: ', err.toString());
18
17
  if (err.stack) {
19
18
  console.error(err.stack);
@@ -3,9 +3,11 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
  import { WebSocketServer, ServerOptions } from 'ws';
6
- import { IncomingMessage, Server } from 'http';
7
- import { URL } from 'url';
8
- import { Socket } from 'net';
6
+ import { IncomingMessage, Server } from 'node:http';
7
+ import { URL } from 'node:url';
8
+ import { Socket } from 'node:net';
9
+ import { dirname } from 'node:path';
10
+ import { fileURLToPath } from 'node:url';
9
11
  import { IWebSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
10
12
  import { createConnection, createServerProcess, forward } from 'vscode-ws-jsonrpc/server';
11
13
  import { Message, InitializeRequest, InitializeParams } from 'vscode-languageserver';
@@ -93,3 +95,11 @@ export const upgradeWsServer = (runconfig: LanguageServerRunConfig,
93
95
  }
94
96
  });
95
97
  };
98
+
99
+ /**
100
+ * Solves: __dirname is not defined in ES module scope
101
+ */
102
+ export const getLocalDirectory = (referenceUrl: string | URL) => {
103
+ const __filename = fileURLToPath(referenceUrl);
104
+ return dirname(__filename);
105
+ };
@@ -6,8 +6,7 @@
6
6
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
7
7
  // this is required syntax highlighting
8
8
  import '@codingame/monaco-vscode-groovy-default-extension';
9
- import { disposeEditor, startEditor } from '../../common/example-apps-common.js';
10
- import { UserConfig } from 'monaco-editor-wrapper';
9
+ import { MonacoEditorLanguageClientWrapper, UserConfig } from 'monaco-editor-wrapper';
11
10
  import { groovyConfig } from '../config.js';
12
11
  import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
13
12
 
@@ -32,8 +31,12 @@ const userConfig: UserConfig = {
32
31
  },
33
32
  editorAppConfig: {
34
33
  $type: 'extended',
35
- languageId: 'groovy',
36
- code,
34
+ codeResources: {
35
+ main: {
36
+ text: code,
37
+ fileExt: 'groovy'
38
+ }
39
+ },
37
40
  useDiffEditor: false,
38
41
  userConfiguration: {
39
42
  json: JSON.stringify({
@@ -44,6 +47,7 @@ const userConfig: UserConfig = {
44
47
  }
45
48
  },
46
49
  languageClientConfig: {
50
+ languageId: 'groovy',
47
51
  options: {
48
52
  $type: 'WebSocketUrl',
49
53
  url: `ws://localhost:${groovyConfig.port}${groovyConfig.path}`
@@ -52,13 +56,16 @@ const userConfig: UserConfig = {
52
56
  };
53
57
 
54
58
  export const runGroovyClient = () => {
59
+ const wrapper = new MonacoEditorLanguageClientWrapper();
60
+ const htmlElement = document.getElementById('monaco-editor-root');
61
+
55
62
  try {
56
- const htmlElement = document.getElementById('monaco-editor-root');
57
- document.querySelector('#button-start')?.addEventListener('click', () => {
58
- startEditor(userConfig, htmlElement, code);
63
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
64
+ await wrapper.dispose();
65
+ await wrapper.initAndStart(userConfig, htmlElement);
59
66
  });
60
67
  document.querySelector('#button-dispose')?.addEventListener('click', async () => {
61
- await disposeEditor(userConfig.wrapperConfig.editorAppConfig.useDiffEditor);
68
+ await wrapper.dispose();
62
69
  });
63
70
  } catch (e) {
64
71
  console.error(e);
@@ -3,11 +3,11 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { resolve } from 'path';
7
- import { getLocalDirectory } from '../../utils/fs-utils.js';
6
+ import { resolve } from 'node:path';
8
7
  import { runGroovyLanguageServer } from './main.js';
9
- const baseDir = resolve(getLocalDirectory(import.meta.url));
8
+ import { getLocalDirectory } from '../../common/node/server-commons.js';
10
9
 
10
+ const baseDir = resolve(getLocalDirectory(import.meta.url));
11
11
  const groovyJar = resolve(baseDir, '../../../resources/groovy/external/groovy-language-server-all.jar');
12
12
  const relativeDir = process.env.LANG_SERVER_JAR_PATH || groovyJar;
13
13
  console.log(`basedir: ${baseDir}`);
@@ -3,10 +3,10 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { runLanguageServer } from '../../common/language-server-runner.js';
7
- import { resolve } from 'path';
6
+ import { resolve } from 'node:path';
7
+ import { runLanguageServer } from '../../common/node/language-server-runner.js';
8
+ import { LanguageName } from '../../common/node/server-commons.js';
8
9
  import { groovyConfig } from '../config.js';
9
- import { LanguageName } from '../../common/server-commons.js';
10
10
 
11
11
  export const runGroovyLanguageServer = (baseDir: string, relativeDir: string) => {
12
12
  const processRunPath = resolve(baseDir, relativeDir);
package/src/index.ts CHANGED
@@ -4,5 +4,5 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  /* client side export only */
7
- export * from './common/example-apps-common.js';
8
-
7
+ export * from './common/client/app-utils.js';
8
+ export * from './common/client/localeLoader.js';
@@ -5,9 +5,8 @@
5
5
 
6
6
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
7
7
  // this is required syntax highlighting
8
- import '@codingame/monaco-vscode-json-default-extension';
9
- import { disposeEditor, startEditor, swapEditors } from '../../common/example-apps-common.js';
10
- import { UserConfig } from 'monaco-editor-wrapper';
8
+ import '@codingame/monaco-vscode-json-default-extension';
9
+ import { MonacoEditorLanguageClientWrapper, UserConfig } from 'monaco-editor-wrapper';
11
10
  import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
12
11
 
13
12
  export const configureMonacoWorkers = () => {
@@ -20,11 +19,7 @@ export const configureMonacoWorkers = () => {
20
19
  });
21
20
  };
22
21
 
23
- let codeMain = `{
24
- "$schema": "http://json.schemastore.org/coffeelint",
25
- "line_endings": {"value": "windows"}
26
- }`;
27
- const codeOrg = `{
22
+ const text = `{
28
23
  "$schema": "http://json.schemastore.org/coffeelint",
29
24
  "line_endings": {"value": "unix"}
30
25
  }`;
@@ -39,10 +34,13 @@ export const jsonClientUserConfig: UserConfig = {
39
34
  },
40
35
  editorAppConfig: {
41
36
  $type: 'extended',
42
- languageId: 'json',
43
- code: codeMain,
37
+ codeResources: {
38
+ main: {
39
+ text,
40
+ fileExt: 'json'
41
+ }
42
+ },
44
43
  useDiffEditor: false,
45
- codeOriginal: codeOrg,
46
44
  userConfiguration: {
47
45
  json: JSON.stringify({
48
46
  'workbench.colorTheme': 'Default Dark Modern',
@@ -53,6 +51,7 @@ export const jsonClientUserConfig: UserConfig = {
53
51
  }
54
52
  },
55
53
  languageClientConfig: {
54
+ languageId: 'json',
56
55
  options: {
57
56
  $type: 'WebSocketUrl',
58
57
  url: 'ws://localhost:30000/sampleServer',
@@ -73,16 +72,16 @@ export const jsonClientUserConfig: UserConfig = {
73
72
  };
74
73
 
75
74
  export const runJsonWrapper = () => {
75
+ const wrapper = new MonacoEditorLanguageClientWrapper();
76
+ const htmlElement = document.getElementById('monaco-editor-root');
77
+
76
78
  try {
77
- const htmlElement = document.getElementById('monaco-editor-root');
78
- document.querySelector('#button-start')?.addEventListener('click', () => {
79
- startEditor(jsonClientUserConfig, htmlElement, codeMain, codeOrg);
80
- });
81
- document.querySelector('#button-swap')?.addEventListener('click', () => {
82
- swapEditors(jsonClientUserConfig, htmlElement, codeMain, codeOrg);
79
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
80
+ await wrapper.dispose();
81
+ await wrapper.initAndStart(jsonClientUserConfig, htmlElement);
83
82
  });
84
83
  document.querySelector('#button-dispose')?.addEventListener('click', async () => {
85
- codeMain = await disposeEditor(jsonClientUserConfig.wrapperConfig.editorAppConfig.useDiffEditor);
84
+ await wrapper.dispose();
86
85
  });
87
86
  } catch (e) {
88
87
  console.error(e);
@@ -2,9 +2,9 @@
2
2
  * Copyright (c) 2024 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
- import { resolve } from 'path';
5
+ import { resolve } from 'node:path';
6
6
  import { runJsonServer } from './main.js';
7
- import { getLocalDirectory } from '../../utils/fs-utils.js';
7
+ import { getLocalDirectory } from '../../common/node/server-commons.js';
8
8
 
9
9
  const baseDir = resolve(getLocalDirectory(import.meta.url));
10
10
  const relativeDir = '../../../dist/json/server/json-server.js';
@@ -2,9 +2,10 @@
2
2
  * Copyright (c) 2024 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
- import { runLanguageServer } from '../../common/language-server-runner.js';
6
- import { resolve } from 'path';
7
- import { LanguageName } from '../../common/server-commons.js';
5
+
6
+ import { resolve } from 'node:path';
7
+ import { runLanguageServer } from '../../common/node/language-server-runner.js';
8
+ import { LanguageName } from '../../common/node/server-commons.js';
8
9
 
9
10
  export const runJsonServer = (baseDir: string, relativeDir: string) => {
10
11
  const processRunPath = resolve(baseDir, relativeDir);
@@ -9,9 +9,9 @@ import getEditorServiceOverride from '@codingame/monaco-vscode-editor-service-ov
9
9
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
10
10
  import { useOpenEditorStub } from 'monaco-editor-wrapper/vscode/services';
11
11
  import { UserConfig } from 'monaco-editor-wrapper';
12
- import { getTextContent } from '../../../common/example-apps-common.js';
13
12
  import { LangiumMonarchContent } from './langium.monarch.js';
14
13
  import { loadLangiumWorker } from '../wrapperLangium.js';
14
+ import { getTextContent } from '../../../common/client/app-utils.js';
15
15
 
16
16
  export const setupLangiumClientClassic = async (): Promise<UserConfig> => {
17
17
  const code = await getTextContent(new URL('./src/langium/langium-dsl/content/example.langium', window.location.href));
@@ -44,19 +44,27 @@ export const setupLangiumClientClassic = async (): Promise<UserConfig> => {
44
44
  },
45
45
  editorAppConfig: {
46
46
  $type: 'classic',
47
- languageId: 'langium',
48
- code: code,
47
+ codeResources: {
48
+ main: {
49
+ text: code,
50
+ fileExt: 'langium',
51
+ enforceLanguageId: 'langium'
52
+ }
53
+ },
49
54
  useDiffEditor: false,
50
- theme: 'vs-dark',
51
55
  editorOptions: {
52
56
  'semanticHighlighting.enabled': true,
53
- wordBasedSuggestions: 'off'
57
+ wordBasedSuggestions: 'off',
58
+ theme: 'vs-dark'
54
59
  },
55
- languageExtensionConfig: { id: 'langium' },
56
- languageDef: LangiumMonarchContent,
60
+ languageDef: {
61
+ monarchLanguage: LangiumMonarchContent,
62
+ languageExtensionConfig: { id: 'langium' },
63
+ }
57
64
  }
58
65
  },
59
66
  languageClientConfig: {
67
+ languageId: 'langium',
60
68
  options: {
61
69
  $type: 'WorkerDirect',
62
70
  worker: langiumWorker
@@ -8,8 +8,9 @@ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-
8
8
  import '../../../../resources/vsix/GitHub.github-vscode-theme-6.3.4.vsix';
9
9
  import { useOpenEditorStub } from 'monaco-editor-wrapper/vscode/services';
10
10
  import { UserConfig } from 'monaco-editor-wrapper';
11
- import { getTextContent } from '../../../common/example-apps-common.js';
11
+ import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
12
12
  import { loadLangiumWorker } from '../wrapperLangium.js';
13
+ import { getTextContent } from '../../../common/client/app-utils.js';
13
14
 
14
15
  export const setupLangiumClientExtended = async (): Promise<UserConfig> => {
15
16
  const code = await getTextContent(new URL('./src/langium/langium-dsl/content/example.langium', window.location.href));
@@ -22,6 +23,9 @@ export const setupLangiumClientExtended = async (): Promise<UserConfig> => {
22
23
  extensionFilesOrContents.set('/langium-grammar.json', langiumTextmateGrammar);
23
24
 
24
25
  const langiumWorker = loadLangiumWorker();
26
+ const reader = new BrowserMessageReader(langiumWorker);
27
+ const writer = new BrowserMessageWriter(langiumWorker);
28
+
25
29
  return {
26
30
  wrapperConfig: {
27
31
  serviceConfig: {
@@ -33,8 +37,12 @@ export const setupLangiumClientExtended = async (): Promise<UserConfig> => {
33
37
  },
34
38
  editorAppConfig: {
35
39
  $type: 'extended',
36
- languageId: 'langium',
37
- code: code,
40
+ codeResources: {
41
+ main: {
42
+ text: code,
43
+ fileExt: 'langium'
44
+ }
45
+ },
38
46
  useDiffEditor: false,
39
47
  extensions: [{
40
48
  config: {
@@ -70,9 +78,13 @@ export const setupLangiumClientExtended = async (): Promise<UserConfig> => {
70
78
  }
71
79
  },
72
80
  languageClientConfig: {
81
+ languageId: 'langium',
73
82
  options: {
74
83
  $type: 'WorkerDirect',
75
84
  worker: langiumWorker
85
+ },
86
+ connectionProvider: {
87
+ get: async () => ({ reader, writer }),
76
88
  }
77
89
  }
78
90
  };
@@ -8,17 +8,26 @@ import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-serv
8
8
  import getLocalizationServiceOverride from '@codingame/monaco-vscode-localization-service-override';
9
9
  import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
10
10
  import { UserConfig } from 'monaco-editor-wrapper';
11
- import { getTextContent } from '../../../common/example-apps-common.js';
12
-
13
- export const createLangiumGlobalConfig = async (worker: Worker, messagePort?: MessagePort): Promise<UserConfig> => {
14
- const code = await getTextContent(new URL('./src/langium/statemachine/content/example.statemachine', window.location.href));
15
11
 
12
+ export const createLangiumGlobalConfig = async (params: {
13
+ text?: string,
14
+ worker: Worker,
15
+ messagePort?: MessagePort
16
+ }): Promise<UserConfig> => {
16
17
  const extensionFilesOrContents = new Map<string, string | URL>();
17
18
  const statemachineLanguageConfig = new URL('./src/langium/statemachine/config/language-configuration.json', window.location.href);
18
19
  const responseStatemachineTm = new URL('./src/langium/statemachine/syntaxes/statemachine.tmLanguage.json', window.location.href);
19
20
  extensionFilesOrContents.set('/statemachine-configuration.json', statemachineLanguageConfig);
20
21
  extensionFilesOrContents.set('/statemachine-grammar.json', responseStatemachineTm);
21
22
 
23
+ let main;
24
+ if (params.text) {
25
+ main = {
26
+ text: params.text,
27
+ fileExt: 'statemachine'
28
+ };
29
+ }
30
+
22
31
  return {
23
32
  wrapperConfig: {
24
33
  serviceConfig: {
@@ -31,8 +40,9 @@ export const createLangiumGlobalConfig = async (worker: Worker, messagePort?: Me
31
40
  },
32
41
  editorAppConfig: {
33
42
  $type: 'extended',
34
- languageId: 'statemachine',
35
- code: code,
43
+ codeResources: {
44
+ main
45
+ },
36
46
  useDiffEditor: false,
37
47
  extensions: [{
38
48
  config: {
@@ -68,10 +78,11 @@ export const createLangiumGlobalConfig = async (worker: Worker, messagePort?: Me
68
78
  }
69
79
  },
70
80
  languageClientConfig: {
81
+ languageId: 'statemachine',
71
82
  options: {
72
83
  $type: 'WorkerDirect',
73
- worker,
74
- messagePort
84
+ worker: params.worker,
85
+ messagePort: params.messagePort
75
86
  }
76
87
  }
77
88
  };
@@ -6,9 +6,10 @@
6
6
  import React from 'react';
7
7
  import ReactDOM from 'react-dom/client';
8
8
  import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
9
+ import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
10
+ import { getTextContent } from '../../common/client/app-utils.js';
9
11
  import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
10
12
  import { loadStatemachineWorkerRegular } from './main.js';
11
- import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
12
13
 
13
14
  export const configureMonacoWorkers = () => {
14
15
  useWorkerFactory({
@@ -18,7 +19,11 @@ export const configureMonacoWorkers = () => {
18
19
 
19
20
  export const runStatemachineReact = async () => {
20
21
  try {
21
- const langiumGlobalConfig = await createLangiumGlobalConfig(loadStatemachineWorkerRegular());
22
+ const text = await getTextContent(new URL('./src/langium/statemachine/content/example.statemachine', window.location.href));
23
+ const langiumGlobalConfig = await createLangiumGlobalConfig({
24
+ text,
25
+ worker: loadStatemachineWorkerRegular()
26
+ });
22
27
  const comp = <MonacoEditorReactComp
23
28
  userConfig={langiumGlobalConfig}
24
29
  style={{
@@ -27,7 +32,7 @@ export const runStatemachineReact = async () => {
27
32
  }}
28
33
  />;
29
34
 
30
- const htmlElement = document.getElementById('root');
35
+ const htmlElement = document.getElementById('monaco-editor-root');
31
36
  ReactDOM.createRoot(htmlElement!).render(comp);
32
37
  } catch (e) {
33
38
  console.error(e);
@@ -4,9 +4,11 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import * as vscode from 'vscode';
7
+ import { createModelReference } from 'vscode/monaco';
7
8
  import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
8
- import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
9
9
  import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
10
+ import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
11
+ import { getTextContent } from '../../common/client/app-utils.js';
10
12
 
11
13
  const wrapper = new MonacoEditorLanguageClientWrapper();
12
14
  const wrapper2 = new MonacoEditorLanguageClientWrapper();
@@ -23,11 +25,24 @@ const startEditor = async () => {
23
25
  return;
24
26
  }
25
27
 
28
+ const text = await getTextContent(new URL('./src/langium/statemachine/content/example.statemachine', window.location.href));
29
+
26
30
  // init first worker regularly
27
31
  const stateMachineWorkerRegular = loadStatemachineWorkerRegular();
28
- const langiumGlobalConfig = await createLangiumGlobalConfig(stateMachineWorkerRegular);
32
+
33
+ // the configuration does not contain any text content
34
+ const langiumGlobalConfig = await createLangiumGlobalConfig({
35
+ worker: stateMachineWorkerRegular
36
+ });
29
37
  await wrapper.initAndStart(langiumGlobalConfig, document.getElementById('monaco-editor-root'));
30
38
 
39
+ // here the modelReference is created manually and given to the updateEditorModels of the wrapper
40
+ const uri = vscode.Uri.parse('/workspace/statemachineUri.statemachine');
41
+ const modelRef = await createModelReference(uri, text);
42
+ wrapper.updateEditorModels({
43
+ modelRef
44
+ });
45
+
31
46
  // init second worker with port for client and worker
32
47
  const stateMachineWorkerPort = loadStatemachinWorkerPort();
33
48
  // use callback to receive message back from worker independent of the message channel the LSP is using
@@ -39,7 +54,11 @@ const startEditor = async () => {
39
54
  port: channel.port2
40
55
  }, [channel.port2]);
41
56
 
42
- const langiumGlobalConfig2 = await createLangiumGlobalConfig(stateMachineWorkerPort, channel.port1);
57
+ const langiumGlobalConfig2 = await createLangiumGlobalConfig({
58
+ text,
59
+ worker: stateMachineWorkerPort,
60
+ messagePort: channel.port1
61
+ });
43
62
  await wrapper2.initAndStart(langiumGlobalConfig2, document.getElementById('monaco-editor-root2'));
44
63
 
45
64
  vscode.commands.getCommands().then((x) => {
package/src/node.ts CHANGED
@@ -4,9 +4,8 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  /* server side export only */
7
- export * from './common/server-commons.js';
8
- export * from './common/language-server-runner.js';
7
+ export * from './common/node/server-commons.js';
8
+ export * from './common/node/language-server-runner.js';
9
9
  export * from './json/server/json-server.js';
10
10
  export * from './json/server/main.js';
11
11
  export * from './python/server/main.js';
12
- export * from './utils/fs-utils.js';
@@ -0,0 +1,3 @@
1
+ # code is intentionally incorrect - language server will pick this up on connection and highlight the error
2
+ def main():
3
+ return pass
@@ -4,16 +4,19 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import * as vscode from 'vscode';
7
+ import getEditorServiceOverride from '@codingame/monaco-vscode-editor-service-override';
7
8
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
8
9
  import '@codingame/monaco-vscode-python-default-extension';
9
10
  import { UserConfig } from 'monaco-editor-wrapper';
11
+ import { useOpenEditorStub } from 'monaco-editor-wrapper/vscode/services';
10
12
  import { MonacoLanguageClient } from 'monaco-languageclient';
11
13
 
12
- export const createUserConfig = (code: string): UserConfig => {
14
+ export const createUserConfig = (workspaceRoot: string, code: string, codeUri: string): UserConfig => {
13
15
  return {
14
16
  languageClientConfig: {
17
+ languageId: 'python',
18
+ name: 'Python Language Server Example',
15
19
  options: {
16
- name: 'Python Language Server Example',
17
20
  $type: 'WebSocket',
18
21
  host: 'localhost',
19
22
  port: 30001,
@@ -40,46 +43,32 @@ export const createUserConfig = (code: string): UserConfig => {
40
43
  workspaceFolder: {
41
44
  index: 0,
42
45
  name: 'workspace',
43
- uri: vscode.Uri.parse('/workspace/')
46
+ uri: vscode.Uri.parse(workspaceRoot)
44
47
  },
45
48
  },
46
49
  },
47
50
  wrapperConfig: {
48
51
  serviceConfig: {
49
52
  userServices: {
53
+ ...getEditorServiceOverride(useOpenEditorStub),
50
54
  ...getKeybindingsServiceOverride()
51
55
  },
52
56
  debugLogging: true
53
57
  },
54
58
  editorAppConfig: {
55
59
  $type: 'extended',
56
- languageId: 'python',
57
- codeUri: '/workspace/python.py',
58
- extensions: [{
59
- config: {
60
- name: 'python-client',
61
- publisher: 'monaco-languageclient-project',
62
- version: '1.0.0',
63
- engines: {
64
- vscode: '^1.85.0'
65
- },
66
- contributes: {
67
- languages: [{
68
- id: 'python',
69
- extensions: ['.py', 'pyi'],
70
- aliases: ['python'],
71
- mimetypes: ['application/python'],
72
- }],
73
- }
60
+ codeResources: {
61
+ main: {
62
+ text: code,
63
+ uri: codeUri
74
64
  }
75
- }],
65
+ },
76
66
  userConfiguration: {
77
67
  json: JSON.stringify({
78
68
  'workbench.colorTheme': 'Default Dark Modern'
79
69
  })
80
70
  },
81
- useDiffEditor: false,
82
- code
71
+ useDiffEditor: false
83
72
  }
84
73
  },
85
74
  loggerConfig: {
@@ -0,0 +1,4 @@
1
+ from hello2 import print_hello
2
+
3
+ print_hello()
4
+ print("Hello Moon!")
@@ -0,0 +1,2 @@
1
+ def print_hello():
2
+ print("Hello World!")