@codingame/monaco-vscode-api 1.83.15-next.0 → 1.83.16
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/README.md +430 -0
- package/contributions.js +3 -0
- package/localExtensionHost.js +3 -2
- package/missing-services.js +57 -1
- package/monaco-editor-treemending.patch +3375 -3375
- package/package.json +6 -6
- package/vscode/src/vs/base/common/prefixTree.js +130 -0
- package/vscode/src/vs/platform/actions/browser/floatingMenu.js +26 -2
- package/vscode/src/vs/platform/terminal/common/capabilities/bufferMarkCapability.js +41 -0
- package/vscode/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.js +566 -0
- package/vscode/src/vs/platform/terminal/common/capabilities/cwdDetectionCapability.js +29 -0
- package/vscode/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.js +48 -0
- package/vscode/src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.js +94 -0
- package/vscode/src/vs/platform/terminal/common/terminalEnvironment.js +37 -0
- package/vscode/src/vs/platform/terminal/common/terminalStrings.js +16 -0
- package/vscode/src/vs/platform/terminal/common/xterm/shellIntegrationAddon.js +319 -0
- package/vscode/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.js +91 -1
- package/vscode/src/vs/workbench/contrib/format/browser/formatActionsMultiple.js +423 -0
- package/vscode/src/vs/workbench/contrib/format/browser/formatActionsNone.js +82 -0
- package/vscode/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.js +564 -11
- package/vscode/src/vs/workbench/contrib/scm/common/scm.js +9 -1
- package/vscode/src/vs/workbench/contrib/terminal/browser/detachedTerminal.js +67 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalExtensions.js +25 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalIcons.js +64 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.js +36 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.js +538 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationStyles.js +104 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon.js +416 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/suggestAddon.js +390 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.js +799 -0
- package/vscode/src/vs/workbench/contrib/testing/common/getComputedState.js +101 -0
- package/vscode/src/vs/workbench/contrib/testing/common/observableValue.js +30 -0
- package/vscode/src/vs/workbench/contrib/testing/common/storedValue.js +36 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testExplorerFilterState.js +116 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testProfileService.js +172 -1
- package/vscode/src/vs/workbench/contrib/testing/common/testResult.js +384 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testResultService.js +156 -1
- package/vscode/src/vs/workbench/contrib/testing/common/testResultStorage.js +156 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testService.js +75 -1
- package/vscode/src/vs/workbench/contrib/testing/common/testTypes.js +9 -1
- package/vscode/src/vs/workbench/contrib/testing/common/testingContextKeys.js +179 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testingContinuousRunService.js +102 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testingDecorations.js +29 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testingPeekOpener.js +3 -0
- package/vscode/src/vs/workbench/contrib/testing/common/testingStates.js +47 -0
- package/vscode/src/vs/workbench/services/authentication/browser/authenticationService.js +594 -2
- package/vscode/src/vs/workbench/services/extensions/browser/extensionUrlHandler.js +307 -1
- package/vscode/src/vs/workbench/services/suggest/browser/media/suggest.css.js +4 -0
- package/vscode/src/vs/workbench/services/suggest/browser/simpleCompletionItem.js +10 -0
- package/vscode/src/vs/workbench/services/suggest/browser/simpleCompletionModel.js +98 -0
- package/vscode/src/vs/workbench/services/suggest/browser/simpleSuggestWidget.js +428 -0
- package/vscode/src/vs/workbench/services/suggest/browser/simpleSuggestWidgetRenderer.js +83 -0
- package/vscode/src/vs/workbench/services/textfile/common/textfiles.js +6 -2
|
@@ -1,15 +1,34 @@
|
|
|
1
1
|
import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
|
|
2
2
|
import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
|
|
3
|
+
import { combinedDisposable, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
|
|
4
|
+
import { URI } from 'monaco-editor/esm/vs/base/common/uri.js';
|
|
5
|
+
import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
|
|
3
6
|
import '../../../../../../../override/vs/platform/dialogs/common/dialogs.js';
|
|
7
|
+
import { IExtensionManagementService, IExtensionGalleryService } from '../../../../platform/extensionManagement/common/extensionManagement.js';
|
|
8
|
+
import { IWorkbenchExtensionEnablementService } from '../../extensionManagement/common/extensionManagement.js';
|
|
9
|
+
import { areSameExtensions } from '../../../../platform/extensionManagement/common/extensionManagementUtil.js';
|
|
4
10
|
import { createDecorator } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
|
|
11
|
+
import { INotificationService } from 'monaco-editor/esm/vs/platform/notification/common/notification.js';
|
|
5
12
|
import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
|
|
6
13
|
import { IURLService } from '../../../../platform/url/common/url.js';
|
|
14
|
+
import { IHostService } from '../../host/browser/host.js';
|
|
15
|
+
import { toExtensionDescription, IExtensionService } from '../common/extensions.js';
|
|
16
|
+
import { ExtensionIdentifier } from 'monaco-editor/esm/vs/platform/extensions/common/extensions.js';
|
|
7
17
|
import { Registry } from 'monaco-editor/esm/vs/platform/registry/common/platform.js';
|
|
8
18
|
import { Extensions } from '../../../common/contributions.js';
|
|
9
19
|
import { registerAction2, Action2, MenuId } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
|
|
10
20
|
import { IQuickInputService } from 'monaco-editor/esm/vs/platform/quickinput/common/quickInput.js';
|
|
21
|
+
import { IProgressService } from 'monaco-editor/esm/vs/platform/progress/common/progress.js';
|
|
11
22
|
import { IsWebContext } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkeys.js';
|
|
23
|
+
import { CancellationToken } from 'monaco-editor/esm/vs/base/common/cancellation.js';
|
|
24
|
+
import { ITelemetryService } from 'monaco-editor/esm/vs/platform/telemetry/common/telemetry.js';
|
|
25
|
+
import { IProductService } from 'monaco-editor/esm/vs/platform/product/common/productService.js';
|
|
26
|
+
import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js';
|
|
12
27
|
var ExtensionUrlBootstrapHandler_1;
|
|
28
|
+
const FIVE_MINUTES = 5 * 60 * 1000;
|
|
29
|
+
const THIRTY_SECONDS = 30 * 1000;
|
|
30
|
+
const URL_TO_HANDLE = 'extensionUrlHandler.urlToHandle';
|
|
31
|
+
const USER_TRUSTED_EXTENSIONS_CONFIGURATION_KEY = 'extensions.confirmedUriHandlerExtensionIds';
|
|
13
32
|
const USER_TRUSTED_EXTENSIONS_STORAGE_KEY = 'extensionUrlHandler.confirmedExtensions';
|
|
14
33
|
function isExtensionId(value) {
|
|
15
34
|
return /^[a-z0-9][a-z0-9\-]*\.[a-z0-9][a-z0-9\-]*$/i.test(value);
|
|
@@ -38,6 +57,293 @@ class UserTrustedExtensionIdStorage {
|
|
|
38
57
|
}
|
|
39
58
|
}
|
|
40
59
|
const IExtensionUrlHandler = ( createDecorator('extensionUrlHandler'));
|
|
60
|
+
let ExtensionUrlHandler = class ExtensionUrlHandler {
|
|
61
|
+
constructor(urlService, extensionService, dialogService, notificationService, extensionManagementService, extensionEnablementService, hostService, galleryService, storageService, configurationService, progressService, telemetryService, productService) {
|
|
62
|
+
this.extensionService = extensionService;
|
|
63
|
+
this.dialogService = dialogService;
|
|
64
|
+
this.notificationService = notificationService;
|
|
65
|
+
this.extensionManagementService = extensionManagementService;
|
|
66
|
+
this.extensionEnablementService = extensionEnablementService;
|
|
67
|
+
this.hostService = hostService;
|
|
68
|
+
this.galleryService = galleryService;
|
|
69
|
+
this.storageService = storageService;
|
|
70
|
+
this.configurationService = configurationService;
|
|
71
|
+
this.progressService = progressService;
|
|
72
|
+
this.telemetryService = telemetryService;
|
|
73
|
+
this.productService = productService;
|
|
74
|
+
this.extensionHandlers = ( new Map());
|
|
75
|
+
this.uriBuffer = ( new Map());
|
|
76
|
+
this.userTrustedExtensionsStorage = ( new UserTrustedExtensionIdStorage(storageService));
|
|
77
|
+
const interval = setInterval(() => this.garbageCollect(), THIRTY_SECONDS);
|
|
78
|
+
const urlToHandleValue = this.storageService.get(URL_TO_HANDLE, 1 );
|
|
79
|
+
if (urlToHandleValue) {
|
|
80
|
+
this.storageService.remove(URL_TO_HANDLE, 1 );
|
|
81
|
+
this.handleURL(URI.revive(JSON.parse(urlToHandleValue)), { trusted: true });
|
|
82
|
+
}
|
|
83
|
+
this.disposable = combinedDisposable(urlService.registerHandler(this), toDisposable(() => clearInterval(interval)));
|
|
84
|
+
const cache = ExtensionUrlBootstrapHandler.cache;
|
|
85
|
+
setTimeout(() => cache.forEach(([uri, option]) => this.handleURL(uri, option)));
|
|
86
|
+
}
|
|
87
|
+
async handleURL(uri, options) {
|
|
88
|
+
if (!isExtensionId(uri.authority)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const extensionId = uri.authority;
|
|
92
|
+
this.telemetryService.publicLog2('uri_invoked/start', { extensionId });
|
|
93
|
+
const initialHandler = this.extensionHandlers.get(ExtensionIdentifier.toKey(extensionId));
|
|
94
|
+
let extensionDisplayName;
|
|
95
|
+
if (!initialHandler) {
|
|
96
|
+
const extension = await this.extensionService.getExtension(extensionId);
|
|
97
|
+
if (!extension) {
|
|
98
|
+
await this.handleUnhandledURL(uri, { id: extensionId }, options);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
extensionDisplayName = extension.displayName ?? '';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
extensionDisplayName = initialHandler.extensionDisplayName;
|
|
107
|
+
}
|
|
108
|
+
const trusted = options?.trusted
|
|
109
|
+
|| this.productService.trustedExtensionProtocolHandlers?.includes(extensionId)
|
|
110
|
+
|| this.didUserTrustExtension(ExtensionIdentifier.toKey(extensionId));
|
|
111
|
+
if (!trusted) {
|
|
112
|
+
let uriString = ( uri.toString(false));
|
|
113
|
+
if (uriString.length > 40) {
|
|
114
|
+
uriString = `${uriString.substring(0, 30)}...${uriString.substring(uriString.length - 5)}`;
|
|
115
|
+
}
|
|
116
|
+
const result = await this.dialogService.confirm({
|
|
117
|
+
message: ( localizeWithPath(
|
|
118
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
119
|
+
'confirmUrl',
|
|
120
|
+
"Allow '{0}' extension to open this URI?",
|
|
121
|
+
extensionDisplayName
|
|
122
|
+
)),
|
|
123
|
+
checkbox: {
|
|
124
|
+
label: ( localizeWithPath(
|
|
125
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
126
|
+
'rememberConfirmUrl',
|
|
127
|
+
"Don't ask again for this extension."
|
|
128
|
+
)),
|
|
129
|
+
},
|
|
130
|
+
detail: uriString,
|
|
131
|
+
primaryButton: ( localizeWithPath(
|
|
132
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
133
|
+
{ key: 'open', comment: ['&& denotes a mnemonic'] },
|
|
134
|
+
"&&Open"
|
|
135
|
+
))
|
|
136
|
+
});
|
|
137
|
+
if (!result.confirmed) {
|
|
138
|
+
this.telemetryService.publicLog2('uri_invoked/cancel', { extensionId });
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
if (result.checkboxChecked) {
|
|
142
|
+
this.userTrustedExtensionsStorage.add(ExtensionIdentifier.toKey(extensionId));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const handler = this.extensionHandlers.get(ExtensionIdentifier.toKey(extensionId));
|
|
146
|
+
if (handler) {
|
|
147
|
+
if (!initialHandler) {
|
|
148
|
+
return await this.handleURLByExtension(extensionId, handler, uri, options);
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const timestamp = ( new Date()).getTime();
|
|
153
|
+
let uris = this.uriBuffer.get(ExtensionIdentifier.toKey(extensionId));
|
|
154
|
+
if (!uris) {
|
|
155
|
+
uris = [];
|
|
156
|
+
this.uriBuffer.set(ExtensionIdentifier.toKey(extensionId), uris);
|
|
157
|
+
}
|
|
158
|
+
uris.push({ timestamp, uri });
|
|
159
|
+
await this.extensionService.activateByEvent(`onUri:${ExtensionIdentifier.toKey(extensionId)}`, 1 );
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
registerExtensionHandler(extensionId, handler) {
|
|
163
|
+
this.extensionHandlers.set(ExtensionIdentifier.toKey(extensionId), handler);
|
|
164
|
+
const uris = this.uriBuffer.get(ExtensionIdentifier.toKey(extensionId)) || [];
|
|
165
|
+
for (const { uri } of uris) {
|
|
166
|
+
this.handleURLByExtension(extensionId, handler, uri);
|
|
167
|
+
}
|
|
168
|
+
this.uriBuffer.delete(ExtensionIdentifier.toKey(extensionId));
|
|
169
|
+
}
|
|
170
|
+
unregisterExtensionHandler(extensionId) {
|
|
171
|
+
this.extensionHandlers.delete(ExtensionIdentifier.toKey(extensionId));
|
|
172
|
+
}
|
|
173
|
+
async handleURLByExtension(extensionId, handler, uri, options) {
|
|
174
|
+
this.telemetryService.publicLog2('uri_invoked/end', { extensionId: ExtensionIdentifier.toKey(extensionId) });
|
|
175
|
+
return await handler.handleURL(uri, options);
|
|
176
|
+
}
|
|
177
|
+
async handleUnhandledURL(uri, extensionIdentifier, options) {
|
|
178
|
+
const installedExtensions = await this.extensionManagementService.getInstalled();
|
|
179
|
+
let extension = installedExtensions.find(e => areSameExtensions(e.identifier, extensionIdentifier));
|
|
180
|
+
if (!extension) {
|
|
181
|
+
let galleryExtension;
|
|
182
|
+
try {
|
|
183
|
+
galleryExtension = (await this.galleryService.getExtensions([extensionIdentifier], CancellationToken.None))[0] ?? undefined;
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!galleryExtension) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.telemetryService.publicLog2('uri_invoked/install_extension/start', { extensionId: extensionIdentifier.id });
|
|
192
|
+
const result = await this.dialogService.confirm({
|
|
193
|
+
message: ( localizeWithPath(
|
|
194
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
195
|
+
'installAndHandle',
|
|
196
|
+
"Would you like to install '{0}' extension from '{1}' to open this URI?",
|
|
197
|
+
galleryExtension.displayName,
|
|
198
|
+
galleryExtension.publisherDisplayName
|
|
199
|
+
)),
|
|
200
|
+
detail: `${( localizeWithPath(
|
|
201
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
202
|
+
'installDetail',
|
|
203
|
+
"'{0}' extension wants to open a URI:",
|
|
204
|
+
galleryExtension.displayName
|
|
205
|
+
))}\n\n${( uri.toString())}`,
|
|
206
|
+
primaryButton: ( localizeWithPath(
|
|
207
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
208
|
+
{ key: 'install and open', comment: ['&& denotes a mnemonic'] },
|
|
209
|
+
"&&Install and Open"
|
|
210
|
+
))
|
|
211
|
+
});
|
|
212
|
+
if (!result.confirmed) {
|
|
213
|
+
this.telemetryService.publicLog2('uri_invoked/install_extension/cancel', { extensionId: extensionIdentifier.id });
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this.telemetryService.publicLog2('uri_invoked/install_extension/accept', { extensionId: extensionIdentifier.id });
|
|
217
|
+
try {
|
|
218
|
+
extension = await this.progressService.withProgress({
|
|
219
|
+
location: 15 ,
|
|
220
|
+
title: ( localizeWithPath(
|
|
221
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
222
|
+
'Installing',
|
|
223
|
+
"Installing Extension '{0}'...",
|
|
224
|
+
galleryExtension.displayName || galleryExtension.name
|
|
225
|
+
))
|
|
226
|
+
}, () => this.extensionManagementService.installFromGallery(galleryExtension));
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
this.notificationService.error(error);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (!this.extensionEnablementService.isEnabled(extension)) {
|
|
234
|
+
this.telemetryService.publicLog2('uri_invoked/enable_extension/start', { extensionId: extensionIdentifier.id });
|
|
235
|
+
const result = await this.dialogService.confirm({
|
|
236
|
+
message: ( localizeWithPath(
|
|
237
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
238
|
+
'enableAndHandle',
|
|
239
|
+
"Extension '{0}' is disabled. Would you like to enable the extension and open the URL?",
|
|
240
|
+
extension.manifest.displayName || extension.manifest.name
|
|
241
|
+
)),
|
|
242
|
+
detail: `${extension.manifest.displayName || extension.manifest.name} (${extensionIdentifier.id}) wants to open a URL:\n\n${( uri.toString())}`,
|
|
243
|
+
primaryButton: ( localizeWithPath(
|
|
244
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
245
|
+
{ key: 'enableAndReload', comment: ['&& denotes a mnemonic'] },
|
|
246
|
+
"&&Enable and Open"
|
|
247
|
+
))
|
|
248
|
+
});
|
|
249
|
+
if (!result.confirmed) {
|
|
250
|
+
this.telemetryService.publicLog2('uri_invoked/enable_extension/cancel', { extensionId: extensionIdentifier.id });
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
this.telemetryService.publicLog2('uri_invoked/enable_extension/accept', { extensionId: extensionIdentifier.id });
|
|
254
|
+
await this.extensionEnablementService.setEnablement([extension], 8 );
|
|
255
|
+
}
|
|
256
|
+
if (this.extensionService.canAddExtension(toExtensionDescription(extension))) {
|
|
257
|
+
await this.waitUntilExtensionIsAdded(extensionIdentifier);
|
|
258
|
+
await this.handleURL(uri, { ...options, trusted: true });
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
this.telemetryService.publicLog2('uri_invoked/activate_extension/start', { extensionId: extensionIdentifier.id });
|
|
262
|
+
const result = await this.dialogService.confirm({
|
|
263
|
+
message: ( localizeWithPath(
|
|
264
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
265
|
+
'reloadAndHandle',
|
|
266
|
+
"Extension '{0}' is not loaded. Would you like to reload the window to load the extension and open the URL?",
|
|
267
|
+
extension.manifest.displayName || extension.manifest.name
|
|
268
|
+
)),
|
|
269
|
+
detail: `${extension.manifest.displayName || extension.manifest.name} (${extensionIdentifier.id}) wants to open a URL:\n\n${( uri.toString())}`,
|
|
270
|
+
primaryButton: ( localizeWithPath(
|
|
271
|
+
'vs/workbench/services/extensions/browser/extensionUrlHandler',
|
|
272
|
+
{ key: 'reloadAndOpen', comment: ['&& denotes a mnemonic'] },
|
|
273
|
+
"&&Reload Window and Open"
|
|
274
|
+
))
|
|
275
|
+
});
|
|
276
|
+
if (!result.confirmed) {
|
|
277
|
+
this.telemetryService.publicLog2('uri_invoked/activate_extension/cancel', { extensionId: extensionIdentifier.id });
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
this.telemetryService.publicLog2('uri_invoked/activate_extension/accept', { extensionId: extensionIdentifier.id });
|
|
281
|
+
this.storageService.store(URL_TO_HANDLE, JSON.stringify(uri.toJSON()), 1 , 1 );
|
|
282
|
+
await this.hostService.reload();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
async waitUntilExtensionIsAdded(extensionId) {
|
|
286
|
+
if (!(await this.extensionService.getExtension(extensionId.id))) {
|
|
287
|
+
await ( new Promise((c, e) => {
|
|
288
|
+
const disposable = this.extensionService.onDidChangeExtensions(async () => {
|
|
289
|
+
try {
|
|
290
|
+
if (await this.extensionService.getExtension(extensionId.id)) {
|
|
291
|
+
disposable.dispose();
|
|
292
|
+
c();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
e(error);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
garbageCollect() {
|
|
303
|
+
const now = ( new Date()).getTime();
|
|
304
|
+
const uriBuffer = ( new Map());
|
|
305
|
+
this.uriBuffer.forEach((uris, extensionId) => {
|
|
306
|
+
uris = uris.filter(({ timestamp }) => now - timestamp < FIVE_MINUTES);
|
|
307
|
+
if (uris.length > 0) {
|
|
308
|
+
uriBuffer.set(extensionId, uris);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
this.uriBuffer = uriBuffer;
|
|
312
|
+
}
|
|
313
|
+
didUserTrustExtension(id) {
|
|
314
|
+
if (( this.userTrustedExtensionsStorage.has(id))) {
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
return this.getConfirmedTrustedExtensionIdsFromConfiguration().indexOf(id) > -1;
|
|
318
|
+
}
|
|
319
|
+
getConfirmedTrustedExtensionIdsFromConfiguration() {
|
|
320
|
+
const trustedExtensionIds = this.configurationService.getValue(USER_TRUSTED_EXTENSIONS_CONFIGURATION_KEY);
|
|
321
|
+
if (!Array.isArray(trustedExtensionIds)) {
|
|
322
|
+
return [];
|
|
323
|
+
}
|
|
324
|
+
return trustedExtensionIds;
|
|
325
|
+
}
|
|
326
|
+
dispose() {
|
|
327
|
+
this.disposable.dispose();
|
|
328
|
+
this.extensionHandlers.clear();
|
|
329
|
+
this.uriBuffer.clear();
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
ExtensionUrlHandler = ( __decorate([
|
|
333
|
+
( __param(0, IURLService)),
|
|
334
|
+
( __param(1, IExtensionService)),
|
|
335
|
+
( __param(2, IDialogService)),
|
|
336
|
+
( __param(3, INotificationService)),
|
|
337
|
+
( __param(4, IExtensionManagementService)),
|
|
338
|
+
( __param(5, IWorkbenchExtensionEnablementService)),
|
|
339
|
+
( __param(6, IHostService)),
|
|
340
|
+
( __param(7, IExtensionGalleryService)),
|
|
341
|
+
( __param(8, IStorageService)),
|
|
342
|
+
( __param(9, IConfigurationService)),
|
|
343
|
+
( __param(10, IProgressService)),
|
|
344
|
+
( __param(11, ITelemetryService)),
|
|
345
|
+
( __param(12, IProductService))
|
|
346
|
+
], ExtensionUrlHandler));
|
|
41
347
|
let ExtensionUrlBootstrapHandler = class ExtensionUrlBootstrapHandler {
|
|
42
348
|
static { ExtensionUrlBootstrapHandler_1 = this; }
|
|
43
349
|
static { this._cache = []; }
|
|
@@ -104,4 +410,4 @@ class ManageAuthorizedExtensionURIsAction extends Action2 {
|
|
|
104
410
|
}
|
|
105
411
|
}
|
|
106
412
|
registerAction2(ManageAuthorizedExtensionURIsAction);
|
|
107
|
-
export { IExtensionUrlHandler };
|
|
413
|
+
export { ExtensionUrlHandler, IExtensionUrlHandler };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
|
|
2
|
+
var css = ".workbench-suggest-widget{display:flex;flex-direction:column;left:0;position:absolute;top:0;width:430px;z-index:40}.workbench-suggest-widget.message{align-items:center;flex-direction:row}.monaco-workbench .workbench-suggest-details,.workbench-suggest-widget{background-color:var(--vscode-editorSuggestWidget-background);border-color:var(--vscode-editorSuggestWidget-border);border-style:solid;border-width:1px;flex:0 1 auto;width:100%}.monaco-workbench.hc-black .workbench-suggest-details,.monaco-workbench.hc-black .workbench-suggest-widget,.monaco-workbench.hc-light .workbench-suggest-details,.monaco-workbench.hc-light .workbench-suggest-widget{border-width:2px}.monaco-workbench .workbench-suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-workbench .workbench-suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-workbench .workbench-suggest-widget.with-status-bar .suggest-status-bar .action-label{color:var(--vscode-editorSuggestWidgetStatus-foreground)}.monaco-workbench .workbench-suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-workbench .workbench-suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label:after{content:\", \";margin-right:.3em}.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore,.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none}.workbench-suggest-widget .monaco-list .monaco-list-row{background-position:2px 2px;background-repeat:no-repeat;-mox-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:flex;padding-right:10px;touch-action:none;white-space:nowrap}.workbench-suggest-widget .monaco-list .monaco-list-row.focused{color:var(--vscode-editorSuggestWidget-selectedForeground)}.workbench-suggest-widget .monaco-list .monaco-list-row.focused .codicon{color:var(--vscode-editorSuggestWidget-selectedIconForeground)}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;overflow:hidden;padding-left:2px}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main{display:flex;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:pre}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left,.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label{color:var(--vscode-editorSuggestWidget-foreground)}.workbench-suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:700}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-highlightForeground)}.workbench-suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-focusHighlightForeground)}.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:.66;text-decoration:unset}.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label:before{height:100%}.workbench-suggest-widget .monaco-list .monaco-list-row .icon{background-position:50%;background-repeat:no-repeat;background-size:80%;display:block;height:16px;margin-left:2px;width:16px}.workbench-suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.workbench-suggest-widget .monaco-list .monaco-list-row .suggest-icon{align-items:center;display:flex;margin-right:4px}.workbench-suggest-widget.no-icons .monaco-list .monaco-list-row .icon,.workbench-suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon:before{display:none}.workbench-suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{border:.1em solid #000;display:inline-block;height:.7em;margin:0 0 0 .3em;width:.7em}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{opacity:.7}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{opacity:.6;overflow:hidden;text-overflow:ellipsis}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{align-self:center;font-size:85%;line-height:normal;margin-left:12px;opacity:.4;overflow:hidden;text-overflow:ellipsis}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{font-size:85%;margin-left:1.1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,.workbench-suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label,.workbench-suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{display:inline}.workbench-suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-grow:1;flex-shrink:1;overflow:hidden}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.workbench-suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{flex-shrink:4;max-width:70%;overflow:hidden}.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:inline-block;height:18px;position:absolute;right:10px;visibility:hidden;width:18px}";
|
|
3
|
+
n(css,{});
|
|
4
|
+
export { css, css as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FuzzyScore } from 'monaco-editor/esm/vs/base/common/filters.js';
|
|
2
|
+
class SimpleCompletionItem {
|
|
3
|
+
constructor(completion) {
|
|
4
|
+
this.completion = completion;
|
|
5
|
+
this.score = FuzzyScore.Default;
|
|
6
|
+
this.distance = 0;
|
|
7
|
+
this.labelLow = this.completion.label.toLowerCase();
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export { SimpleCompletionItem };
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { quickSelect } from 'monaco-editor/esm/vs/base/common/arrays.js';
|
|
2
|
+
import { FuzzyScoreOptions, FuzzyScore, fuzzyScore, fuzzyScoreGracefulAggressive } from 'monaco-editor/esm/vs/base/common/filters.js';
|
|
3
|
+
class LineContext {
|
|
4
|
+
constructor(leadingLineContent, characterCountDelta) {
|
|
5
|
+
this.leadingLineContent = leadingLineContent;
|
|
6
|
+
this.characterCountDelta = characterCountDelta;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
class SimpleCompletionModel {
|
|
10
|
+
constructor(_items, _lineContext, replacementIndex, replacementLength) {
|
|
11
|
+
this._items = _items;
|
|
12
|
+
this._lineContext = _lineContext;
|
|
13
|
+
this.replacementIndex = replacementIndex;
|
|
14
|
+
this.replacementLength = replacementLength;
|
|
15
|
+
this._refilterKind = 1 ;
|
|
16
|
+
this._fuzzyScoreOptions = FuzzyScoreOptions.default;
|
|
17
|
+
this._options = {};
|
|
18
|
+
}
|
|
19
|
+
get items() {
|
|
20
|
+
this._ensureCachedState();
|
|
21
|
+
return this._filteredItems;
|
|
22
|
+
}
|
|
23
|
+
get stats() {
|
|
24
|
+
this._ensureCachedState();
|
|
25
|
+
return this._stats;
|
|
26
|
+
}
|
|
27
|
+
get lineContext() {
|
|
28
|
+
return this._lineContext;
|
|
29
|
+
}
|
|
30
|
+
set lineContext(value) {
|
|
31
|
+
if (this._lineContext.leadingLineContent !== value.leadingLineContent
|
|
32
|
+
|| this._lineContext.characterCountDelta !== value.characterCountDelta) {
|
|
33
|
+
this._refilterKind = this._lineContext.characterCountDelta < value.characterCountDelta && this._filteredItems ? 2 : 1 ;
|
|
34
|
+
this._lineContext = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
_ensureCachedState() {
|
|
38
|
+
if (this._refilterKind !== 0 ) {
|
|
39
|
+
this._createCachedState();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
_createCachedState() {
|
|
43
|
+
const labelLengths = [];
|
|
44
|
+
const { leadingLineContent, characterCountDelta } = this._lineContext;
|
|
45
|
+
let word = '';
|
|
46
|
+
let wordLow = '';
|
|
47
|
+
const source = this._refilterKind === 1 ? this._items : this._filteredItems;
|
|
48
|
+
const target = [];
|
|
49
|
+
const scoreFn = (!this._options.filterGraceful || source.length > 2000) ? fuzzyScore : fuzzyScoreGracefulAggressive;
|
|
50
|
+
for (let i = 0; i < source.length; i++) {
|
|
51
|
+
const item = source[i];
|
|
52
|
+
const overwriteBefore = this.replacementLength;
|
|
53
|
+
const wordLen = overwriteBefore + characterCountDelta;
|
|
54
|
+
if (word.length !== wordLen) {
|
|
55
|
+
word = wordLen === 0 ? '' : leadingLineContent.slice(-wordLen);
|
|
56
|
+
wordLow = word.toLowerCase();
|
|
57
|
+
}
|
|
58
|
+
item.word = word;
|
|
59
|
+
if (wordLen === 0) {
|
|
60
|
+
item.score = FuzzyScore.Default;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
let wordPos = 0;
|
|
64
|
+
while (wordPos < overwriteBefore) {
|
|
65
|
+
const ch = word.charCodeAt(wordPos);
|
|
66
|
+
if (ch === 32 || ch === 9 ) {
|
|
67
|
+
wordPos += 1;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (wordPos >= wordLen) {
|
|
74
|
+
item.score = FuzzyScore.Default;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const match = scoreFn(word, wordLow, wordPos, item.completion.label, item.labelLow, 0, this._fuzzyScoreOptions);
|
|
78
|
+
if (!match) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
item.score = match;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
item.idx = i;
|
|
85
|
+
item.distance = 1;
|
|
86
|
+
target.push(item);
|
|
87
|
+
labelLengths.push(item.completion.label.length);
|
|
88
|
+
}
|
|
89
|
+
this._filteredItems = target;
|
|
90
|
+
this._refilterKind = 0 ;
|
|
91
|
+
this._stats = {
|
|
92
|
+
pLabelLen: labelLengths.length ?
|
|
93
|
+
quickSelect(labelLengths.length - .85, labelLengths, (a, b) => a - b)
|
|
94
|
+
: 0
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export { LineContext, SimpleCompletionModel };
|