@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.
Files changed (53) hide show
  1. package/README.md +430 -0
  2. package/contributions.js +3 -0
  3. package/localExtensionHost.js +3 -2
  4. package/missing-services.js +57 -1
  5. package/monaco-editor-treemending.patch +3375 -3375
  6. package/package.json +6 -6
  7. package/vscode/src/vs/base/common/prefixTree.js +130 -0
  8. package/vscode/src/vs/platform/actions/browser/floatingMenu.js +26 -2
  9. package/vscode/src/vs/platform/terminal/common/capabilities/bufferMarkCapability.js +41 -0
  10. package/vscode/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.js +566 -0
  11. package/vscode/src/vs/platform/terminal/common/capabilities/cwdDetectionCapability.js +29 -0
  12. package/vscode/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.js +48 -0
  13. package/vscode/src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.js +94 -0
  14. package/vscode/src/vs/platform/terminal/common/terminalEnvironment.js +37 -0
  15. package/vscode/src/vs/platform/terminal/common/terminalStrings.js +16 -0
  16. package/vscode/src/vs/platform/terminal/common/xterm/shellIntegrationAddon.js +319 -0
  17. package/vscode/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.js +91 -1
  18. package/vscode/src/vs/workbench/contrib/format/browser/formatActionsMultiple.js +423 -0
  19. package/vscode/src/vs/workbench/contrib/format/browser/formatActionsNone.js +82 -0
  20. package/vscode/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.js +564 -11
  21. package/vscode/src/vs/workbench/contrib/scm/common/scm.js +9 -1
  22. package/vscode/src/vs/workbench/contrib/terminal/browser/detachedTerminal.js +67 -0
  23. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalExtensions.js +25 -0
  24. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalIcons.js +64 -0
  25. package/vscode/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.js +36 -0
  26. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.js +538 -0
  27. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationStyles.js +104 -0
  28. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon.js +416 -0
  29. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/suggestAddon.js +390 -0
  30. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.js +799 -0
  31. package/vscode/src/vs/workbench/contrib/testing/common/getComputedState.js +101 -0
  32. package/vscode/src/vs/workbench/contrib/testing/common/observableValue.js +30 -0
  33. package/vscode/src/vs/workbench/contrib/testing/common/storedValue.js +36 -0
  34. package/vscode/src/vs/workbench/contrib/testing/common/testExplorerFilterState.js +116 -0
  35. package/vscode/src/vs/workbench/contrib/testing/common/testProfileService.js +172 -1
  36. package/vscode/src/vs/workbench/contrib/testing/common/testResult.js +384 -0
  37. package/vscode/src/vs/workbench/contrib/testing/common/testResultService.js +156 -1
  38. package/vscode/src/vs/workbench/contrib/testing/common/testResultStorage.js +156 -0
  39. package/vscode/src/vs/workbench/contrib/testing/common/testService.js +75 -1
  40. package/vscode/src/vs/workbench/contrib/testing/common/testTypes.js +9 -1
  41. package/vscode/src/vs/workbench/contrib/testing/common/testingContextKeys.js +179 -0
  42. package/vscode/src/vs/workbench/contrib/testing/common/testingContinuousRunService.js +102 -0
  43. package/vscode/src/vs/workbench/contrib/testing/common/testingDecorations.js +29 -0
  44. package/vscode/src/vs/workbench/contrib/testing/common/testingPeekOpener.js +3 -0
  45. package/vscode/src/vs/workbench/contrib/testing/common/testingStates.js +47 -0
  46. package/vscode/src/vs/workbench/services/authentication/browser/authenticationService.js +594 -2
  47. package/vscode/src/vs/workbench/services/extensions/browser/extensionUrlHandler.js +307 -1
  48. package/vscode/src/vs/workbench/services/suggest/browser/media/suggest.css.js +4 -0
  49. package/vscode/src/vs/workbench/services/suggest/browser/simpleCompletionItem.js +10 -0
  50. package/vscode/src/vs/workbench/services/suggest/browser/simpleCompletionModel.js +98 -0
  51. package/vscode/src/vs/workbench/services/suggest/browser/simpleSuggestWidget.js +428 -0
  52. package/vscode/src/vs/workbench/services/suggest/browser/simpleSuggestWidgetRenderer.js +83 -0
  53. 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 };