quickAccess.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import { coalesce } from '../../../base/common/arrays.js';
  6. import { toDisposable } from '../../../base/common/lifecycle.js';
  7. import { Registry } from '../../registry/common/platform.js';
  8. export var DefaultQuickAccessFilterValue;
  9. (function (DefaultQuickAccessFilterValue) {
  10. /**
  11. * Keep the value as it is given to quick access.
  12. */
  13. DefaultQuickAccessFilterValue[DefaultQuickAccessFilterValue["PRESERVE"] = 0] = "PRESERVE";
  14. /**
  15. * Use the value that was used last time something was accepted from the picker.
  16. */
  17. DefaultQuickAccessFilterValue[DefaultQuickAccessFilterValue["LAST"] = 1] = "LAST";
  18. })(DefaultQuickAccessFilterValue || (DefaultQuickAccessFilterValue = {}));
  19. export const Extensions = {
  20. Quickaccess: 'workbench.contributions.quickaccess'
  21. };
  22. export class QuickAccessRegistry {
  23. constructor() {
  24. this.providers = [];
  25. this.defaultProvider = undefined;
  26. }
  27. registerQuickAccessProvider(provider) {
  28. // Extract the default provider when no prefix is present
  29. if (provider.prefix.length === 0) {
  30. this.defaultProvider = provider;
  31. }
  32. else {
  33. this.providers.push(provider);
  34. }
  35. // sort the providers by decreasing prefix length, such that longer
  36. // prefixes take priority: 'ext' vs 'ext install' - the latter should win
  37. this.providers.sort((providerA, providerB) => providerB.prefix.length - providerA.prefix.length);
  38. return toDisposable(() => {
  39. this.providers.splice(this.providers.indexOf(provider), 1);
  40. if (this.defaultProvider === provider) {
  41. this.defaultProvider = undefined;
  42. }
  43. });
  44. }
  45. getQuickAccessProviders() {
  46. return coalesce([this.defaultProvider, ...this.providers]);
  47. }
  48. getQuickAccessProvider(prefix) {
  49. const result = prefix ? (this.providers.find(provider => prefix.startsWith(provider.prefix)) || undefined) : undefined;
  50. return result || this.defaultProvider;
  51. }
  52. }
  53. Registry.add(Extensions.Quickaccess, new QuickAccessRegistry());