@theia/plugin-ext 1.66.0-next.0 → 1.66.0-next.27

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 (251) hide show
  1. package/lib/common/plugin-api-rpc-model.d.ts +1 -0
  2. package/lib/common/plugin-api-rpc-model.d.ts.map +1 -1
  3. package/lib/common/plugin-api-rpc.d.ts +96 -89
  4. package/lib/common/plugin-api-rpc.d.ts.map +1 -1
  5. package/lib/common/plugin-api-rpc.js +1 -0
  6. package/lib/common/plugin-api-rpc.js.map +1 -1
  7. package/lib/hosted/node/scanners/scanner-theia.d.ts +3 -0
  8. package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
  9. package/lib/hosted/node/scanners/scanner-theia.js +23 -1
  10. package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
  11. package/lib/main/browser/authentication-main.d.ts +1 -0
  12. package/lib/main/browser/authentication-main.d.ts.map +1 -1
  13. package/lib/main/browser/command-registry-main.d.ts +1 -0
  14. package/lib/main/browser/command-registry-main.d.ts.map +1 -1
  15. package/lib/main/browser/comments/comment-thread-widget.d.ts +1 -0
  16. package/lib/main/browser/comments/comment-thread-widget.d.ts.map +1 -1
  17. package/lib/main/browser/comments/comments-main.d.ts +1 -0
  18. package/lib/main/browser/comments/comments-main.d.ts.map +1 -1
  19. package/lib/main/browser/custom-editors/custom-editors-main.d.ts +1 -0
  20. package/lib/main/browser/custom-editors/custom-editors-main.d.ts.map +1 -1
  21. package/lib/main/browser/debug/plugin-debug-service.d.ts +1 -0
  22. package/lib/main/browser/debug/plugin-debug-service.d.ts.map +1 -1
  23. package/lib/main/browser/languages-main.d.ts +1 -0
  24. package/lib/main/browser/languages-main.d.ts.map +1 -1
  25. package/lib/main/browser/main-context.js +1 -1
  26. package/lib/main/browser/main-context.js.map +1 -1
  27. package/lib/main/browser/notebooks/notebooks-main.d.ts +1 -0
  28. package/lib/main/browser/notebooks/notebooks-main.d.ts.map +1 -1
  29. package/lib/main/browser/quick-open-main.d.ts +1 -0
  30. package/lib/main/browser/quick-open-main.d.ts.map +1 -1
  31. package/lib/main/browser/status-bar-message-registry-main.d.ts +4 -2
  32. package/lib/main/browser/status-bar-message-registry-main.d.ts.map +1 -1
  33. package/lib/main/browser/status-bar-message-registry-main.js +5 -2
  34. package/lib/main/browser/status-bar-message-registry-main.js.map +1 -1
  35. package/lib/main/browser/terminal-main.d.ts +1 -0
  36. package/lib/main/browser/terminal-main.d.ts.map +1 -1
  37. package/lib/main/browser/text-editor-model-service.js +1 -1
  38. package/lib/main/browser/text-editor-model-service.js.map +1 -1
  39. package/lib/main/browser/view/tree-view-decorator-service.d.ts +1 -0
  40. package/lib/main/browser/view/tree-view-decorator-service.d.ts.map +1 -1
  41. package/lib/main/browser/view/tree-view-widget.d.ts +1 -0
  42. package/lib/main/browser/view/tree-view-widget.d.ts.map +1 -1
  43. package/lib/main/browser/view/tree-views-main.d.ts +1 -0
  44. package/lib/main/browser/view/tree-views-main.d.ts.map +1 -1
  45. package/lib/main/browser/webview/webview.d.ts +1 -0
  46. package/lib/main/browser/webview/webview.d.ts.map +1 -1
  47. package/lib/main/browser/webview-views/webview-views-main.d.ts +1 -0
  48. package/lib/main/browser/webview-views/webview-views-main.d.ts.map +1 -1
  49. package/lib/main/browser/webviews-main.d.ts +1 -0
  50. package/lib/main/browser/webviews-main.d.ts.map +1 -1
  51. package/lib/main/browser/workspace-main.d.ts +1 -0
  52. package/lib/main/browser/workspace-main.d.ts.map +1 -1
  53. package/lib/plugin/authentication-ext.d.ts +1 -0
  54. package/lib/plugin/authentication-ext.d.ts.map +1 -1
  55. package/lib/plugin/clipboard-ext.d.ts +1 -0
  56. package/lib/plugin/clipboard-ext.d.ts.map +1 -1
  57. package/lib/plugin/command-registry.d.ts +1 -0
  58. package/lib/plugin/command-registry.d.ts.map +1 -1
  59. package/lib/plugin/comments.d.ts +1 -0
  60. package/lib/plugin/comments.d.ts.map +1 -1
  61. package/lib/plugin/custom-editors.d.ts +1 -0
  62. package/lib/plugin/custom-editors.d.ts.map +1 -1
  63. package/lib/plugin/debug/debug-ext.d.ts +1 -0
  64. package/lib/plugin/debug/debug-ext.d.ts.map +1 -1
  65. package/lib/plugin/debug/plugin-debug-adapter-creator.d.ts +1 -0
  66. package/lib/plugin/debug/plugin-debug-adapter-creator.d.ts.map +1 -1
  67. package/lib/plugin/debug/plugin-debug-adapter-session.d.ts +1 -0
  68. package/lib/plugin/debug/plugin-debug-adapter-session.d.ts.map +1 -1
  69. package/lib/plugin/debug/plugin-debug-adapter-tracker.d.ts +1 -0
  70. package/lib/plugin/debug/plugin-debug-adapter-tracker.d.ts.map +1 -1
  71. package/lib/plugin/decorations.d.ts +1 -0
  72. package/lib/plugin/decorations.d.ts.map +1 -1
  73. package/lib/plugin/dialogs.d.ts +1 -0
  74. package/lib/plugin/dialogs.d.ts.map +1 -1
  75. package/lib/plugin/document-data.d.ts +1 -0
  76. package/lib/plugin/document-data.d.ts.map +1 -1
  77. package/lib/plugin/documents.d.ts +1 -0
  78. package/lib/plugin/documents.d.ts.map +1 -1
  79. package/lib/plugin/env.d.ts +1 -0
  80. package/lib/plugin/env.d.ts.map +1 -1
  81. package/lib/plugin/file-system-event-service-ext-impl.d.ts +1 -0
  82. package/lib/plugin/file-system-event-service-ext-impl.d.ts.map +1 -1
  83. package/lib/plugin/file-system-ext-impl.d.ts +1 -0
  84. package/lib/plugin/file-system-ext-impl.d.ts.map +1 -1
  85. package/lib/plugin/label-service.d.ts +1 -0
  86. package/lib/plugin/label-service.d.ts.map +1 -1
  87. package/lib/plugin/languages/call-hierarchy.d.ts +1 -0
  88. package/lib/plugin/languages/call-hierarchy.d.ts.map +1 -1
  89. package/lib/plugin/languages/code-action.d.ts +1 -0
  90. package/lib/plugin/languages/code-action.d.ts.map +1 -1
  91. package/lib/plugin/languages/color.d.ts +1 -0
  92. package/lib/plugin/languages/color.d.ts.map +1 -1
  93. package/lib/plugin/languages/completion.d.ts +1 -0
  94. package/lib/plugin/languages/completion.d.ts.map +1 -1
  95. package/lib/plugin/languages/declaration.d.ts +1 -0
  96. package/lib/plugin/languages/declaration.d.ts.map +1 -1
  97. package/lib/plugin/languages/definition.d.ts +1 -0
  98. package/lib/plugin/languages/definition.d.ts.map +1 -1
  99. package/lib/plugin/languages/diagnostics.d.ts +1 -0
  100. package/lib/plugin/languages/diagnostics.d.ts.map +1 -1
  101. package/lib/plugin/languages/document-drop-edit.d.ts +1 -0
  102. package/lib/plugin/languages/document-drop-edit.d.ts.map +1 -1
  103. package/lib/plugin/languages/document-formatting.d.ts +1 -0
  104. package/lib/plugin/languages/document-formatting.d.ts.map +1 -1
  105. package/lib/plugin/languages/document-highlight.d.ts +1 -0
  106. package/lib/plugin/languages/document-highlight.d.ts.map +1 -1
  107. package/lib/plugin/languages/evaluatable-expression.d.ts +1 -0
  108. package/lib/plugin/languages/evaluatable-expression.d.ts.map +1 -1
  109. package/lib/plugin/languages/folding.d.ts +1 -0
  110. package/lib/plugin/languages/folding.d.ts.map +1 -1
  111. package/lib/plugin/languages/hover.d.ts +1 -0
  112. package/lib/plugin/languages/hover.d.ts.map +1 -1
  113. package/lib/plugin/languages/implementation.d.ts +1 -0
  114. package/lib/plugin/languages/implementation.d.ts.map +1 -1
  115. package/lib/plugin/languages/inlay-hints.d.ts +1 -0
  116. package/lib/plugin/languages/inlay-hints.d.ts.map +1 -1
  117. package/lib/plugin/languages/inline-completion.d.ts +1 -0
  118. package/lib/plugin/languages/inline-completion.d.ts.map +1 -1
  119. package/lib/plugin/languages/inline-values.d.ts +1 -0
  120. package/lib/plugin/languages/inline-values.d.ts.map +1 -1
  121. package/lib/plugin/languages/lens.d.ts +1 -0
  122. package/lib/plugin/languages/lens.d.ts.map +1 -1
  123. package/lib/plugin/languages/link-provider.d.ts +1 -0
  124. package/lib/plugin/languages/link-provider.d.ts.map +1 -1
  125. package/lib/plugin/languages/linked-editing-range.d.ts +1 -0
  126. package/lib/plugin/languages/linked-editing-range.d.ts.map +1 -1
  127. package/lib/plugin/languages/on-type-formatting.d.ts +1 -0
  128. package/lib/plugin/languages/on-type-formatting.d.ts.map +1 -1
  129. package/lib/plugin/languages/outline.d.ts +1 -0
  130. package/lib/plugin/languages/outline.d.ts.map +1 -1
  131. package/lib/plugin/languages/range-formatting.d.ts +1 -0
  132. package/lib/plugin/languages/range-formatting.d.ts.map +1 -1
  133. package/lib/plugin/languages/reference.d.ts +1 -0
  134. package/lib/plugin/languages/reference.d.ts.map +1 -1
  135. package/lib/plugin/languages/rename.d.ts +1 -0
  136. package/lib/plugin/languages/rename.d.ts.map +1 -1
  137. package/lib/plugin/languages/selection-range.d.ts +1 -0
  138. package/lib/plugin/languages/selection-range.d.ts.map +1 -1
  139. package/lib/plugin/languages/semantic-highlighting.d.ts +1 -0
  140. package/lib/plugin/languages/semantic-highlighting.d.ts.map +1 -1
  141. package/lib/plugin/languages/signature.d.ts +1 -0
  142. package/lib/plugin/languages/signature.d.ts.map +1 -1
  143. package/lib/plugin/languages/type-definition.d.ts +1 -0
  144. package/lib/plugin/languages/type-definition.d.ts.map +1 -1
  145. package/lib/plugin/languages/type-hierarchy.d.ts +1 -0
  146. package/lib/plugin/languages/type-hierarchy.d.ts.map +1 -1
  147. package/lib/plugin/languages/util.d.ts +1 -0
  148. package/lib/plugin/languages/util.d.ts.map +1 -1
  149. package/lib/plugin/languages/workspace-symbol.d.ts +1 -0
  150. package/lib/plugin/languages/workspace-symbol.d.ts.map +1 -1
  151. package/lib/plugin/languages-utils.d.ts +1 -0
  152. package/lib/plugin/languages-utils.d.ts.map +1 -1
  153. package/lib/plugin/languages.d.ts +1 -0
  154. package/lib/plugin/languages.d.ts.map +1 -1
  155. package/lib/plugin/lm-ext.d.ts +1 -0
  156. package/lib/plugin/lm-ext.d.ts.map +1 -1
  157. package/lib/plugin/markdown-string.d.ts +1 -0
  158. package/lib/plugin/markdown-string.d.ts.map +1 -1
  159. package/lib/plugin/message-registry.d.ts +1 -0
  160. package/lib/plugin/message-registry.d.ts.map +1 -1
  161. package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.d.ts +1 -0
  162. package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.d.ts.map +1 -1
  163. package/lib/plugin/notebook/notebook-document.d.ts +1 -0
  164. package/lib/plugin/notebook/notebook-document.d.ts.map +1 -1
  165. package/lib/plugin/notebook/notebook-documents.d.ts +1 -0
  166. package/lib/plugin/notebook/notebook-documents.d.ts.map +1 -1
  167. package/lib/plugin/notebook/notebook-editor.d.ts +1 -0
  168. package/lib/plugin/notebook/notebook-editor.d.ts.map +1 -1
  169. package/lib/plugin/notebook/notebook-editors.d.ts +1 -0
  170. package/lib/plugin/notebook/notebook-editors.d.ts.map +1 -1
  171. package/lib/plugin/notebook/notebook-kernels.d.ts +1 -0
  172. package/lib/plugin/notebook/notebook-kernels.d.ts.map +1 -1
  173. package/lib/plugin/notebook/notebook-renderers.d.ts +1 -0
  174. package/lib/plugin/notebook/notebook-renderers.d.ts.map +1 -1
  175. package/lib/plugin/notebook/notebooks.d.ts +1 -0
  176. package/lib/plugin/notebook/notebooks.d.ts.map +1 -1
  177. package/lib/plugin/notification.d.ts +1 -0
  178. package/lib/plugin/notification.d.ts.map +1 -1
  179. package/lib/plugin/output-channel/log-output-channel.d.ts +1 -0
  180. package/lib/plugin/output-channel/log-output-channel.d.ts.map +1 -1
  181. package/lib/plugin/output-channel/output-channel-item.d.ts +1 -0
  182. package/lib/plugin/output-channel/output-channel-item.d.ts.map +1 -1
  183. package/lib/plugin/output-channel-registry.d.ts +1 -0
  184. package/lib/plugin/output-channel-registry.d.ts.map +1 -1
  185. package/lib/plugin/plugin-context.d.ts +1 -0
  186. package/lib/plugin/plugin-context.d.ts.map +1 -1
  187. package/lib/plugin/plugin-context.js +1 -1
  188. package/lib/plugin/plugin-context.js.map +1 -1
  189. package/lib/plugin/plugin-manager.d.ts +1 -0
  190. package/lib/plugin/plugin-manager.d.ts.map +1 -1
  191. package/lib/plugin/plugin-storage.d.ts +1 -0
  192. package/lib/plugin/plugin-storage.d.ts.map +1 -1
  193. package/lib/plugin/preference-registry.d.ts +1 -0
  194. package/lib/plugin/preference-registry.d.ts.map +1 -1
  195. package/lib/plugin/quick-open.d.ts +1 -0
  196. package/lib/plugin/quick-open.d.ts.map +1 -1
  197. package/lib/plugin/scm.d.ts +1 -0
  198. package/lib/plugin/scm.d.ts.map +1 -1
  199. package/lib/plugin/secrets-ext.d.ts +1 -0
  200. package/lib/plugin/secrets-ext.d.ts.map +1 -1
  201. package/lib/plugin/status-bar/status-bar-item.d.ts +7 -1
  202. package/lib/plugin/status-bar/status-bar-item.d.ts.map +1 -1
  203. package/lib/plugin/status-bar/status-bar-item.js +68 -46
  204. package/lib/plugin/status-bar/status-bar-item.js.map +1 -1
  205. package/lib/plugin/status-bar-message-registry.d.ts +8 -4
  206. package/lib/plugin/status-bar-message-registry.d.ts.map +1 -1
  207. package/lib/plugin/status-bar-message-registry.js +18 -4
  208. package/lib/plugin/status-bar-message-registry.js.map +1 -1
  209. package/lib/plugin/tabs.d.ts +1 -0
  210. package/lib/plugin/tabs.d.ts.map +1 -1
  211. package/lib/plugin/tasks/task-provider.d.ts +1 -0
  212. package/lib/plugin/tasks/task-provider.d.ts.map +1 -1
  213. package/lib/plugin/tasks/tasks.d.ts +1 -0
  214. package/lib/plugin/tasks/tasks.d.ts.map +1 -1
  215. package/lib/plugin/terminal-ext.d.ts +1 -0
  216. package/lib/plugin/terminal-ext.d.ts.map +1 -1
  217. package/lib/plugin/test-item.d.ts +1 -0
  218. package/lib/plugin/test-item.d.ts.map +1 -1
  219. package/lib/plugin/tests.d.ts +1 -0
  220. package/lib/plugin/tests.d.ts.map +1 -1
  221. package/lib/plugin/text-editor.d.ts +1 -0
  222. package/lib/plugin/text-editor.d.ts.map +1 -1
  223. package/lib/plugin/text-editors.d.ts +1 -0
  224. package/lib/plugin/text-editors.d.ts.map +1 -1
  225. package/lib/plugin/timeline.d.ts +1 -0
  226. package/lib/plugin/timeline.d.ts.map +1 -1
  227. package/lib/plugin/tree/tree-views.d.ts +1 -0
  228. package/lib/plugin/tree/tree-views.d.ts.map +1 -1
  229. package/lib/plugin/type-converters.d.ts +1 -0
  230. package/lib/plugin/type-converters.d.ts.map +1 -1
  231. package/lib/plugin/types-impl.d.ts +1 -0
  232. package/lib/plugin/types-impl.d.ts.map +1 -1
  233. package/lib/plugin/uri-ext.d.ts +1 -0
  234. package/lib/plugin/uri-ext.d.ts.map +1 -1
  235. package/lib/plugin/webview-views.d.ts +1 -0
  236. package/lib/plugin/webview-views.d.ts.map +1 -1
  237. package/lib/plugin/webviews.d.ts +1 -0
  238. package/lib/plugin/webviews.d.ts.map +1 -1
  239. package/lib/plugin/window-state.d.ts +1 -0
  240. package/lib/plugin/window-state.d.ts.map +1 -1
  241. package/lib/plugin/workspace.d.ts +1 -0
  242. package/lib/plugin/workspace.d.ts.map +1 -1
  243. package/package.json +29 -29
  244. package/src/common/plugin-api-rpc.ts +11 -5
  245. package/src/hosted/node/scanners/scanner-theia.ts +26 -2
  246. package/src/main/browser/main-context.ts +1 -1
  247. package/src/main/browser/status-bar-message-registry-main.ts +9 -4
  248. package/src/main/browser/text-editor-model-service.ts +1 -1
  249. package/src/plugin/plugin-context.ts +2 -2
  250. package/src/plugin/status-bar/status-bar-item.ts +81 -55
  251. package/src/plugin/status-bar-message-registry.ts +19 -5
@@ -16,23 +16,27 @@
16
16
  import { interfaces } from '@theia/core/shared/inversify';
17
17
  import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
18
18
  import * as types from '../../plugin/types-impl';
19
- import { StatusBarMessageRegistryMain } from '../../common/plugin-api-rpc';
19
+ import { StatusBarMessageRegistryMain, StatusBarMessageRegistryExt, MAIN_RPC_CONTEXT } from '../../common/plugin-api-rpc';
20
20
  import { StatusBar, StatusBarAlignment, StatusBarEntry } from '@theia/core/lib/browser/status-bar/status-bar';
21
21
  import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
22
22
  import { MarkdownString } from '@theia/core/lib/common/markdown-rendering';
23
+ import { RPCProtocol } from '../../common/rpc-protocol';
24
+ import { CancellationToken } from '@theia/core';
23
25
 
24
26
  export class StatusBarMessageRegistryMainImpl implements StatusBarMessageRegistryMain, Disposable {
25
27
  private readonly delegate: StatusBar;
26
28
  private readonly entries = new Map<string, StatusBarEntry>();
29
+ private readonly proxy: StatusBarMessageRegistryExt;
27
30
  private readonly toDispose = new DisposableCollection(
28
31
  Disposable.create(() => { /* mark as not disposed */ })
29
32
  );
30
33
 
31
34
  protected readonly colorRegistry: ColorRegistry;
32
35
 
33
- constructor(container: interfaces.Container) {
36
+ constructor(container: interfaces.Container, rpc: RPCProtocol) {
34
37
  this.delegate = container.get(StatusBar);
35
38
  this.colorRegistry = container.get(ColorRegistry);
39
+ this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.STATUS_BAR_MESSAGE_REGISTRY_EXT);
36
40
  }
37
41
 
38
42
  dispose(): void {
@@ -46,7 +50,7 @@ export class StatusBarMessageRegistryMainImpl implements StatusBarMessageRegistr
46
50
  alignment: number,
47
51
  color: string | undefined,
48
52
  backgroundColor: string | undefined,
49
- tooltip: string | MarkdownString | undefined,
53
+ tooltip: string | MarkdownString | true | undefined,
50
54
  command: string | undefined,
51
55
  accessibilityInformation: types.AccessibilityInformation,
52
56
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -64,7 +68,8 @@ export class StatusBarMessageRegistryMainImpl implements StatusBarMessageRegistr
64
68
  color: color && (this.colorRegistry.getCurrentColor(color) || color),
65
69
  // In contrast to color, the backgroundColor must be a theme color. Thus, do not hand in the plain string if it cannot be resolved.
66
70
  backgroundColor: backgroundColor && (this.colorRegistry.getCurrentColor(backgroundColor)),
67
- tooltip,
71
+ // true is used as a serializable sentinel value to indicate that the tooltip can be retrieved asynchronously
72
+ tooltip: tooltip === true ? (token: CancellationToken) => this.proxy.$getMessage(id, token) : tooltip,
68
73
  command,
69
74
  accessibilityInformation,
70
75
  args
@@ -63,7 +63,7 @@ export class EditorModelService {
63
63
  });
64
64
 
65
65
  model.onModelWillSaveModel(async (e: WillSaveMonacoModelEvent) => {
66
- await Listener.await(e, this.onModelWillSaveListeners);
66
+ await Listener.awaitAll(e, this.onModelWillSaveListeners);
67
67
  });
68
68
 
69
69
  model.onDirtyChanged(_ => {
@@ -33,7 +33,7 @@ import {
33
33
  } from '../common/plugin-api-rpc';
34
34
  import { RPCProtocol } from '../common/rpc-protocol';
35
35
  import { MessageRegistryExt } from './message-registry';
36
- import { StatusBarMessageRegistryExt } from './status-bar-message-registry';
36
+ import { StatusBarMessageRegistryExtImpl } from './status-bar-message-registry';
37
37
  import { WindowStateExtImpl } from './window-state';
38
38
  import { WorkspaceExtImpl } from './workspace';
39
39
  import { EnvExtImpl } from './env';
@@ -335,7 +335,7 @@ export function createAPIFactory(
335
335
  const notebookRenderers = rpc.set(MAIN_RPC_CONTEXT.NOTEBOOK_RENDERERS_EXT, new NotebookRenderersExtImpl(rpc, notebooksExt));
336
336
  const notebookKernels = rpc.set(MAIN_RPC_CONTEXT.NOTEBOOK_KERNELS_EXT, new NotebookKernelsExtImpl(rpc, notebooksExt, commandRegistry, webviewExt, workspaceExt));
337
337
  const notebookDocuments = rpc.set(MAIN_RPC_CONTEXT.NOTEBOOK_DOCUMENTS_EXT, new NotebookDocumentsExtImpl(notebooksExt));
338
- const statusBarMessageRegistryExt = new StatusBarMessageRegistryExt(rpc, commandRegistry);
338
+ const statusBarMessageRegistryExt = rpc.set(MAIN_RPC_CONTEXT.STATUS_BAR_MESSAGE_REGISTRY_EXT, new StatusBarMessageRegistryExtImpl(rpc, commandRegistry));
339
339
  const terminalExt = rpc.set(MAIN_RPC_CONTEXT.TERMINAL_EXT, new TerminalServiceExtImpl(rpc));
340
340
  const outputChannelRegistryExt = rpc.set(MAIN_RPC_CONTEXT.OUTPUT_CHANNEL_REGISTRY_EXT, new OutputChannelRegistryExtImpl(rpc));
341
341
  const treeViewsExt = rpc.set(MAIN_RPC_CONTEXT.TREE_VIEWS_EXT, new TreeViewsExtImpl(rpc, commandRegistry));
@@ -37,6 +37,7 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
37
37
  private _name: string | undefined;
38
38
  private _text: string;
39
39
  private _tooltip: string | theia.MarkdownString | undefined;
40
+ private _tooltip2: string | theia.MarkdownString | undefined | ((token: theia.CancellationToken) => theia.ProviderResult<string | theia.MarkdownString>);
40
41
  private _color: string | ThemeColor | undefined;
41
42
  private _backgroundColor: ThemeColor | undefined;
42
43
  private _command: string | theia.Command;
@@ -47,12 +48,13 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
47
48
 
48
49
  _proxy: StatusBarMessageRegistryMain;
49
50
 
50
- constructor(_proxy: StatusBarMessageRegistryMain,
51
+ constructor(proxy: StatusBarMessageRegistryMain,
51
52
  private readonly commandRegistry: CommandRegistryImpl,
52
53
  alignment: StatusBarAlignment = StatusBarAlignment.Left,
53
54
  priority: number = 0,
54
- id = StatusBarItemImpl.nextId()) {
55
- this._proxy = _proxy;
55
+ id = StatusBarItemImpl.nextId(),
56
+ private onDispose?: () => void) {
57
+ this._proxy = proxy;
56
58
  this._alignment = alignment;
57
59
  this._priority = priority;
58
60
  this._id = id;
@@ -63,7 +65,7 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
63
65
  }
64
66
 
65
67
  public get alignment(): theia.StatusBarAlignment {
66
- return <theia.StatusBarAlignment>this._alignment;
68
+ return this._alignment;
67
69
  }
68
70
 
69
71
  public get priority(): number {
@@ -82,6 +84,17 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
82
84
  return this._tooltip;
83
85
  }
84
86
 
87
+ public get tooltip2(): string | theia.MarkdownString | undefined | ((token: theia.CancellationToken) => theia.ProviderResult<string | theia.MarkdownString>) {
88
+ if (typeof this._tooltip2 === 'function') {
89
+ const getTooltip = this._tooltip2.bind(this);
90
+ return (token: theia.CancellationToken) => Promise.resolve(getTooltip(token)).then(res => {
91
+ this.processTooltip(res);
92
+ return res;
93
+ });
94
+ }
95
+ return this._tooltip2;
96
+ }
97
+
85
98
  public get color(): string | ThemeColor | undefined {
86
99
  return this._color;
87
100
  }
@@ -108,57 +121,14 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
108
121
  this.update();
109
122
  }
110
123
 
111
- public set tooltip(tooltip: string | theia.MarkdownString | undefined) {
112
- if (tooltip && MarkdownString.isMarkdownString(tooltip)) {
113
- const markdownTooltip = tooltip;
114
- const content = markdownTooltip.value;
115
- // Find all command links in the markdown content
116
- const regex = /\[([^\]]+)\]\(command:([^?\s\)]+)(?:\?([^\s\)]+))?([^\)]*)\)/g;
117
- let match;
118
- let updatedContent = content;
119
-
120
- while ((match = regex.exec(content)) !== null) {
121
- const linkText = match[1];
122
- const commandId = match[2];
123
- const argsEncoded = match[3]; // This captures the encoded arguments
124
- const tooltipPart = match[4] || ''; // This captures any tooltip or additional content after the command and args
125
-
126
- let args: unknown[] = [];
127
- if (argsEncoded) {
128
- try {
129
- const decoded = decodeURIComponent(argsEncoded);
130
- args = JSON.parse(decoded);
131
- } catch (e) {
132
- console.error('Failed to parse command arguments:', e);
133
- }
134
- }
135
-
136
- const safeCommand = this.commandRegistry.converter.toSafeCommand(
137
- {
138
- command: commandId,
139
- title: linkText,
140
- arguments: Array.isArray(args) ? args : [args]
141
- },
142
- new DisposableCollection()
143
- );
144
-
145
- if (safeCommand?.id) {
146
- let newArgsPart = '';
147
- if (safeCommand.arguments && safeCommand.arguments.length > 0) {
148
- newArgsPart = `?${encodeURIComponent(JSON.stringify(safeCommand.arguments))}`;
149
- }
150
-
151
- const argsPart = argsEncoded ? `?${argsEncoded}` : '';
152
- const originalLink = `[${linkText}](command:${commandId}${argsPart}${tooltipPart})`;
153
- const safeLink = `[${linkText}](command:${safeCommand.id}${newArgsPart}${tooltipPart})`;
154
- updatedContent = updatedContent.replace(originalLink, safeLink);
155
- }
156
- }
124
+ public set tooltip2(tooltip: string | theia.MarkdownString | ((token: theia.CancellationToken) => theia.ProviderResult<string | theia.MarkdownString>) | undefined) {
125
+ this.processTooltip(tooltip);
126
+ this._tooltip2 = tooltip;
127
+ this.update();
128
+ }
157
129
 
158
- if (updatedContent !== content) {
159
- markdownTooltip.value = updatedContent;
160
- }
161
- }
130
+ public set tooltip(tooltip: string | theia.MarkdownString | undefined) {
131
+ this.processTooltip(tooltip);
162
132
  this._tooltip = tooltip;
163
133
  this.update();
164
134
  }
@@ -200,6 +170,59 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
200
170
  this._isVisible = false;
201
171
  }
202
172
 
173
+ private processTooltip(tooltip: string | theia.MarkdownString | ((token: theia.CancellationToken) => theia.ProviderResult<string | theia.MarkdownString>) | undefined): void {
174
+ if (!MarkdownString.isMarkdownString(tooltip)) {
175
+ return;
176
+ }
177
+ const content = tooltip.value;
178
+ // Find all command links in the markdown content
179
+ const regex = /\[([^\]]+)\]\(command:([^?\s\)]+)(?:\?([^\s\)]+))?([^\)]*)\)/g;
180
+ let match;
181
+ let updatedContent = content;
182
+
183
+ while ((match = regex.exec(content)) !== null) {
184
+ const linkText = match[1];
185
+ const commandId = match[2];
186
+ const argsEncoded = match[3]; // This captures the encoded arguments
187
+ const tooltipPart = match[4] || ''; // This captures any tooltip or additional content after the command and args
188
+
189
+ let args: unknown[] = [];
190
+ if (argsEncoded) {
191
+ try {
192
+ const decoded = decodeURIComponent(argsEncoded);
193
+ args = JSON.parse(decoded);
194
+ } catch (e) {
195
+ console.error('Failed to parse command arguments:', e);
196
+ }
197
+ }
198
+
199
+ const safeCommand = this.commandRegistry.converter.toSafeCommand(
200
+ {
201
+ command: commandId,
202
+ title: linkText,
203
+ arguments: Array.isArray(args) ? args : [args]
204
+ },
205
+ new DisposableCollection()
206
+ );
207
+
208
+ if (safeCommand?.id) {
209
+ let newArgsPart = '';
210
+ if (safeCommand.arguments && safeCommand.arguments.length > 0) {
211
+ newArgsPart = `?${encodeURIComponent(JSON.stringify(safeCommand.arguments))}`;
212
+ }
213
+
214
+ const argsPart = argsEncoded ? `?${argsEncoded}` : '';
215
+ const originalLink = `[${linkText}](command:${commandId}${argsPart}${tooltipPart})`;
216
+ const safeLink = `[${linkText}](command:${safeCommand.id}${newArgsPart}${tooltipPart})`;
217
+ updatedContent = updatedContent.replace(originalLink, safeLink);
218
+ }
219
+ }
220
+
221
+ if (updatedContent !== content) {
222
+ tooltip.value = updatedContent;
223
+ }
224
+ }
225
+
203
226
  private update(): void {
204
227
  if (!this._isVisible) {
205
228
  return;
@@ -220,6 +243,8 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
220
243
  color = StatusBarItemImpl.BACKGROUND_COLORS.get(this.backgroundColor.id);
221
244
  }
222
245
 
246
+ const tooltip = typeof this._tooltip2 === 'function' ? true : this._tooltip2 ?? this.tooltip;
247
+
223
248
  // Set to status bar
224
249
  this._proxy.$setMessage(
225
250
  this.id,
@@ -229,7 +254,7 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
229
254
  this.alignment,
230
255
  typeof color === 'string' ? color : color?.id,
231
256
  this.backgroundColor?.id,
232
- this.tooltip,
257
+ tooltip,
233
258
  commandId,
234
259
  this.accessibilityInformation,
235
260
  args);
@@ -237,6 +262,7 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
237
262
  }
238
263
 
239
264
  public dispose(): void {
265
+ this.onDispose?.();
240
266
  this.hide();
241
267
  }
242
268
 
@@ -14,20 +14,23 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
  import { Disposable, StatusBarAlignment } from './types-impl';
17
- import { StatusBarItem } from '@theia/plugin';
17
+ import { CancellationToken, ProviderResult, StatusBarItem } from '@theia/plugin';
18
18
  import {
19
- PLUGIN_RPC_CONTEXT as Ext, StatusBarMessageRegistryMain
19
+ PLUGIN_RPC_CONTEXT as Ext, StatusBarMessageRegistryMain,
20
+ StatusBarMessageRegistryExt
20
21
  } from '../common/plugin-api-rpc';
21
22
  import { RPCProtocol } from '../common/rpc-protocol';
22
23
  import { StatusBarItemImpl } from './status-bar/status-bar-item';
23
24
  import { CommandRegistryImpl } from './command-registry';
25
+ import { MarkdownString } from '../common/plugin-api-rpc-model';
24
26
 
25
27
  /*---------------------------------------------------------------------------------------------
26
28
  * Copyright (c) Microsoft Corporation. All rights reserved.
27
29
  * Licensed under the MIT License. See License.txt in the project root for license information.
28
30
  *--------------------------------------------------------------------------------------------*/
29
31
 
30
- export class StatusBarMessageRegistryExt {
32
+ export class StatusBarMessageRegistryExtImpl implements StatusBarMessageRegistryExt {
33
+ private readonly items = new Map<string, StatusBarItemImpl>();
31
34
 
32
35
  proxy: StatusBarMessageRegistryMain;
33
36
 
@@ -38,6 +41,15 @@ export class StatusBarMessageRegistryExt {
38
41
  this.statusMessage = new StatusBarMessage(this);
39
42
  }
40
43
 
44
+ $getMessage(id: string, cancellation: CancellationToken): ProviderResult<string | MarkdownString> {
45
+ const item = this.items.get(id);
46
+ if (!item) { return undefined; }
47
+ if (typeof item.tooltip2 === 'function') {
48
+ return item.tooltip2(cancellation);
49
+ }
50
+ return item.tooltip2 ?? item.tooltip;
51
+ }
52
+
41
53
  // copied from https://github.com/Microsoft/vscode/blob/6c8f02b41db9ae5c4d15df767d47755e5c73b9d5/src/vs/workbench/api/node/extHostStatusBar.ts#L174
42
54
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
55
  setStatusBarMessage(text: string, timeoutOrThenable?: number | PromiseLike<any>): Disposable {
@@ -59,7 +71,9 @@ export class StatusBarMessageRegistryExt {
59
71
  }
60
72
 
61
73
  createStatusBarItem(alignment?: StatusBarAlignment, priority?: number, id?: string): StatusBarItem {
62
- return new StatusBarItemImpl(this.proxy, this.commandRegistry, alignment, priority, id);
74
+ const item: StatusBarItemImpl = new StatusBarItemImpl(this.proxy, this.commandRegistry, alignment, priority, id, () => this.items.delete(item.id));
75
+ this.items.set(item.id, item);
76
+ return item;
63
77
  }
64
78
 
65
79
  }
@@ -70,7 +84,7 @@ class StatusBarMessage {
70
84
  private _item: StatusBarItem;
71
85
  private _messages: { message: string }[] = [];
72
86
 
73
- constructor(statusBar: StatusBarMessageRegistryExt) {
87
+ constructor(statusBar: StatusBarMessageRegistryExtImpl) {
74
88
  this._item = statusBar.createStatusBarItem(StatusBarAlignment.Left, Number.MIN_VALUE);
75
89
  }
76
90