@codingame/monaco-vscode-extensions-service-override 8.0.4 → 9.0.2

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 (39) hide show
  1. package/assets/{webWorkerExtensionHostIframe.html → webWorkerExtensionHostIframe.esm.html} +51 -15
  2. package/extensions.js +15 -41
  3. package/package.json +3 -3
  4. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +28 -28
  5. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +42 -10
  6. package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
  7. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +17 -2
  8. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +5 -2
  9. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +2 -2
  10. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
  11. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
  12. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
  13. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +1 -2
  14. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +19 -5
  15. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +1 -1
  16. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
  17. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +19 -8
  18. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +1 -0
  19. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
  20. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
  21. package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +23 -16
  22. package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +3 -0
  23. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
  24. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
  25. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +1 -1
  26. package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +10 -2
  27. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +2 -2
  28. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
  29. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +1 -1
  30. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +8 -7
  31. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
  32. package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +1 -1
  33. package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +9 -6
  34. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +42 -28
  35. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +6 -7
  36. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
  37. package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
  38. package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +3 -0
  39. package/vscode/src/vs/workbench/services/extensions/common/remoteExtensionHost.js +11 -5
@@ -37,8 +37,8 @@ let MainThreadTesting = class MainThreadTesting extends Disposable {
37
37
  disposeTestFollowups: ids => this.proxy.$disposeTestFollowups(ids),
38
38
  getTestsRelatedToCode: (uri, position, token) => this.proxy.$getTestsRelatedToCode(uri, position, token),
39
39
  }));
40
- this._register(this.testService.onDidCancelTestRun(({ runId }) => {
41
- this.proxy.$cancelExtensionTestRun(runId);
40
+ this._register(this.testService.onDidCancelTestRun(({ runId, taskId }) => {
41
+ this.proxy.$cancelExtensionTestRun(runId, taskId);
42
42
  }));
43
43
  this._register(Event.debounce(testProfiles.onDidChange, (_last, e) => e)(() => {
44
44
  const obj = {};
@@ -208,6 +208,14 @@ let MainThreadTesting = class MainThreadTesting extends Disposable {
208
208
  const result = await this.testService.runResolvedTests(req, token);
209
209
  return result.id;
210
210
  }
211
+ async $getCoverageDetails(resultId, taskIndex, uri, token) {
212
+ const details = await this.resultService.getResult(resultId)
213
+ ?.tasks[taskIndex]
214
+ ?.coverage.get()
215
+ ?.getUri(( URI.from(uri)))
216
+ ?.details(token);
217
+ return details || [];
218
+ }
211
219
  dispose() {
212
220
  super.dispose();
213
221
  for (const subscription of ( this.testProviderRegistrations.values())) {
@@ -109,13 +109,13 @@ let MainThreadTunnelService = class MainThreadTunnelService extends Disposable {
109
109
  }
110
110
  async elevationPrompt(tunnelOptions, tunnel, source) {
111
111
  return this.notificationService.prompt(Severity$1.Info, ( localize(
112
- 4876,
112
+ 4850,
113
113
  "The extension {0} has forwarded port {1}. You'll need to run as superuser to use port {2} locally.",
114
114
  source,
115
115
  tunnelOptions.remoteAddress.port,
116
116
  tunnelOptions.localAddressPort
117
117
  )), [{
118
- label: ( localize(4877, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
118
+ label: ( localize(4851, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
119
119
  run: async () => {
120
120
  this.elevateionRetry = true;
121
121
  await this.remoteExplorerService.close({ host: tunnel.tunnelRemoteHost, port: tunnel.tunnelRemotePort }, TunnelCloseReason.Other);
@@ -51,7 +51,7 @@ let MainThreadUriOpeners = class MainThreadUriOpeners extends Disposable {
51
51
  }
52
52
  catch (e) {
53
53
  if (!isCancellationError(e)) {
54
- const openDefaultAction = ( (new Action('default', ( localize(4866, "Open using default opener")), undefined, undefined, async () => {
54
+ const openDefaultAction = ( (new Action('default', ( localize(4840, "Open using default opener")), undefined, undefined, async () => {
55
55
  await this.openerService.open(uri, {
56
56
  allowTunneling: false,
57
57
  allowContributedOpeners: defaultExternalUriOpenerId,
@@ -61,7 +61,7 @@ let MainThreadUriOpeners = class MainThreadUriOpeners extends Disposable {
61
61
  this.notificationService.notify({
62
62
  severity: Severity$1.Error,
63
63
  message: ( localize(
64
- 4867,
64
+ 4841,
65
65
  'Could not open uri with \'{0}\': {1}',
66
66
  id,
67
67
  (e.toString())
@@ -103,7 +103,7 @@ let MainThreadWebviews = class MainThreadWebviews extends Disposable {
103
103
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
104
104
  <meta http-equiv="Content-Security-Policy" content="default-src 'none';">
105
105
  </head>
106
- <body>${( localize(9799, "An error occurred while loading view: {0}", escape(viewType)))}</body>
106
+ <body>${( localize(9829, "An error occurred while loading view: {0}", escape(viewType)))}</body>
107
107
  </html>`;
108
108
  }
109
109
  };
@@ -24,6 +24,7 @@ import { IEditSessionIdentityService } from 'vscode/vscode/vs/platform/workspace
24
24
  import { SideBySideEditor, SaveReason, EditorResourceAccessor } from 'vscode/vscode/vs/workbench/common/editor';
25
25
  import { firstOrDefault, coalesce } from 'vscode/vscode/vs/base/common/arrays';
26
26
  import { ICanonicalUriService } from 'vscode/vscode/vs/platform/workspace/common/canonicalUri.service';
27
+ import { revive } from 'vscode/vscode/vs/base/common/marshalling';
27
28
 
28
29
  let MainThreadWorkspace = class MainThreadWorkspace {
29
30
  constructor(extHostContext, _searchService, _contextService, _editSessionIdentityService, _canonicalUriService, _editorService, _workspaceEditingService, _notificationService, _requestService, _instantiationService, _labelService, _environmentService, fileService, _workspaceTrustManagementService, _workspaceTrustRequestService) {
@@ -75,11 +76,11 @@ let MainThreadWorkspace = class MainThreadWorkspace {
75
76
  const wantsToDelete = removeCount > 0;
76
77
  if (wantsToAdd && !wantsToDelete) {
77
78
  if (addCount === 1) {
78
- message = ( localize(4868, "Extension '{0}' added 1 folder to the workspace", extensionName));
79
+ message = ( localize(4842, "Extension '{0}' added 1 folder to the workspace", extensionName));
79
80
  }
80
81
  else {
81
82
  message = ( localize(
82
- 4869,
83
+ 4843,
83
84
  "Extension '{0}' added {1} folders to the workspace",
84
85
  extensionName,
85
86
  addCount
@@ -88,11 +89,11 @@ let MainThreadWorkspace = class MainThreadWorkspace {
88
89
  }
89
90
  else if (wantsToDelete && !wantsToAdd) {
90
91
  if (removeCount === 1) {
91
- message = ( localize(4870, "Extension '{0}' removed 1 folder from the workspace", extensionName));
92
+ message = ( localize(4844, "Extension '{0}' removed 1 folder from the workspace", extensionName));
92
93
  }
93
94
  else {
94
95
  message = ( localize(
95
- 4871,
96
+ 4845,
96
97
  "Extension '{0}' removed {1} folders from the workspace",
97
98
  extensionName,
98
99
  removeCount
@@ -100,7 +101,7 @@ let MainThreadWorkspace = class MainThreadWorkspace {
100
101
  }
101
102
  }
102
103
  else {
103
- message = ( localize(4872, "Extension '{0}' changed folders of the workspace", extensionName));
104
+ message = ( localize(4846, "Extension '{0}' changed folders of the workspace", extensionName));
104
105
  }
105
106
  return message;
106
107
  }
@@ -123,7 +124,7 @@ let MainThreadWorkspace = class MainThreadWorkspace {
123
124
  $startFileSearch(_includeFolder, options, token) {
124
125
  const includeFolder = URI.revive(_includeFolder);
125
126
  const workspace = this._contextService.getWorkspace();
126
- const query = this._queryBuilder.file(includeFolder ? [includeFolder] : workspace.folders, options);
127
+ const query = this._queryBuilder.file(includeFolder ? [includeFolder] : workspace.folders, revive(options));
127
128
  return this._searchService.fileSearch(query, token).then(result => {
128
129
  return (
129
130
  (result.results.map(m => m.resource))
@@ -139,7 +140,7 @@ let MainThreadWorkspace = class MainThreadWorkspace {
139
140
  const folder = URI.revive(_folder);
140
141
  const workspace = this._contextService.getWorkspace();
141
142
  const folders = folder ? [folder] : ( (workspace.folders.map(folder => folder.uri)));
142
- const query = this._queryBuilder.text(pattern, folders, options);
143
+ const query = this._queryBuilder.text(pattern, folders, revive(options));
143
144
  query._reason = 'startTextSearch';
144
145
  const onProgress = (p) => {
145
146
  if (p.results) {
@@ -141,11 +141,11 @@ let ExtensionBisectUi = class ExtensionBisectUi {
141
141
  }
142
142
  _showBisectPrompt() {
143
143
  const goodPrompt = {
144
- label: ( localize(1138, "I can't reproduce")),
144
+ label: ( localize(1141, "I can't reproduce")),
145
145
  run: () => this._commandService.executeCommand('extension.bisect.next', false)
146
146
  };
147
147
  const badPrompt = {
148
- label: ( localize(1139, "I can reproduce")),
148
+ label: ( localize(1142, "I can reproduce")),
149
149
  run: () => this._commandService.executeCommand('extension.bisect.next', true)
150
150
  };
151
151
  const stop = {
@@ -154,11 +154,11 @@ let ExtensionBisectUi = class ExtensionBisectUi {
154
154
  };
155
155
  const message = this._extensionBisectService.disabledCount === 1
156
156
  ? ( localize(
157
- 1140,
157
+ 1143,
158
158
  "Extension Bisect is active and has disabled 1 extension. Check if you can still reproduce the problem and proceed by selecting from these options."
159
159
  ))
160
160
  : ( localize(
161
- 1141,
161
+ 1144,
162
162
  "Extension Bisect is active and has disabled {0} extensions. Check if you can still reproduce the problem and proceed by selecting from these options.",
163
163
  this._extensionBisectService.disabledCount
164
164
  ));
@@ -176,7 +176,7 @@ registerAction2(class extends Action2 {
176
176
  constructor() {
177
177
  super({
178
178
  id: 'extension.bisect.start',
179
- title: ( localize2(1142, 'Start Extension Bisect')),
179
+ title: ( localize2(1145, 'Start Extension Bisect')),
180
180
  category: Categories.Help,
181
181
  f1: true,
182
182
  precondition: ( (ExtensionBisectUi.ctxIsBisectActive.negate())),
@@ -196,13 +196,13 @@ registerAction2(class extends Action2 {
196
196
  const extensionsBisect = accessor.get(IExtensionBisectService);
197
197
  const extensions = (await extensionManagement.getInstalled(ExtensionType.User)).filter(ext => extensionEnablementService.isEnabled(ext));
198
198
  const res = await dialogService.confirm({
199
- message: ( localize(1143, "Extension Bisect")),
199
+ message: ( localize(1146, "Extension Bisect")),
200
200
  detail: ( localize(
201
- 1144,
201
+ 1147,
202
202
  "Extension Bisect will use binary search to find an extension that causes a problem. During the process the window reloads repeatedly (~{0} times). Each time you must confirm if you are still seeing problems.",
203
203
  2 + Math.log2(extensions.length) | 0
204
204
  )),
205
- primaryButton: ( localize(1145, "&&Start Extension Bisect"))
205
+ primaryButton: ( localize(1148, "&&Start Extension Bisect"))
206
206
  });
207
207
  if (res.confirmed) {
208
208
  await extensionsBisect.start(extensions);
@@ -214,7 +214,7 @@ registerAction2(class extends Action2 {
214
214
  constructor() {
215
215
  super({
216
216
  id: 'extension.bisect.next',
217
- title: ( localize2(1146, 'Continue Extension Bisect')),
217
+ title: ( localize2(1149, 'Continue Extension Bisect')),
218
218
  category: Categories.Help,
219
219
  f1: true,
220
220
  precondition: ExtensionBisectUi.ctxIsBisectActive
@@ -248,8 +248,8 @@ registerAction2(class extends Action2 {
248
248
  return;
249
249
  }
250
250
  if (done.bad) {
251
- await dialogService.info(( localize(1147, "Extension Bisect")), ( localize(
252
- 1148,
251
+ await dialogService.info(( localize(1150, "Extension Bisect")), ( localize(
252
+ 1151,
253
253
  "Extension Bisect is done but no extension has been identified. This might be a problem with {0}.",
254
254
  productService.nameShort
255
255
  )));
@@ -257,15 +257,15 @@ registerAction2(class extends Action2 {
257
257
  else {
258
258
  const res = await dialogService.confirm({
259
259
  type: Severity$1.Info,
260
- message: ( localize(1147, "Extension Bisect")),
261
- primaryButton: ( localize(1149, "&&Report Issue & Continue")),
262
- cancelButton: ( localize(1150, "Continue")),
260
+ message: ( localize(1150, "Extension Bisect")),
261
+ primaryButton: ( localize(1152, "&&Report Issue & Continue")),
262
+ cancelButton: ( localize(1153, "Continue")),
263
263
  detail: ( localize(
264
- 1151,
264
+ 1154,
265
265
  "Extension Bisect is done and has identified {0} as the extension causing the problem.",
266
266
  done.id
267
267
  )),
268
- checkbox: { label: ( localize(1152, "Keep this extension disabled")), checked: true }
268
+ checkbox: { label: ( localize(1155, "Keep this extension disabled")), checked: true }
269
269
  });
270
270
  if (res.checkboxChecked) {
271
271
  await extensionEnablementService.disableExtension({ id: done.id }, undefined);
@@ -280,28 +280,28 @@ registerAction2(class extends Action2 {
280
280
  async _checkForBad(dialogService, bisectService) {
281
281
  const { result } = await dialogService.prompt({
282
282
  type: Severity$1.Info,
283
- message: ( localize(1153, "Extension Bisect")),
283
+ message: ( localize(1156, "Extension Bisect")),
284
284
  detail: ( localize(
285
- 1154,
285
+ 1157,
286
286
  "Extension Bisect is active and has disabled {0} extensions. Check if you can still reproduce the problem and proceed by selecting from these options.",
287
287
  bisectService.disabledCount
288
288
  )),
289
289
  buttons: [
290
290
  {
291
- label: ( localize(1155, "I ca&&n't reproduce")),
291
+ label: ( localize(1158, "I ca&&n't reproduce")),
292
292
  run: () => false
293
293
  },
294
294
  {
295
- label: ( localize(1156, "I can &&reproduce")),
295
+ label: ( localize(1159, "I can &&reproduce")),
296
296
  run: () => true
297
297
  },
298
298
  {
299
- label: ( localize(1157, "&&Stop Bisect")),
299
+ label: ( localize(1160, "&&Stop Bisect")),
300
300
  run: () => undefined
301
301
  }
302
302
  ],
303
303
  cancelButton: {
304
- label: ( localize(1158, "&&Cancel Bisect")),
304
+ label: ( localize(1161, "&&Cancel Bisect")),
305
305
  run: () => null
306
306
  }
307
307
  });
@@ -312,7 +312,7 @@ registerAction2(class extends Action2 {
312
312
  constructor() {
313
313
  super({
314
314
  id: 'extension.bisect.stop',
315
- title: ( localize2(1159, 'Stop Extension Bisect')),
315
+ title: ( localize2(1162, 'Stop Extension Bisect')),
316
316
  category: Categories.Help,
317
317
  f1: true,
318
318
  precondition: ExtensionBisectUi.ctxIsBisectActive
@@ -114,7 +114,7 @@ let ExtensionService = class ExtensionService extends AbstractExtensionService {
114
114
  return this._resolveExtensionsDefault();
115
115
  }
116
116
  async _onExtensionHostExit(code) {
117
- this._doStopExtensionHosts();
117
+ await this._doStopExtensionHosts();
118
118
  const automatedWindow = mainWindow;
119
119
  if (typeof automatedWindow.codeAutomationExit === 'function') {
120
120
  automatedWindow.codeAutomationExit(code, await getLogs(this._fileService, this._environmentService));
@@ -2,6 +2,7 @@ import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
2
2
  import { addDisposableListener } from 'vscode/vscode/vs/base/browser/dom';
3
3
  import { parentOriginHash } from 'vscode/vscode/vs/base/browser/iframe';
4
4
  import { mainWindow } from 'vscode/vscode/vs/base/browser/window';
5
+ import 'vscode/vscode/vs/base/common/amd';
5
6
  import { Barrier } from 'vscode/vscode/vs/base/common/async';
6
7
  import { VSBuffer } from 'vscode/vscode/vs/base/common/buffer';
7
8
  import { onUnexpectedError, canceled } from 'vscode/vscode/vs/base/common/errors';
@@ -12,6 +13,7 @@ import { isWeb, Language, language } from 'vscode/vscode/vs/base/common/platform
12
13
  import { joinPath } from 'vscode/vscode/vs/base/common/resources';
13
14
  import { URI } from 'vscode/vscode/vs/base/common/uri';
14
15
  import { generateUuid } from 'vscode/vscode/vs/base/common/uuid';
16
+ import 'vscode/vscode/vs/nls';
15
17
  import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label.service';
16
18
  import { ILayoutService } from 'vscode/vscode/vs/platform/layout/browser/layoutService.service';
17
19
  import { ILogService, ILoggerService } from 'vscode/vscode/vs/platform/log/common/log.service';
@@ -26,6 +28,7 @@ import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/co
26
28
  import { IBrowserWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/browser/environmentService.service';
27
29
  import { ExtensionHostExitCode, isMessageOfType, MessageType, createMessageOfType, UIKind } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionHostProtocol';
28
30
  import { ExtensionHostStartup } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
31
+ import { getNLSMessages, getNLSLanguage } from 'vscode/vscode/vs/nls.messages';
29
32
 
30
33
  let WebWorkerExtensionHost = class WebWorkerExtensionHost extends Disposable {
31
34
  constructor(runningLocation, startup, _initDataProvider, _telemetryService, _contextService, _labelService, _logService, _loggerService, _environmentService, _userDataProfilesService, _productService, _layoutService, _storageService) {
@@ -60,7 +63,7 @@ let WebWorkerExtensionHost = class WebWorkerExtensionHost extends Disposable {
60
63
  }
61
64
  COI.addSearchParam(suffixSearchParams, true, true);
62
65
  const suffix = `?${( suffixSearchParams.toString())}`;
63
- const iframeModulePath = 'vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html';
66
+ const iframeModulePath = `vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.${'esm.' }html`;
64
67
  if (isWeb) {
65
68
  const webEndpointUrlTemplate = this._productService.webEndpointUrlTemplate;
66
69
  const commit = this._productService.commit;
@@ -141,16 +144,16 @@ let WebWorkerExtensionHost = class WebWorkerExtensionHost extends Disposable {
141
144
  return rejectBarrier(ExtensionHostExitCode.UnexpectedError, err);
142
145
  }
143
146
  if (event.data.type === 'vscode.bootstrap.nls') {
144
- const factoryModuleId = 'vs/base/worker/workerMain.js';
145
- const baseUrl = require.toUrl(factoryModuleId).slice(0, -factoryModuleId.length);
147
+ const baseUrl = undefined ;
146
148
  iframe.contentWindow.postMessage({
147
149
  type: event.data.type,
148
150
  data: {
149
151
  baseUrl,
150
- workerUrl: require.toUrl(factoryModuleId),
152
+ workerUrl: ( ( FileAccess.asBrowserUri('vs/workbench/api/worker/extensionHostWorker.esm.js')).toString(true)) ,
153
+ fileRoot: globalThis._VSCODE_FILE_ROOT,
151
154
  nls: {
152
- messages: globalThis._VSCODE_NLS_MESSAGES,
153
- language: globalThis._VSCODE_NLS_LANGUAGE
155
+ messages: getNLSMessages(),
156
+ language: getNLSLanguage()
154
157
  }
155
158
  }
156
159
  }, '*');
@@ -167,17 +167,22 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
167
167
  }));
168
168
  this._register(this._lifecycleService.onWillShutdown(event => {
169
169
  if (this._remoteAgentService.getConnection()) {
170
- event.join(() => this._remoteAgentService.endConnection(), {
170
+ event.join(async () => {
171
+ await this._remoteAgentService.endConnection();
172
+ await this._doStopExtensionHosts();
173
+ this._remoteAgentService.getConnection()?.dispose();
174
+ }, {
171
175
  id: 'join.disconnectRemote',
172
- label: ( localize(1126, "Disconnect Remote Agent")),
176
+ label: ( localize(1128, "Disconnect Remote Agent")),
173
177
  order: WillShutdownJoinerOrder.Last
174
178
  });
175
179
  }
176
- }));
177
- this._register(this._lifecycleService.onDidShutdown(() => {
178
- const connection = this._remoteAgentService.getConnection();
179
- connection?.dispose();
180
- this._doStopExtensionHosts();
180
+ else {
181
+ event.join(this._doStopExtensionHosts(), {
182
+ id: 'join.stopExtensionHosts',
183
+ label: ( localize(1129, "Stopping Extension Hosts")),
184
+ });
185
+ }
181
186
  }));
182
187
  }
183
188
  _getExtensionHostManagers(kind) {
@@ -246,7 +251,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
246
251
  this._notificationService.notify({
247
252
  severity: Severity$1.Error,
248
253
  message: ( localize(
249
- 1127,
254
+ 1130,
250
255
  "The following extensions contain dependency loops and have been disabled: {0}",
251
256
  ( (result.removedDueToLooping.map(e => `'${e.identifier.value}'`))).join(', ')
252
257
  ))
@@ -400,7 +405,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
400
405
  this._notificationService.notify({
401
406
  severity: Severity$1.Error,
402
407
  message: ( localize(
403
- 1127,
408
+ 1130,
404
409
  "The following extensions contain dependency loops and have been disabled: {0}",
405
410
  ( (result.removedDueToLooping.map(e => `'${e.identifier.value}'`))).join(', ')
406
411
  ))
@@ -415,7 +420,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
415
420
  const extensionHostManager = this.findTestExtensionHost(this._environmentService.extensionTestsLocationURI);
416
421
  if (!extensionHostManager) {
417
422
  const msg = ( localize(
418
- 1128,
423
+ 1131,
419
424
  "No extension host found that can launch the test runner at {0}.",
420
425
  (this._environmentService.extensionTestsLocationURI.toString())
421
426
  ));
@@ -548,14 +553,14 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
548
553
  stopExtensionHosts(reason, auto) {
549
554
  return this._doStopExtensionHostsWithVeto(reason, auto);
550
555
  }
551
- _doStopExtensionHosts() {
556
+ async _doStopExtensionHosts() {
552
557
  const previouslyActivatedExtensionIds = [];
553
558
  for (const extensionStatus of ( (this._extensionStatus.values()))) {
554
559
  if (extensionStatus.activationStarted) {
555
560
  previouslyActivatedExtensionIds.push(extensionStatus.id);
556
561
  }
557
562
  }
558
- this._extensionHostManagers.disposeAllInReverse();
563
+ await this._extensionHostManagers.stopAllInReverse();
559
564
  for (const extensionStatus of ( (this._extensionStatus.values()))) {
560
565
  extensionStatus.clearRuntimeStatus();
561
566
  }
@@ -563,11 +568,12 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
563
568
  this._onDidChangeExtensionsStatus.fire(previouslyActivatedExtensionIds);
564
569
  }
565
570
  }
566
- async _doStopExtensionHostsWithVeto(reason, auto) {
571
+ async _doStopExtensionHostsWithVeto(reason, auto = false) {
567
572
  const vetos = [];
568
573
  const vetoReasons = ( (new Set()));
569
574
  this._onWillStop.fire({
570
575
  reason,
576
+ auto,
571
577
  veto(value, reason) {
572
578
  vetos.push(value);
573
579
  if (typeof value === 'boolean') {
@@ -581,23 +587,23 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
581
587
  vetoReasons.add(reason);
582
588
  }
583
589
  }).catch(error => {
584
- vetoReasons.add(( localize(1129, "{0} (Error: {1})", reason, toErrorMessage(error))));
590
+ vetoReasons.add(( localize(1132, "{0} (Error: {1})", reason, toErrorMessage(error))));
585
591
  });
586
592
  }
587
593
  }
588
594
  });
589
595
  const veto = await handleVetos(vetos, error => this._logService.error(error));
590
596
  if (!veto) {
591
- this._doStopExtensionHosts();
597
+ await this._doStopExtensionHosts();
592
598
  }
593
599
  else {
594
600
  if (!auto) {
595
601
  const vetoReasonsArray = Array.from(vetoReasons);
596
602
  this._logService.warn(`Extension host was not stopped because of veto (stop reason: ${reason}, veto reason: ${vetoReasonsArray.join(', ')})`);
597
- await this._dialogService.warn(( localize(1130, "The following operation was blocked: {0}", reason)), vetoReasonsArray.length === 1 ?
598
- ( localize(1131, "The reason for blocking the operation: {0}", vetoReasonsArray[0])) :
603
+ await this._dialogService.warn(( localize(1133, "The following operation was blocked: {0}", reason)), vetoReasonsArray.length === 1 ?
604
+ ( localize(1134, "The reason for blocking the operation: {0}", vetoReasonsArray[0])) :
599
605
  ( localize(
600
- 1132,
606
+ 1135,
601
607
  "The reasons for blocking the operation:\n- {0}",
602
608
  vetoReasonsArray.join('\n -')
603
609
  )));
@@ -669,7 +675,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
669
675
  if (signal) {
670
676
  this._onRemoteExtensionHostCrashed(extensionHost, signal);
671
677
  }
672
- this._extensionHostManagers.disposeOne(extensionHost);
678
+ this._extensionHostManagers.stopOne(extensionHost);
673
679
  }
674
680
  }
675
681
  _getExtensionHostExitInfoWithTimeout(reconnectionToken) {
@@ -695,15 +701,15 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
695
701
  this._remoteCrashTracker.registerCrash();
696
702
  if (this._remoteCrashTracker.shouldAutomaticallyRestart()) {
697
703
  this._logService.info(`Automatically restarting the remote extension host.`);
698
- this._notificationService.status(( localize(1133, "The remote extension host terminated unexpectedly. Restarting...")), { hideAfter: 5000 });
704
+ this._notificationService.status(( localize(1136, "The remote extension host terminated unexpectedly. Restarting...")), { hideAfter: 5000 });
699
705
  this._startExtensionHostsIfNecessary(false, Array.from(( (this._allRequestedActivateEvents.keys()))));
700
706
  }
701
707
  else {
702
708
  this._notificationService.prompt(Severity$1.Error, ( localize(
703
- 1134,
709
+ 1137,
704
710
  "Remote Extension host terminated unexpectedly 3 times within the last 5 minutes."
705
711
  )), [{
706
- label: ( localize(1135, "Restart Remote Extension Host")),
712
+ label: ( localize(1138, "Restart Remote Extension Host")),
707
713
  run: () => {
708
714
  this._startExtensionHostsIfNecessary(false, Array.from(( (this._allRequestedActivateEvents.keys()))));
709
715
  }
@@ -728,7 +734,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
728
734
  }
729
735
  }
730
736
  async startExtensionHosts(updates) {
731
- this._doStopExtensionHosts();
737
+ await this._doStopExtensionHosts();
732
738
  if (updates) {
733
739
  await this._handleDeltaExtensions(( (new DeltaExtensionsQueueItem(updates.toAdd, updates.toRemove))));
734
740
  }
@@ -983,22 +989,30 @@ class ExtensionHostCollection extends Disposable {
983
989
  this._extensionHostManagers = [];
984
990
  }
985
991
  dispose() {
986
- this.disposeAllInReverse();
992
+ for (let i = this._extensionHostManagers.length - 1; i >= 0; i--) {
993
+ const manager = this._extensionHostManagers[i];
994
+ manager.extensionHost.disconnect();
995
+ manager.dispose();
996
+ }
997
+ this._extensionHostManagers = [];
987
998
  super.dispose();
988
999
  }
989
1000
  add(extensionHostManager, disposableStore) {
990
1001
  this._extensionHostManagers.push(( (new ExtensionHostManagerData(extensionHostManager, disposableStore))));
991
1002
  }
992
- disposeAllInReverse() {
1003
+ async stopAllInReverse() {
993
1004
  for (let i = this._extensionHostManagers.length - 1; i >= 0; i--) {
994
- this._extensionHostManagers[i].dispose();
1005
+ const manager = this._extensionHostManagers[i];
1006
+ await manager.extensionHost.disconnect();
1007
+ manager.dispose();
995
1008
  }
996
1009
  this._extensionHostManagers = [];
997
1010
  }
998
- disposeOne(extensionHostManager) {
1011
+ async stopOne(extensionHostManager) {
999
1012
  const index = this._extensionHostManagers.findIndex(el => el.extensionHost === extensionHostManager);
1000
1013
  if (index >= 0) {
1001
1014
  this._extensionHostManagers.splice(index, 1);
1015
+ await extensionHostManager.disconnect();
1002
1016
  extensionHostManager.dispose();
1003
1017
  }
1004
1018
  }
@@ -1180,7 +1194,7 @@ class ActivationFeatureMarkdowneRenderer extends Disposable {
1180
1194
  }
1181
1195
  ( (Registry.as(Extensions.ExtensionFeaturesRegistry))).registerExtensionFeature({
1182
1196
  id: 'activationEvents',
1183
- label: ( localize(1136, "Activation Events")),
1197
+ label: ( localize(1139, "Activation Events")),
1184
1198
  access: {
1185
1199
  canToggle: false
1186
1200
  },
@@ -91,13 +91,12 @@ let ExtensionHostManager = ExtensionHostManager_1 = class ExtensionHostManager e
91
91
  }));
92
92
  });
93
93
  }
94
+ async disconnect() {
95
+ await this._extensionHost?.disconnect?.();
96
+ }
94
97
  dispose() {
95
- if (this._extensionHost) {
96
- this._extensionHost.dispose();
97
- }
98
- if (this._rpcProtocol) {
99
- this._rpcProtocol.dispose();
100
- }
98
+ this._extensionHost?.dispose();
99
+ this._rpcProtocol?.dispose();
101
100
  for (let i = 0, len = this._customers.length; i < len; i++) {
102
101
  const customer = this._customers[i];
103
102
  try {
@@ -483,7 +482,7 @@ registerAction2(class MeasureExtHostLatencyAction extends Action2 {
483
482
  constructor() {
484
483
  super({
485
484
  id: 'editor.action.measureExtHostLatency',
486
- title: ( localize2(4824, "Measure Extension Host Latency")),
485
+ title: ( localize2(4798, "Measure Extension Host Latency")),
487
486
  category: Categories.Developer,
488
487
  f1: true
489
488
  });
@@ -107,7 +107,7 @@ class ApiProposalsMarkdowneRenderer extends Disposable {
107
107
  }
108
108
  ( (Registry.as(Extensions.ExtensionFeaturesRegistry))).registerExtensionFeature({
109
109
  id: 'enabledApiProposals',
110
- label: ( localize(1137, "API Proposals")),
110
+ label: ( localize(1140, "API Proposals")),
111
111
  access: {
112
112
  canToggle: false
113
113
  },
@@ -8,7 +8,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
8
8
  const extension = result.get(systemExtension.identifier);
9
9
  if (extension) {
10
10
  logService.warn(( localize(
11
- 4825,
11
+ 4799,
12
12
  "Overwriting extension {0} with {1}.",
13
13
  extension.extensionLocation.fsPath,
14
14
  systemExtension.extensionLocation.fsPath
@@ -28,7 +28,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
28
28
  }
29
29
  else {
30
30
  logService.warn(( localize(
31
- 4825,
31
+ 4799,
32
32
  "Overwriting extension {0} with {1}.",
33
33
  extension.extensionLocation.fsPath,
34
34
  userExtension.extensionLocation.fsPath
@@ -45,7 +45,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
45
45
  const extension = result.get(workspaceExtension.identifier);
46
46
  if (extension) {
47
47
  logService.warn(( localize(
48
- 4826,
48
+ 4800,
49
49
  "Overwriting {0} with Workspace Extension {1}.",
50
50
  extension.extensionLocation.fsPath,
51
51
  workspaceExtension.extensionLocation.fsPath
@@ -55,7 +55,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
55
55
  });
56
56
  development.forEach(developedExtension => {
57
57
  logService.info(( localize(
58
- 4827,
58
+ 4801,
59
59
  "Loading development extension at {0}",
60
60
  developedExtension.extensionLocation.fsPath
61
61
  )));
@@ -57,6 +57,9 @@ let LazyCreateExtensionHostManager = class LazyCreateExtensionHostManager extend
57
57
  await this._actual.ready();
58
58
  }
59
59
  }
60
+ async disconnect() {
61
+ await this._actual?.disconnect();
62
+ }
60
63
  representsRunningLocation(runningLocation) {
61
64
  return this._extensionHost.runningLocation.equals(runningLocation);
62
65
  }