@theia/plugin-ext 1.18.0-next.de7b81be → 1.20.0

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 (258) hide show
  1. package/LICENSE +642 -0
  2. package/README.md +5 -0
  3. package/lib/common/connection.d.ts +1 -2
  4. package/lib/common/connection.d.ts.map +1 -1
  5. package/lib/common/connection.js.map +1 -1
  6. package/lib/common/plugin-api-rpc-model.d.ts +4 -0
  7. package/lib/common/plugin-api-rpc-model.d.ts.map +1 -1
  8. package/lib/common/plugin-api-rpc-model.js.map +1 -1
  9. package/lib/common/plugin-api-rpc.d.ts +30 -10
  10. package/lib/common/plugin-api-rpc.d.ts.map +1 -1
  11. package/lib/common/plugin-api-rpc.js +21 -1
  12. package/lib/common/plugin-api-rpc.js.map +1 -1
  13. package/lib/common/plugin-protocol.d.ts +2 -1
  14. package/lib/common/plugin-protocol.d.ts.map +1 -1
  15. package/lib/common/plugin-protocol.js.map +1 -1
  16. package/lib/hosted/browser/hosted-plugin.d.ts +5 -6
  17. package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
  18. package/lib/hosted/browser/hosted-plugin.js +19 -13
  19. package/lib/hosted/browser/hosted-plugin.js.map +1 -1
  20. package/lib/hosted/browser/worker/debug-stub.d.ts.map +1 -1
  21. package/lib/hosted/browser/worker/debug-stub.js +1 -0
  22. package/lib/hosted/browser/worker/debug-stub.js.map +1 -1
  23. package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts +1 -1
  24. package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts.map +1 -1
  25. package/lib/hosted/node/hosted-plugin-deployer-handler.js +14 -38
  26. package/lib/hosted/node/hosted-plugin-deployer-handler.js.map +1 -1
  27. package/lib/hosted/node/hosted-plugin-localization-service.d.ts +37 -0
  28. package/lib/hosted/node/hosted-plugin-localization-service.d.ts.map +1 -0
  29. package/lib/hosted/node/hosted-plugin-localization-service.js +197 -0
  30. package/lib/hosted/node/hosted-plugin-localization-service.js.map +1 -0
  31. package/lib/hosted/node/hosted-plugin-process.d.ts +2 -2
  32. package/lib/hosted/node/hosted-plugin-process.d.ts.map +1 -1
  33. package/lib/hosted/node/hosted-plugin-process.js +5 -7
  34. package/lib/hosted/node/hosted-plugin-process.js.map +1 -1
  35. package/lib/hosted/node/plugin-ext-hosted-backend-module.d.ts.map +1 -1
  36. package/lib/hosted/node/plugin-ext-hosted-backend-module.js +2 -0
  37. package/lib/hosted/node/plugin-ext-hosted-backend-module.js.map +1 -1
  38. package/lib/hosted/node/plugin-manifest-loader.d.ts +1 -1
  39. package/lib/hosted/node/plugin-manifest-loader.d.ts.map +1 -1
  40. package/lib/hosted/node/plugin-manifest-loader.js +4 -52
  41. package/lib/hosted/node/plugin-manifest-loader.js.map +1 -1
  42. package/lib/hosted/node/plugin-service.d.ts +3 -6
  43. package/lib/hosted/node/plugin-service.d.ts.map +1 -1
  44. package/lib/hosted/node/plugin-service.js +7 -40
  45. package/lib/hosted/node/plugin-service.js.map +1 -1
  46. package/lib/hosted/node/scanners/scanner-theia.d.ts +1 -1
  47. package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
  48. package/lib/hosted/node/scanners/scanner-theia.js +2 -1
  49. package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
  50. package/lib/main/browser/callhierarchy/callhierarchy-type-converters.d.ts.map +1 -1
  51. package/lib/main/browser/callhierarchy/callhierarchy-type-converters.js +6 -2
  52. package/lib/main/browser/callhierarchy/callhierarchy-type-converters.js.map +1 -1
  53. package/lib/main/browser/custom-editors/custom-editor-opener.d.ts +1 -2
  54. package/lib/main/browser/custom-editors/custom-editor-opener.d.ts.map +1 -1
  55. package/lib/main/browser/custom-editors/custom-editor-opener.js +2 -1
  56. package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
  57. package/lib/main/browser/custom-editors/custom-editors-main.d.ts.map +1 -1
  58. package/lib/main/browser/custom-editors/custom-editors-main.js +1 -2
  59. package/lib/main/browser/custom-editors/custom-editors-main.js.map +1 -1
  60. package/lib/main/browser/debug/debug-main.js +1 -1
  61. package/lib/main/browser/debug/debug-main.js.map +1 -1
  62. package/lib/main/browser/debug/plugin-debug-adapter-contribution.d.ts +1 -1
  63. package/lib/main/browser/debug/plugin-debug-adapter-contribution.d.ts.map +1 -1
  64. package/lib/main/browser/debug/plugin-debug-adapter-contribution.js +2 -2
  65. package/lib/main/browser/debug/plugin-debug-adapter-contribution.js.map +1 -1
  66. package/lib/main/browser/debug/plugin-debug-service.d.ts +8 -0
  67. package/lib/main/browser/debug/plugin-debug-service.d.ts.map +1 -1
  68. package/lib/main/browser/debug/plugin-debug-service.js +15 -0
  69. package/lib/main/browser/debug/plugin-debug-service.js.map +1 -1
  70. package/lib/main/browser/debug/plugin-debug-session-factory.d.ts +2 -2
  71. package/lib/main/browser/debug/plugin-debug-session-factory.d.ts.map +1 -1
  72. package/lib/main/browser/debug/plugin-debug-session-factory.js.map +1 -1
  73. package/lib/main/browser/dialogs/modal-notification.d.ts +3 -3
  74. package/lib/main/browser/dialogs/modal-notification.d.ts.map +1 -1
  75. package/lib/main/browser/dialogs/modal-notification.js +17 -6
  76. package/lib/main/browser/dialogs/modal-notification.js.map +1 -1
  77. package/lib/main/browser/editors-and-documents-main.d.ts.map +1 -1
  78. package/lib/main/browser/editors-and-documents-main.js +3 -4
  79. package/lib/main/browser/editors-and-documents-main.js.map +1 -1
  80. package/lib/main/browser/languages-main.js +1 -1
  81. package/lib/main/browser/languages-main.js.map +1 -1
  82. package/lib/main/browser/message-registry-main.js +1 -1
  83. package/lib/main/browser/message-registry-main.js.map +1 -1
  84. package/lib/main/browser/quick-open-main.d.ts +1 -1
  85. package/lib/main/browser/quick-open-main.d.ts.map +1 -1
  86. package/lib/main/browser/quick-open-main.js.map +1 -1
  87. package/lib/main/browser/tasks-main.d.ts.map +1 -1
  88. package/lib/main/browser/tasks-main.js +6 -0
  89. package/lib/main/browser/tasks-main.js.map +1 -1
  90. package/lib/main/browser/timeline-main.d.ts.map +1 -1
  91. package/lib/main/browser/timeline-main.js +1 -1
  92. package/lib/main/browser/timeline-main.js.map +1 -1
  93. package/lib/main/browser/view/plugin-view-registry.d.ts +3 -2
  94. package/lib/main/browser/view/plugin-view-registry.d.ts.map +1 -1
  95. package/lib/main/browser/view/plugin-view-registry.js +63 -23
  96. package/lib/main/browser/view/plugin-view-registry.js.map +1 -1
  97. package/lib/main/browser/view/plugin-view-widget.d.ts +2 -0
  98. package/lib/main/browser/view/plugin-view-widget.d.ts.map +1 -1
  99. package/lib/main/browser/view/plugin-view-widget.js +3 -1
  100. package/lib/main/browser/view/plugin-view-widget.js.map +1 -1
  101. package/lib/main/browser/view/tree-view-widget.d.ts +3 -7
  102. package/lib/main/browser/view/tree-view-widget.d.ts.map +1 -1
  103. package/lib/main/browser/view/tree-view-widget.js +26 -39
  104. package/lib/main/browser/view/tree-view-widget.js.map +1 -1
  105. package/lib/main/browser/webview/webview-frontend-security-warnings.d.ts.map +1 -1
  106. package/lib/main/browser/webview/webview-frontend-security-warnings.js +8 -5
  107. package/lib/main/browser/webview/webview-frontend-security-warnings.js.map +1 -1
  108. package/lib/main/browser/webview/webview-preferences.d.ts.map +1 -1
  109. package/lib/main/browser/webview/webview-preferences.js +3 -2
  110. package/lib/main/browser/webview/webview-preferences.js.map +1 -1
  111. package/lib/main/browser/webview/webview.d.ts +1 -1
  112. package/lib/main/browser/webview/webview.d.ts.map +1 -1
  113. package/lib/main/browser/webview/webview.js +1 -1
  114. package/lib/main/browser/webview/webview.js.map +1 -1
  115. package/lib/plugin/comments.d.ts.map +1 -1
  116. package/lib/plugin/comments.js +2 -3
  117. package/lib/plugin/comments.js.map +1 -1
  118. package/lib/plugin/custom-editors.d.ts +1 -2
  119. package/lib/plugin/custom-editors.d.ts.map +1 -1
  120. package/lib/plugin/custom-editors.js +2 -3
  121. package/lib/plugin/custom-editors.js.map +1 -1
  122. package/lib/plugin/decorations.d.ts.map +1 -1
  123. package/lib/plugin/decorations.js +2 -3
  124. package/lib/plugin/decorations.js.map +1 -1
  125. package/lib/plugin/document-data.d.ts.map +1 -1
  126. package/lib/plugin/document-data.js +1 -1
  127. package/lib/plugin/document-data.js.map +1 -1
  128. package/lib/plugin/documents.d.ts.map +1 -1
  129. package/lib/plugin/documents.js +1 -2
  130. package/lib/plugin/documents.js.map +1 -1
  131. package/lib/plugin/file-system-event-service-ext-impl.d.ts.map +1 -1
  132. package/lib/plugin/file-system-event-service-ext-impl.js +2 -3
  133. package/lib/plugin/file-system-event-service-ext-impl.js.map +1 -1
  134. package/lib/plugin/file-system-ext-impl.d.ts.map +1 -1
  135. package/lib/plugin/file-system-ext-impl.js +12 -13
  136. package/lib/plugin/file-system-ext-impl.js.map +1 -1
  137. package/lib/plugin/known-commands.spec.js +1 -2
  138. package/lib/plugin/known-commands.spec.js.map +1 -1
  139. package/lib/plugin/languages/call-hierarchy.d.ts +1 -1
  140. package/lib/plugin/languages/call-hierarchy.d.ts.map +1 -1
  141. package/lib/plugin/languages/call-hierarchy.js +8 -3
  142. package/lib/plugin/languages/call-hierarchy.js.map +1 -1
  143. package/lib/plugin/languages/rename.d.ts +1 -2
  144. package/lib/plugin/languages/rename.d.ts.map +1 -1
  145. package/lib/plugin/languages/rename.js.map +1 -1
  146. package/lib/plugin/languages.d.ts +1 -1
  147. package/lib/plugin/languages.d.ts.map +1 -1
  148. package/lib/plugin/languages.js.map +1 -1
  149. package/lib/plugin/message-registry.d.ts.map +1 -1
  150. package/lib/plugin/message-registry.js +3 -0
  151. package/lib/plugin/message-registry.js.map +1 -1
  152. package/lib/plugin/node/debug/debug.d.ts +4 -3
  153. package/lib/plugin/node/debug/debug.d.ts.map +1 -1
  154. package/lib/plugin/node/debug/debug.js +34 -15
  155. package/lib/plugin/node/debug/debug.js.map +1 -1
  156. package/lib/plugin/node/debug/plugin-debug-adapter-session.d.ts +3 -3
  157. package/lib/plugin/node/debug/plugin-debug-adapter-session.d.ts.map +1 -1
  158. package/lib/plugin/node/debug/plugin-debug-adapter-session.js.map +1 -1
  159. package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts +6 -4
  160. package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts.map +1 -1
  161. package/lib/plugin/node/debug/plugin-debug-adapter-starter.js +23 -13
  162. package/lib/plugin/node/debug/plugin-debug-adapter-starter.js.map +1 -1
  163. package/lib/plugin/plugin-context.d.ts.map +1 -1
  164. package/lib/plugin/plugin-context.js +8 -3
  165. package/lib/plugin/plugin-context.js.map +1 -1
  166. package/lib/plugin/plugin-manager.d.ts +2 -0
  167. package/lib/plugin/plugin-manager.d.ts.map +1 -1
  168. package/lib/plugin/plugin-manager.js +24 -3
  169. package/lib/plugin/plugin-manager.js.map +1 -1
  170. package/lib/plugin/plugin-storage.d.ts +4 -0
  171. package/lib/plugin/plugin-storage.d.ts.map +1 -1
  172. package/lib/plugin/plugin-storage.js +6 -1
  173. package/lib/plugin/plugin-storage.js.map +1 -1
  174. package/lib/plugin/preference-registry.spec.js.map +1 -1
  175. package/lib/plugin/quick-open.d.ts +1 -1
  176. package/lib/plugin/quick-open.d.ts.map +1 -1
  177. package/lib/plugin/quick-open.js +11 -6
  178. package/lib/plugin/quick-open.js.map +1 -1
  179. package/lib/plugin/tasks/tasks.d.ts +1 -3
  180. package/lib/plugin/tasks/tasks.d.ts.map +1 -1
  181. package/lib/plugin/tasks/tasks.js +3 -17
  182. package/lib/plugin/tasks/tasks.js.map +1 -1
  183. package/lib/plugin/timeline.d.ts.map +1 -1
  184. package/lib/plugin/timeline.js +1 -2
  185. package/lib/plugin/timeline.js.map +1 -1
  186. package/lib/plugin/type-converters.d.ts.map +1 -1
  187. package/lib/plugin/type-converters.js +12 -10
  188. package/lib/plugin/type-converters.js.map +1 -1
  189. package/lib/plugin/types-impl.d.ts +52 -0
  190. package/lib/plugin/types-impl.d.ts.map +1 -1
  191. package/lib/plugin/types-impl.js +79 -1
  192. package/lib/plugin/types-impl.js.map +1 -1
  193. package/lib/plugin/webviews.d.ts +1 -2
  194. package/lib/plugin/webviews.d.ts.map +1 -1
  195. package/lib/plugin/webviews.js.map +1 -1
  196. package/package.json +31 -27
  197. package/src/common/connection.ts +1 -2
  198. package/src/common/plugin-api-rpc-model.ts +4 -0
  199. package/src/common/plugin-api-rpc.ts +31 -9
  200. package/src/common/plugin-protocol.ts +2 -1
  201. package/src/hosted/browser/hosted-plugin.ts +19 -12
  202. package/src/hosted/browser/worker/debug-stub.ts +1 -0
  203. package/src/hosted/node/hosted-plugin-deployer-handler.ts +13 -40
  204. package/src/hosted/node/hosted-plugin-localization-service.ts +201 -0
  205. package/src/hosted/node/hosted-plugin-process.ts +4 -6
  206. package/src/hosted/node/plugin-ext-hosted-backend-module.ts +2 -0
  207. package/src/hosted/node/plugin-manifest-loader.ts +4 -56
  208. package/src/hosted/node/plugin-service.ts +7 -40
  209. package/src/hosted/node/scanners/scanner-theia.ts +3 -2
  210. package/src/main/browser/callhierarchy/callhierarchy-type-converters.ts +6 -2
  211. package/src/main/browser/custom-editors/custom-editor-opener.tsx +3 -3
  212. package/src/main/browser/custom-editors/custom-editors-main.ts +1 -2
  213. package/src/main/browser/debug/debug-main.ts +1 -1
  214. package/src/main/browser/debug/plugin-debug-adapter-contribution.ts +3 -3
  215. package/src/main/browser/debug/plugin-debug-service.ts +23 -0
  216. package/src/main/browser/debug/plugin-debug-session-factory.ts +3 -3
  217. package/src/main/browser/dialogs/modal-notification.ts +18 -7
  218. package/src/main/browser/dialogs/style/modal-notification.css +17 -2
  219. package/src/main/browser/editors-and-documents-main.ts +1 -2
  220. package/src/main/browser/languages-main.ts +1 -1
  221. package/src/main/browser/message-registry-main.ts +1 -1
  222. package/src/main/browser/quick-open-main.ts +1 -1
  223. package/src/main/browser/style/tree.css +4 -0
  224. package/src/main/browser/tasks-main.ts +7 -0
  225. package/src/main/browser/timeline-main.ts +1 -2
  226. package/src/main/browser/view/plugin-view-registry.ts +67 -25
  227. package/src/main/browser/view/plugin-view-widget.ts +7 -2
  228. package/src/main/browser/view/tree-view-widget.tsx +43 -65
  229. package/src/main/browser/webview/pre/host.js +20 -12
  230. package/src/main/browser/webview/pre/main.js +0 -1
  231. package/src/main/browser/webview/webview-frontend-security-warnings.ts +8 -7
  232. package/src/main/browser/webview/webview-preferences.ts +3 -2
  233. package/src/main/browser/webview/webview.ts +1 -1
  234. package/src/plugin/comments.ts +1 -2
  235. package/src/plugin/custom-editors.ts +2 -4
  236. package/src/plugin/decorations.ts +1 -2
  237. package/src/plugin/document-data.ts +1 -2
  238. package/src/plugin/documents.ts +1 -2
  239. package/src/plugin/file-system-event-service-ext-impl.ts +1 -2
  240. package/src/plugin/file-system-ext-impl.ts +1 -2
  241. package/src/plugin/known-commands.spec.ts +1 -2
  242. package/src/plugin/languages/call-hierarchy.ts +14 -5
  243. package/src/plugin/languages/rename.ts +1 -2
  244. package/src/plugin/languages.ts +3 -1
  245. package/src/plugin/message-registry.ts +3 -1
  246. package/src/plugin/node/debug/debug.ts +40 -19
  247. package/src/plugin/node/debug/plugin-debug-adapter-session.ts +3 -3
  248. package/src/plugin/node/debug/plugin-debug-adapter-starter.ts +24 -14
  249. package/src/plugin/plugin-context.ts +21 -10
  250. package/src/plugin/plugin-manager.ts +26 -4
  251. package/src/plugin/plugin-storage.ts +7 -2
  252. package/src/plugin/preference-registry.spec.ts +1 -2
  253. package/src/plugin/quick-open.ts +14 -10
  254. package/src/plugin/tasks/tasks.ts +4 -18
  255. package/src/plugin/timeline.ts +1 -2
  256. package/src/plugin/type-converters.ts +14 -12
  257. package/src/plugin/types-impl.ts +74 -0
  258. package/src/plugin/webviews.ts +1 -2
@@ -14,68 +14,16 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
- /* eslint-disable @typescript-eslint/no-explicit-any */
18
-
19
17
  import * as path from 'path';
20
18
  import * as fs from '@theia/core/shared/fs-extra';
21
19
 
22
- const NLS_REGEX = /^%([\w\d.-]+)%$/i;
23
-
24
- export async function loadManifest(pluginPath: string, locale?: string): Promise<any> {
25
- const [manifest, translations] = await Promise.all([
26
- fs.readJson(path.join(pluginPath, 'package.json')),
27
- loadTranslations(pluginPath, locale)
28
- ]);
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ export async function loadManifest(pluginPath: string): Promise<any> {
22
+ const manifest = await fs.readJson(path.join(pluginPath, 'package.json'));
29
23
  // translate vscode builtins, as they are published with a prefix. See https://github.com/theia-ide/vscode-builtin-extensions/blob/master/src/republish.js#L50
30
24
  const built_prefix = '@theia/vscode-builtin-';
31
25
  if (manifest && manifest.name && manifest.name.startsWith(built_prefix)) {
32
26
  manifest.name = manifest.name.substr(built_prefix.length);
33
27
  }
34
- return manifest && translations && Object.keys(translations).length ?
35
- localize(manifest, translations) :
36
- manifest;
37
- }
38
-
39
- async function loadTranslations(pluginPath: string, locale?: string): Promise<any> {
40
- try {
41
- const localizedPluginPath = path.join(pluginPath, `package.nls.${locale}.json`);
42
- if (await fs.pathExists(localizedPluginPath)) {
43
- return await fs.readJson(localizedPluginPath);
44
- } else {
45
- return await fs.readJson(path.join(pluginPath, 'package.nls.json'));
46
- }
47
- } catch (e) {
48
- if (e.code !== 'ENOENT') {
49
- throw e;
50
- }
51
- return {};
52
- }
53
- }
54
-
55
- function localize(value: any, translations: {
56
- [key: string]: string
57
- }): any {
58
- if (typeof value === 'string') {
59
- const match = NLS_REGEX.exec(value);
60
- return match && translations[match[1]] || value;
61
- }
62
- if (Array.isArray(value)) {
63
- const result = [];
64
- for (const item of value) {
65
- result.push(localize(item, translations));
66
- }
67
- return result;
68
- }
69
- if (value === null) {
70
- return value;
71
- }
72
- if (typeof value === 'object') {
73
- const result: { [key: string]: any } = {};
74
- // eslint-disable-next-line guard-for-in
75
- for (const propertyName in value) {
76
- result[propertyName] = localize(value[propertyName], translations);
77
- }
78
- return result;
79
- }
80
- return value;
28
+ return manifest;
81
29
  }
@@ -16,13 +16,11 @@
16
16
  import { injectable, inject, named, postConstruct } from '@theia/core/shared/inversify';
17
17
  import { HostedPluginServer, HostedPluginClient, PluginDeployer, GetDeployedPluginsParams, DeployedPlugin } from '../../common/plugin-protocol';
18
18
  import { HostedPluginSupport } from './hosted-plugin';
19
- import { ILogger, Disposable } from '@theia/core';
20
- import { ContributionProvider } from '@theia/core';
19
+ import { ILogger, Disposable, ContributionProvider } from '@theia/core';
21
20
  import { ExtPluginApiProvider, ExtPluginApi } from '../../common/plugin-ext-api-contribution';
22
21
  import { HostedPluginDeployerHandler } from './hosted-plugin-deployer-handler';
23
22
  import { PluginDeployerImpl } from '../../main/node/plugin-deployer-impl';
24
- import { LocalizationProvider } from '@theia/core/lib/node/i18n/localization-provider';
25
- import { loadManifest } from './plugin-manifest-loader';
23
+ import { HostedPluginLocalizationService } from './hosted-plugin-localization-service';
26
24
 
27
25
  @injectable()
28
26
  export class HostedPluginServerImpl implements HostedPluginServer {
@@ -35,8 +33,8 @@ export class HostedPluginServerImpl implements HostedPluginServer {
35
33
  @inject(PluginDeployer)
36
34
  protected readonly pluginDeployer: PluginDeployerImpl;
37
35
 
38
- @inject(LocalizationProvider)
39
- protected readonly localizationProvider: LocalizationProvider;
36
+ @inject(HostedPluginLocalizationService)
37
+ protected readonly localizationService: HostedPluginLocalizationService;
40
38
 
41
39
  @inject(ContributionProvider)
42
40
  @named(Symbol.for(ExtPluginApiProvider))
@@ -90,8 +88,7 @@ export class HostedPluginServerImpl implements HostedPluginServer {
90
88
  if (!pluginIds.length) {
91
89
  return [];
92
90
  }
93
- const locale = this.localizationProvider.getCurrentLanguage();
94
- const plugins = [];
91
+ const plugins: DeployedPlugin[] = [];
95
92
  let extraDeployedPlugins: Map<string, DeployedPlugin> | undefined;
96
93
  for (const pluginId of pluginIds) {
97
94
  let plugin = this.deployerHandler.getDeployedPlugin(pluginId);
@@ -105,10 +102,10 @@ export class HostedPluginServerImpl implements HostedPluginServer {
105
102
  plugin = extraDeployedPlugins.get(pluginId);
106
103
  }
107
104
  if (plugin) {
108
- plugins.push(await this.localizePlugin(plugin, locale));
105
+ plugins.push(plugin);
109
106
  }
110
107
  }
111
- return plugins;
108
+ return Promise.all(plugins.map(plugin => this.localizationService.localizePlugin(plugin)));
112
109
  }
113
110
 
114
111
  onMessage(pluginHostId: string, message: string): Promise<void> {
@@ -119,34 +116,4 @@ export class HostedPluginServerImpl implements HostedPluginServer {
119
116
  getExtPluginAPI(): Promise<ExtPluginApi[]> {
120
117
  return Promise.resolve(this.extPluginAPIContributions.getContributions().map(p => p.provideApi()));
121
118
  }
122
-
123
- protected async localizePlugin(plugin: DeployedPlugin, locale: string): Promise<DeployedPlugin> {
124
- const packagePath = plugin.metadata.model.packagePath;
125
- const translatedManifest = await loadManifest(packagePath, locale);
126
- this.mergeContributes(plugin.contributes, translatedManifest.contributes);
127
- return plugin;
128
- }
129
-
130
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
131
- protected mergeContributes(main: any, other: any): void {
132
- if (main && other) {
133
- if (Array.isArray(main) && Array.isArray(other)) {
134
- for (let i = 0; i < main.length && i < other.length; i++) {
135
- if (typeof main[i] === 'object' && typeof other[i] === 'object') {
136
- this.mergeContributes(main[i], other[i]);
137
- }
138
- }
139
- } else {
140
- for (const [key, value] of Object.entries(main)) {
141
- if (key in other) {
142
- if (typeof value === 'string') {
143
- main[key] = other[key];
144
- } else if (typeof value === 'object' && typeof other[key] === 'object') {
145
- this.mergeContributes(main[key], other[key]);
146
- }
147
- }
148
- }
149
- }
150
- }
151
- }
152
119
  }
@@ -73,7 +73,7 @@ import {
73
73
  ProblemPatternContribution,
74
74
  TaskDefinition
75
75
  } from '@theia/task/lib/common/task-protocol';
76
- import { ColorDefinition } from '@theia/core/lib/browser/color-registry';
76
+ import { ColorDefinition } from '@theia/core/lib/common/color';
77
77
  import { ResourceLabelFormatter } from '@theia/core/lib/common/label-protocol';
78
78
  import { PluginUriFactory } from './plugin-uri-factory';
79
79
 
@@ -217,7 +217,7 @@ export class TheiaPluginScanner implements PluginScanner {
217
217
 
218
218
  for (const location of Object.keys(viewsContainers)) {
219
219
  const containers = this.readViewsContainers(viewsContainers[location], rawPlugin);
220
- const loc = location === 'activitybar' ? 'left' : location;
220
+ const loc = location === 'activitybar' ? 'left' : location === 'panel' ? 'bottom' : location;
221
221
  if (contributions.viewsContainers[loc]) {
222
222
  contributions.viewsContainers[loc] = contributions.viewsContainers[loc].concat(containers);
223
223
  } else {
@@ -381,6 +381,7 @@ export class TheiaPluginScanner implements PluginScanner {
381
381
  throw new Error(`Could not read json file '${packageTranslation.path}'.`);
382
382
  }
383
383
  translation.id = packageTranslation.id;
384
+ translation.path = packageTranslation.path;
384
385
  return translation;
385
386
  }
386
387
 
@@ -151,7 +151,9 @@ export function toDefinition(definition: model.CallHierarchyDefinition | undefin
151
151
  selectionRange: toRange(definition.selectionRange),
152
152
  symbolName: definition.name,
153
153
  symbolKind: SymbolKindConverter.toSymbolKind(definition.kind),
154
- containerName: undefined
154
+ containerName: undefined,
155
+ tags: definition.tags,
156
+ data: definition.data,
155
157
  };
156
158
  }
157
159
 
@@ -161,7 +163,9 @@ export function fromDefinition(definition: CallHierarchyDefinition): model.CallH
161
163
  range: fromRange(definition.location.range),
162
164
  selectionRange: fromRange(definition.selectionRange),
163
165
  name: definition.symbolName,
164
- kind: SymbolKindConverter.fromSymbolKind(definition.symbolKind)
166
+ kind: SymbolKindConverter.fromSymbolKind(definition.symbolKind),
167
+ tags: definition.tags,
168
+ data: definition.data,
165
169
  };
166
170
  }
167
171
 
@@ -17,9 +17,8 @@
17
17
  import { inject } from '@theia/core/shared/inversify';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
  import { ApplicationShell, OpenerOptions, OpenHandler, Widget, WidgetManager } from '@theia/core/lib/browser';
20
- import { CustomEditorPriority, CustomEditorSelector } from '../../../common';
20
+ import { CustomEditor, CustomEditorPriority, CustomEditorSelector } from '../../../common';
21
21
  import * as glob from './glob';
22
- import { CustomEditor } from '../../../common';
23
22
  import { CustomEditorWidget } from './custom-editor-widget';
24
23
  import { v4 } from 'uuid';
25
24
  import { Emitter } from '@theia/core';
@@ -56,7 +55,8 @@ export class CustomEditorOpener implements OpenHandler {
56
55
  switch (this.editor.priority) {
57
56
  case CustomEditorPriority.default: return 500;
58
57
  case CustomEditorPriority.builtin: return 400;
59
- case CustomEditorPriority.option: return 300;
58
+ /** `option` should not open the custom-editor by default. */
59
+ case CustomEditorPriority.option: return 1;
60
60
  default: return 200;
61
61
  }
62
62
  }
@@ -20,7 +20,7 @@
20
20
  // some code copied and modified from https://github.com/microsoft/vscode/blob/53eac52308c4611000a171cc7bf1214293473c78/src/vs/workbench/api/browser/mainThreadCustomEditors.ts
21
21
 
22
22
  import { interfaces } from '@theia/core/shared/inversify';
23
- import { MAIN_RPC_CONTEXT, CustomEditorsMain, CustomEditorsExt, CustomTextEditorCapabilities } from '../../../common/plugin-api-rpc';
23
+ import { MAIN_RPC_CONTEXT, CustomEditorsMain, CustomEditorsExt, CustomTextEditorCapabilities, EditorPosition } from '../../../common/plugin-api-rpc';
24
24
  import { RPCProtocol } from '../../../common/rpc-protocol';
25
25
  import { HostedPluginSupport } from '../../../hosted/browser/hosted-plugin';
26
26
  import { PluginCustomEditorRegistry } from './plugin-custom-editor-registry';
@@ -43,7 +43,6 @@ import { ApplicationShell, DefaultUriLabelProviderContribution, Saveable, SaveOp
43
43
  import { WebviewOptions, WebviewPanelOptions, ViewColumn } from '@theia/plugin';
44
44
  import { WebviewWidgetIdentifier } from '../webview/webview';
45
45
  import { EditorPreferences } from '@theia/editor/lib/browser';
46
- import { EditorPosition } from '../../../common/plugin-api-rpc';
47
46
 
48
47
  const enum CustomEditorModelType {
49
48
  Custom,
@@ -38,7 +38,7 @@ import { DebugProtocol } from 'vscode-debugprotocol';
38
38
  import { DebugConfigurationManager } from '@theia/debug/lib/browser/debug-configuration-manager';
39
39
  import { TerminalService } from '@theia/terminal/lib/browser/base/terminal-service';
40
40
  import { MessageClient } from '@theia/core/lib/common/message-service-protocol';
41
- import { OutputChannelManager } from '@theia/output/lib/common/output-channel';
41
+ import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
42
42
  import { DebugPreferences } from '@theia/debug/lib/browser/debug-preferences';
43
43
  import { PluginDebugAdapterContribution } from './plugin-debug-adapter-contribution';
44
44
  import { PluginDebugSessionContributionRegistrator, PluginDebugSessionContributionRegistry } from './plugin-debug-session-contribution-registry';
@@ -14,7 +14,7 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
- import { DebugExt, } from '../../../common/plugin-api-rpc';
17
+ import { DebugExt } from '../../../common/plugin-api-rpc';
18
18
  import { DebugConfiguration } from '@theia/debug/lib/common/debug-configuration';
19
19
  import { MaybePromise } from '@theia/core/lib/common/types';
20
20
  import { DebuggerDescription } from '@theia/debug/lib/common/debug-service';
@@ -37,8 +37,8 @@ export class PluginDebugAdapterContribution {
37
37
  return this.description.label;
38
38
  }
39
39
 
40
- async provideDebugConfigurations(workspaceFolderUri: string | undefined): Promise<DebugConfiguration[]> {
41
- return this.debugExt.$provideDebugConfigurations(this.type, workspaceFolderUri);
40
+ async provideDebugConfigurations(workspaceFolderUri: string | undefined, dynamic: boolean = false): Promise<DebugConfiguration[]> {
41
+ return this.debugExt.$provideDebugConfigurations(this.type, workspaceFolderUri, dynamic);
42
42
  }
43
43
 
44
44
  async resolveDebugConfiguration(config: DebugConfiguration, workspaceFolderUri: string | undefined): Promise<DebugConfiguration | undefined> {
@@ -25,6 +25,7 @@ import { WorkspaceService } from '@theia/workspace/lib/browser';
25
25
  import { DebuggerContribution } from '../../../common/plugin-protocol';
26
26
  import { DebugRequestTypes } from '@theia/debug/lib/browser/debug-session-connection';
27
27
  import * as theia from '@theia/plugin';
28
+
28
29
  /**
29
30
  * Debug adapter contribution registrator.
30
31
  */
@@ -111,6 +112,28 @@ export class PluginDebugService implements DebugService, PluginDebugAdapterContr
111
112
  }
112
113
  }
113
114
 
115
+ async provideDynamicDebugConfigurations(): Promise<{ type: string, configurations: DebugConfiguration[] }[]> {
116
+ const result: Promise<{ type: string, configurations: theia.DebugConfiguration[] }>[] = [];
117
+
118
+ for (const [type, contributor] of this.contributors.entries()) {
119
+ const typeConfigurations = this.resolveDynamicConfigurationsForType(type, contributor);
120
+ result.push(typeConfigurations);
121
+ }
122
+
123
+ return Promise.all(result);
124
+ }
125
+
126
+ protected async resolveDynamicConfigurationsForType(
127
+ type: string,
128
+ contributor: PluginDebugAdapterContribution): Promise<{ type: string, configurations: DebugConfiguration[] }> {
129
+
130
+ const configurations = await contributor.provideDebugConfigurations(undefined, true);
131
+ for (const configuration of configurations) {
132
+ configuration.dynamic = true;
133
+ }
134
+ return { type, configurations };
135
+ }
136
+
114
137
  async resolveDebugConfiguration(config: DebugConfiguration, workspaceFolderUri: string | undefined): Promise<DebugConfiguration> {
115
138
  let resolved = config;
116
139
 
@@ -14,13 +14,13 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
- import { DefaultDebugSessionFactory, } from '@theia/debug/lib/browser/debug-session-contribution';
17
+ import { DefaultDebugSessionFactory } from '@theia/debug/lib/browser/debug-session-contribution';
18
18
  import { TerminalService } from '@theia/terminal/lib/browser/base/terminal-service';
19
19
  import { EditorManager } from '@theia/editor/lib/browser/editor-manager';
20
20
  import { BreakpointManager } from '@theia/debug/lib/browser/breakpoint/breakpoint-manager';
21
21
  import { LabelProvider } from '@theia/core/lib/browser/label-provider';
22
22
  import { MessageClient } from '@theia/core/lib/common/message-service-protocol';
23
- import { OutputChannelManager } from '@theia/output/lib/common/output-channel';
23
+ import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
24
24
  import { DebugPreferences } from '@theia/debug/lib/browser/debug-preferences';
25
25
  import { DebugSessionOptions } from '@theia/debug/lib/browser/debug-session-options';
26
26
  import { DebugSession } from '@theia/debug/lib/browser/debug-session';
@@ -30,7 +30,7 @@ import { TerminalWidgetOptions, TerminalWidget } from '@theia/terminal/lib/brows
30
30
  import { TerminalOptionsExt } from '../../../common/plugin-api-rpc';
31
31
  import { FileService } from '@theia/filesystem/lib/browser/file-service';
32
32
  import { DebugContribution } from '@theia/debug/lib/browser/debug-contribution';
33
- import { ContributionProvider } from '@theia/core';
33
+ import { ContributionProvider } from '@theia/core/lib/common/contribution-provider';
34
34
 
35
35
  export class PluginDebugSession extends DebugSession {
36
36
  constructor(
@@ -18,7 +18,8 @@ import { Message } from '@theia/core/shared/@phosphor/messaging';
18
18
  import { codiconArray, Key } from '@theia/core/lib/browser';
19
19
  import { AbstractDialog } from '@theia/core/lib/browser/dialogs';
20
20
  import '../../../../src/main/browser/dialogs/style/modal-notification.css';
21
- import { MainMessageItem } from '../../../common/plugin-api-rpc';
21
+ import { MainMessageItem, MainMessageOptions } from '../../../common/plugin-api-rpc';
22
+ import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
22
23
 
23
24
  export enum MessageType {
24
25
  Error = 'error',
@@ -29,6 +30,7 @@ export enum MessageType {
29
30
  const NOTIFICATION = 'modal-Notification';
30
31
  const ICON = 'icon';
31
32
  const TEXT = 'text';
33
+ const DETAIL = 'detail';
32
34
 
33
35
  @injectable()
34
36
  export class ModalNotification extends AbstractDialog<string | undefined> {
@@ -36,7 +38,7 @@ export class ModalNotification extends AbstractDialog<string | undefined> {
36
38
  protected actionTitle: string | undefined;
37
39
 
38
40
  constructor() {
39
- super({ title: 'Theia' });
41
+ super({ title: FrontendApplicationConfigProvider.get().applicationName });
40
42
  }
41
43
 
42
44
  protected onCloseRequest(msg: Message): void {
@@ -48,12 +50,12 @@ export class ModalNotification extends AbstractDialog<string | undefined> {
48
50
  return this.actionTitle;
49
51
  }
50
52
 
51
- showDialog(messageType: MessageType, text: string, actions: MainMessageItem[]): Promise<string | undefined> {
52
- this.contentNode.appendChild(this.createMessageNode(messageType, text, actions));
53
+ showDialog(messageType: MessageType, text: string, options: MainMessageOptions, actions: MainMessageItem[]): Promise<string | undefined> {
54
+ this.contentNode.appendChild(this.createMessageNode(messageType, text, options, actions));
53
55
  return this.open();
54
56
  }
55
57
 
56
- protected createMessageNode(messageType: MessageType, text: string, actions: MainMessageItem[]): HTMLElement {
58
+ protected createMessageNode(messageType: MessageType, text: string, options: MainMessageOptions, actions: MainMessageItem[]): HTMLElement {
57
59
  const messageNode = document.createElement('div');
58
60
  messageNode.classList.add(NOTIFICATION);
59
61
 
@@ -67,6 +69,13 @@ export class ModalNotification extends AbstractDialog<string | undefined> {
67
69
  const textElement = textContainer.appendChild(document.createElement('p'));
68
70
  textElement.textContent = text;
69
71
 
72
+ if (options.detail) {
73
+ const detailContainer = textContainer.appendChild(document.createElement('div'));
74
+ detailContainer.classList.add(DETAIL);
75
+ const detailElement = detailContainer.appendChild(document.createElement('p'));
76
+ detailElement.textContent = options.detail;
77
+ }
78
+
70
79
  actions.forEach((action: MainMessageItem) => {
71
80
  const button = this.createButton(action.title);
72
81
  button.classList.add('main');
@@ -79,8 +88,10 @@ export class ModalNotification extends AbstractDialog<string | undefined> {
79
88
  },
80
89
  'click');
81
90
  });
82
- if (!actions.some(action => action.isCloseAffordance === true)) {
83
- this.appendCloseButton('close');
91
+ if (actions.length <= 0) {
92
+ this.appendAcceptButton();
93
+ } else if (!actions.some(action => action.isCloseAffordance === true)) {
94
+ this.appendCloseButton('Close');
84
95
  }
85
96
 
86
97
  return messageNode;
@@ -42,10 +42,10 @@
42
42
  order: 1;
43
43
  }
44
44
 
45
- .modal-Notification .icon .fa {
45
+ .modal-Notification .icon .codicon {
46
46
  line-height: inherit;
47
47
  vertical-align: middle;
48
- font-size: 120%;
48
+ font-size: calc(var(--theia-ui-padding)*5);
49
49
  color: var(--theia-editorInfo-foreground);
50
50
  }
51
51
 
@@ -106,3 +106,18 @@
106
106
  .modal-Notification .buttons > button:hover {
107
107
  background-color: var(--theia-button-hoverBackground);
108
108
  }
109
+
110
+ .modal-Notification .detail {
111
+ align-self: center;
112
+ order: 3;
113
+ flex: 1 100%;
114
+ color: var(--theia-descriptionForeground);
115
+ }
116
+
117
+ .modal-Notification .detail > p {
118
+ margin: calc(var(--theia-ui-padding) * 2) 0px 0px 0px;
119
+ }
120
+
121
+ .modal-Notification .text {
122
+ padding: calc(var(--theia-ui-padding)*1.5);
123
+ }
@@ -29,8 +29,7 @@ import { EditorModelService } from './text-editor-model-service';
29
29
  import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model';
30
30
  import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor';
31
31
  import { TextEditorMain } from './text-editor-main';
32
- import { Emitter } from '@theia/core';
33
- import { DisposableCollection } from '@theia/core';
32
+ import { DisposableCollection, Emitter } from '@theia/core';
34
33
  import { EditorManager, EditorWidget } from '@theia/editor/lib/browser';
35
34
 
36
35
  export class EditorsAndDocumentsMain implements Disposable {
@@ -774,7 +774,7 @@ export class LanguagesMainImpl implements LanguagesMain, Disposable {
774
774
  selector: language,
775
775
  getRootDefinition: (uri: DocumentUri, position: Position, cancellationToken: CancellationToken) =>
776
776
  this.proxy.$provideRootDefinition(handle, toUriComponents(uri), fromPosition(position), cancellationToken)
777
- .then(def => toDefinition(def)),
777
+ .then(def => Array.isArray(def) ? def.map(item => toDefinition(item)) : toDefinition(def)),
778
778
  getCallers: (definition: Definition, cancellationToken: CancellationToken) => this.proxy.$provideCallers(handle, fromDefinition(definition), cancellationToken)
779
779
  .then(result => {
780
780
  if (!result) {
@@ -40,7 +40,7 @@ export class MessageRegistryMainImpl implements MessageRegistryMain {
40
40
  type === MainMessageType.Warning ? MessageType.Warning :
41
41
  MessageType.Info;
42
42
  const modalNotification = new ModalNotification();
43
- return modalNotification.showDialog(messageType, message, actions);
43
+ return modalNotification.showDialog(messageType, message, options, actions);
44
44
  }
45
45
  switch (type) {
46
46
  case MainMessageType.Info:
@@ -194,7 +194,7 @@ export class QuickOpenMainImpl implements QuickOpenMain, Disposable {
194
194
 
195
195
  private sessions = new Map<number, QuickInputSession>();
196
196
 
197
- $createOrUpdate<T extends theia.QuickPickItem>(params: TransferQuickInput<T>): Promise<void> {
197
+ $createOrUpdate<T extends theia.QuickPickItem>(params: TransferQuickInput): Promise<void> {
198
198
  const sessionId = params.id;
199
199
  let session = this.sessions.get(sessionId);
200
200
  if (!session) {
@@ -40,3 +40,7 @@
40
40
  margin-bottom: 10px;
41
41
  margin-left: 17px;
42
42
  }
43
+
44
+ .theia-tree-view .theia-TreeNode:not(:hover):not(.theia-mod-selected) .theia-tree-view-inline-action {
45
+ display: none;
46
+ }
@@ -97,6 +97,13 @@ export class TasksMainImpl implements TasksMain, Disposable {
97
97
  this.proxy.$onDidEndTaskProcess(event.code, event.taskId);
98
98
  }
99
99
  }));
100
+
101
+ // Inform proxy about running tasks form previous session
102
+ this.$taskExecutions().then(executions => {
103
+ if (executions.length > 0) {
104
+ this.proxy.$initLoadedTasks(executions);
105
+ }
106
+ });
100
107
  }
101
108
 
102
109
  dispose(): void {
@@ -14,12 +14,11 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { interfaces } from '@theia/core/shared/inversify';
17
- import { TimelineMain } from '../../common/plugin-api-rpc';
17
+ import { MAIN_RPC_CONTEXT, TimelineExt, TimelineMain } from '../../common/plugin-api-rpc';
18
18
  import { RPCProtocol } from '../../common/rpc-protocol';
19
19
  import { TimelineService } from '@theia/timeline/lib/browser/timeline-service';
20
20
  import { Emitter } from '@theia/core/lib/common';
21
21
  import { URI } from '@theia/core/shared/vscode-uri';
22
- import { MAIN_RPC_CONTEXT, TimelineExt } from '../../common/plugin-api-rpc';
23
22
  import {
24
23
  InternalTimelineOptions,
25
24
  Timeline,