@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.
- package/assets/{webWorkerExtensionHostIframe.html → webWorkerExtensionHostIframe.esm.html} +51 -15
- package/extensions.js +15 -41
- package/package.json +3 -3
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +28 -28
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +42 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +17 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +1 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +19 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +19 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +1 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +23 -16
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +3 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +10 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +8 -7
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
- package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +9 -6
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +42 -28
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +6 -7
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
- package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +3 -0
- 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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
79
|
+
message = ( localize(4842, "Extension '{0}' added 1 folder to the workspace", extensionName));
|
|
79
80
|
}
|
|
80
81
|
else {
|
|
81
82
|
message = ( localize(
|
|
82
|
-
|
|
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(
|
|
92
|
+
message = ( localize(4844, "Extension '{0}' removed 1 folder from the workspace", extensionName));
|
|
92
93
|
}
|
|
93
94
|
else {
|
|
94
95
|
message = ( localize(
|
|
95
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
199
|
+
message: ( localize(1146, "Extension Bisect")),
|
|
200
200
|
detail: ( localize(
|
|
201
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
252
|
-
|
|
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(
|
|
261
|
-
primaryButton: ( localize(
|
|
262
|
-
cancelButton: ( localize(
|
|
260
|
+
message: ( localize(1150, "Extension Bisect")),
|
|
261
|
+
primaryButton: ( localize(1152, "&&Report Issue & Continue")),
|
|
262
|
+
cancelButton: ( localize(1153, "Continue")),
|
|
263
263
|
detail: ( localize(
|
|
264
|
-
|
|
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(
|
|
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(
|
|
283
|
+
message: ( localize(1156, "Extension Bisect")),
|
|
284
284
|
detail: ( localize(
|
|
285
|
-
|
|
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(
|
|
291
|
+
label: ( localize(1158, "I ca&&n't reproduce")),
|
|
292
292
|
run: () => false
|
|
293
293
|
},
|
|
294
294
|
{
|
|
295
|
-
label: ( localize(
|
|
295
|
+
label: ( localize(1159, "I can &&reproduce")),
|
|
296
296
|
run: () => true
|
|
297
297
|
},
|
|
298
298
|
{
|
|
299
|
-
label: ( localize(
|
|
299
|
+
label: ( localize(1160, "&&Stop Bisect")),
|
|
300
300
|
run: () => undefined
|
|
301
301
|
}
|
|
302
302
|
],
|
|
303
303
|
cancelButton: {
|
|
304
|
-
label: ( localize(
|
|
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(
|
|
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 =
|
|
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
|
|
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:
|
|
152
|
+
workerUrl: ( ( FileAccess.asBrowserUri('vs/workbench/api/worker/extensionHostWorker.esm.js')).toString(true)) ,
|
|
153
|
+
fileRoot: globalThis._VSCODE_FILE_ROOT,
|
|
151
154
|
nls: {
|
|
152
|
-
messages:
|
|
153
|
-
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(() =>
|
|
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(
|
|
176
|
+
label: ( localize(1128, "Disconnect Remote Agent")),
|
|
173
177
|
order: WillShutdownJoinerOrder.Last
|
|
174
178
|
});
|
|
175
179
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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(
|
|
598
|
-
( localize(
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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
|
-
|
|
709
|
+
1137,
|
|
704
710
|
"Remote Extension host terminated unexpectedly 3 times within the last 5 minutes."
|
|
705
711
|
)), [{
|
|
706
|
-
label: ( localize(
|
|
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.
|
|
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
|
-
|
|
1003
|
+
async stopAllInReverse() {
|
|
993
1004
|
for (let i = this._extensionHostManagers.length - 1; i >= 0; i--) {
|
|
994
|
-
this._extensionHostManagers[i]
|
|
1005
|
+
const manager = this._extensionHostManagers[i];
|
|
1006
|
+
await manager.extensionHost.disconnect();
|
|
1007
|
+
manager.dispose();
|
|
995
1008
|
}
|
|
996
1009
|
this._extensionHostManagers = [];
|
|
997
1010
|
}
|
|
998
|
-
|
|
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(
|
|
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
|
-
|
|
96
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
58
|
+
4801,
|
|
59
59
|
"Loading development extension at {0}",
|
|
60
60
|
developedExtension.extensionLocation.fsPath
|
|
61
61
|
)));
|
package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js
CHANGED
|
@@ -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
|
}
|