monaco-editor-core 0.55.0-dev-20251022 → 0.55.0-dev-20251023
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/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +6 -0
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/list/listPaging.js +5 -1
- package/esm/vs/base/browser/ui/list/listPaging.js.map +1 -1
- package/esm/vs/base/browser/ui/list/listView.js +4 -3
- package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
- package/esm/vs/base/common/arrays.js +10 -0
- package/esm/vs/base/common/arrays.js.map +1 -1
- package/esm/vs/base/common/paging.js.map +1 -1
- package/esm/vs/base/common/platform.js +1 -0
- package/esm/vs/base/common/platform.js.map +1 -1
- package/esm/vs/base/common/validation.js +157 -0
- package/esm/vs/base/common/validation.js.map +1 -0
- package/esm/vs/editor/common/languages.js +10 -0
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/treeSitter/treeSitterSyntaxTokenBackend.js +1 -1
- package/esm/vs/editor/common/model/tokens/treeSitter/treeSitterSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/services/treeSitter/treeSitterLibraryService.js.map +1 -1
- package/esm/vs/editor/common/viewModel/viewModelLines.js.map +1 -1
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +64 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +12 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +11 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +4 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +3 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +31 -31
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
- package/esm/vs/editor/contrib/links/browser/links.js +10 -10
- package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
- package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +8 -8
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
- package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +8 -8
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +10 -10
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +1 -1
- package/esm/vs/editor/standalone/browser/standaloneTreeSitterLibraryService.js +2 -12
- package/esm/vs/editor/standalone/browser/standaloneTreeSitterLibraryService.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
- package/esm/vs/platform/actions/browser/toolbar.js +2 -2
- package/esm/vs/platform/actions/common/actions.js +1 -0
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +2 -2
- package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
- package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/markers/common/markerService.js +2 -2
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +19 -9
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
- package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +2 -2
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js.map +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +17 -17
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
- package/esm/vs/platform/theme/common/colors/miscColors.js +15 -15
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/package.json +2 -2
|
@@ -7,17 +7,17 @@ import { localize } from '../../../nls.js';
|
|
|
7
7
|
function hintDidYouMean(...meant) {
|
|
8
8
|
switch (meant.length) {
|
|
9
9
|
case 1:
|
|
10
|
-
return localize(
|
|
10
|
+
return localize(1689, "Did you mean {0}?", meant[0]);
|
|
11
11
|
case 2:
|
|
12
|
-
return localize(
|
|
12
|
+
return localize(1690, "Did you mean {0} or {1}?", meant[0], meant[1]);
|
|
13
13
|
case 3:
|
|
14
|
-
return localize(
|
|
14
|
+
return localize(1691, "Did you mean {0}, {1} or {2}?", meant[0], meant[1], meant[2]);
|
|
15
15
|
default: // we just don't expect that many
|
|
16
16
|
return undefined;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
const hintDidYouForgetToOpenOrCloseQuote = localize(
|
|
20
|
-
const hintDidYouForgetToEscapeSlash = localize(
|
|
19
|
+
const hintDidYouForgetToOpenOrCloseQuote = localize(1692, "Did you forget to open or close the quote?");
|
|
20
|
+
const hintDidYouForgetToEscapeSlash = localize(1693, "Did you forget to escape the '/' (slash) character? Put two backslashes before it to escape, e.g., '\\\\/\'.");
|
|
21
21
|
/**
|
|
22
22
|
* A simple scanner for context keys.
|
|
23
23
|
*
|
|
@@ -18,7 +18,7 @@ import { KeybindingsRegistry } from '../../keybinding/common/keybindingsRegistry
|
|
|
18
18
|
import { localize } from '../../../nls.js';
|
|
19
19
|
import { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';
|
|
20
20
|
import { isActiveElement } from '../../../base/browser/dom.js';
|
|
21
|
-
export const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize(
|
|
21
|
+
export const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize(1694, "Whether suggestion are visible"));
|
|
22
22
|
const HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';
|
|
23
23
|
const HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';
|
|
24
24
|
const HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';
|
|
@@ -95,11 +95,11 @@ export class AbstractKeybindingService extends Disposable {
|
|
|
95
95
|
throw illegalState('impossible');
|
|
96
96
|
case 1:
|
|
97
97
|
// TODO@ulugbekna: revise this message and the one below (at least, fix terminology)
|
|
98
|
-
this._currentChordStatusMessage = this._notificationService.status(nls.localize(
|
|
98
|
+
this._currentChordStatusMessage = this._notificationService.status(nls.localize(1695, "({0}) was pressed. Waiting for second key of chord...", keypressLabel));
|
|
99
99
|
break;
|
|
100
100
|
default: {
|
|
101
101
|
const fullKeypressLabel = this._currentChords.map(({ label }) => label).join(', ');
|
|
102
|
-
this._currentChordStatusMessage = this._notificationService.status(nls.localize(
|
|
102
|
+
this._currentChordStatusMessage = this._notificationService.status(nls.localize(1696, "({0}) was pressed. Waiting for next key of chord...", fullKeypressLabel));
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
this._scheduleLeaveChordMode();
|
|
@@ -198,7 +198,7 @@ export class AbstractKeybindingService extends Disposable {
|
|
|
198
198
|
if (this.inChordMode) {
|
|
199
199
|
const currentChordsLabel = this._currentChords.map(({ label }) => label).join(', ');
|
|
200
200
|
this._log(`+ Leaving multi-chord mode: Nothing bound to "${currentChordsLabel}, ${keypressLabel}".`);
|
|
201
|
-
this._notificationService.status(nls.localize(
|
|
201
|
+
this._notificationService.status(nls.localize(1697, "The key combination ({0}, {1}) is not a command.", currentChordsLabel, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });
|
|
202
202
|
this._leaveChordMode();
|
|
203
203
|
shouldPreventDefault = true;
|
|
204
204
|
}
|
|
@@ -217,7 +217,7 @@ export class AbstractKeybindingService extends Disposable {
|
|
|
217
217
|
if (this.inChordMode) {
|
|
218
218
|
const currentChordsLabel = this._currentChords.map(({ label }) => label).join(', ');
|
|
219
219
|
this._log(`+ Leaving chord mode: Nothing bound to "${currentChordsLabel}, ${keypressLabel}".`);
|
|
220
|
-
this._notificationService.status(nls.localize(
|
|
220
|
+
this._notificationService.status(nls.localize(1698, "The key combination ({0}, {1}) is not a command.", currentChordsLabel, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });
|
|
221
221
|
this._leaveChordMode();
|
|
222
222
|
shouldPreventDefault = true;
|
|
223
223
|
}
|
|
@@ -904,18 +904,18 @@ const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration)
|
|
|
904
904
|
configurationRegistry.registerConfiguration({
|
|
905
905
|
id: 'workbench',
|
|
906
906
|
order: 7,
|
|
907
|
-
title: localize(
|
|
907
|
+
title: localize(1699, "Workbench"),
|
|
908
908
|
type: 'object',
|
|
909
909
|
properties: {
|
|
910
910
|
[multiSelectModifierSettingKey]: {
|
|
911
911
|
type: 'string',
|
|
912
912
|
enum: ['ctrlCmd', 'alt'],
|
|
913
913
|
markdownEnumDescriptions: [
|
|
914
|
-
localize(
|
|
915
|
-
localize(
|
|
914
|
+
localize(1700, "Maps to `Control` on Windows and Linux and to `Command` on macOS."),
|
|
915
|
+
localize(1701, "Maps to `Alt` on Windows and Linux and to `Option` on macOS.")
|
|
916
916
|
],
|
|
917
917
|
default: 'ctrlCmd',
|
|
918
|
-
description: localize(
|
|
918
|
+
description: localize(1702, "The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.")
|
|
919
919
|
|
|
920
920
|
|
|
921
921
|
|
|
@@ -927,7 +927,7 @@ configurationRegistry.registerConfiguration({
|
|
|
927
927
|
type: 'string',
|
|
928
928
|
enum: ['singleClick', 'doubleClick'],
|
|
929
929
|
default: 'singleClick',
|
|
930
|
-
description: localize(
|
|
930
|
+
description: localize(1703, "Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.")
|
|
931
931
|
|
|
932
932
|
|
|
933
933
|
|
|
@@ -935,96 +935,96 @@ configurationRegistry.registerConfiguration({
|
|
|
935
935
|
[horizontalScrollingKey]: {
|
|
936
936
|
type: 'boolean',
|
|
937
937
|
default: false,
|
|
938
|
-
description: localize(
|
|
938
|
+
description: localize(1704, "Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.")
|
|
939
939
|
},
|
|
940
940
|
[scrollByPageKey]: {
|
|
941
941
|
type: 'boolean',
|
|
942
942
|
default: false,
|
|
943
|
-
description: localize(
|
|
943
|
+
description: localize(1705, "Controls whether clicks in the scrollbar scroll page by page.")
|
|
944
944
|
},
|
|
945
945
|
[treeIndentKey]: {
|
|
946
946
|
type: 'number',
|
|
947
947
|
default: 8,
|
|
948
948
|
minimum: 4,
|
|
949
949
|
maximum: 40,
|
|
950
|
-
description: localize(
|
|
950
|
+
description: localize(1706, "Controls tree indentation in pixels.")
|
|
951
951
|
},
|
|
952
952
|
[treeRenderIndentGuidesKey]: {
|
|
953
953
|
type: 'string',
|
|
954
954
|
enum: ['none', 'onHover', 'always'],
|
|
955
955
|
default: 'onHover',
|
|
956
|
-
description: localize(
|
|
956
|
+
description: localize(1707, "Controls whether the tree should render indent guides.")
|
|
957
957
|
},
|
|
958
958
|
[listSmoothScrolling]: {
|
|
959
959
|
type: 'boolean',
|
|
960
960
|
default: false,
|
|
961
|
-
description: localize(
|
|
961
|
+
description: localize(1708, "Controls whether lists and trees have smooth scrolling."),
|
|
962
962
|
},
|
|
963
963
|
[mouseWheelScrollSensitivityKey]: {
|
|
964
964
|
type: 'number',
|
|
965
965
|
default: 1,
|
|
966
|
-
markdownDescription: localize(
|
|
966
|
+
markdownDescription: localize(1709, "A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.")
|
|
967
967
|
},
|
|
968
968
|
[fastScrollSensitivityKey]: {
|
|
969
969
|
type: 'number',
|
|
970
970
|
default: 5,
|
|
971
|
-
markdownDescription: localize(
|
|
971
|
+
markdownDescription: localize(1710, "Scrolling speed multiplier when pressing `Alt`.")
|
|
972
972
|
},
|
|
973
973
|
[defaultFindModeSettingKey]: {
|
|
974
974
|
type: 'string',
|
|
975
975
|
enum: ['highlight', 'filter'],
|
|
976
976
|
enumDescriptions: [
|
|
977
|
-
localize(
|
|
978
|
-
localize(
|
|
977
|
+
localize(1711, "Highlight elements when searching. Further up and down navigation will traverse only the highlighted elements."),
|
|
978
|
+
localize(1712, "Filter elements when searching.")
|
|
979
979
|
],
|
|
980
980
|
default: 'highlight',
|
|
981
|
-
description: localize(
|
|
981
|
+
description: localize(1713, "Controls the default find mode for lists and trees in the workbench.")
|
|
982
982
|
},
|
|
983
983
|
[keyboardNavigationSettingKey]: {
|
|
984
984
|
type: 'string',
|
|
985
985
|
enum: ['simple', 'highlight', 'filter'],
|
|
986
986
|
enumDescriptions: [
|
|
987
|
-
localize(
|
|
988
|
-
localize(
|
|
989
|
-
localize(
|
|
987
|
+
localize(1714, "Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes."),
|
|
988
|
+
localize(1715, "Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements."),
|
|
989
|
+
localize(1716, "Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.")
|
|
990
990
|
],
|
|
991
991
|
default: 'highlight',
|
|
992
|
-
description: localize(
|
|
992
|
+
description: localize(1717, "Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter."),
|
|
993
993
|
deprecated: true,
|
|
994
|
-
deprecationMessage: localize(
|
|
994
|
+
deprecationMessage: localize(1718, "Please use 'workbench.list.defaultFindMode' and 'workbench.list.typeNavigationMode' instead.")
|
|
995
995
|
},
|
|
996
996
|
[defaultFindMatchTypeSettingKey]: {
|
|
997
997
|
type: 'string',
|
|
998
998
|
enum: ['fuzzy', 'contiguous'],
|
|
999
999
|
enumDescriptions: [
|
|
1000
|
-
localize(
|
|
1001
|
-
localize(
|
|
1000
|
+
localize(1719, "Use fuzzy matching when searching."),
|
|
1001
|
+
localize(1720, "Use contiguous matching when searching.")
|
|
1002
1002
|
],
|
|
1003
1003
|
default: 'fuzzy',
|
|
1004
|
-
description: localize(
|
|
1004
|
+
description: localize(1721, "Controls the type of matching used when searching lists and trees in the workbench.")
|
|
1005
1005
|
},
|
|
1006
1006
|
[treeExpandMode]: {
|
|
1007
1007
|
type: 'string',
|
|
1008
1008
|
enum: ['singleClick', 'doubleClick'],
|
|
1009
1009
|
default: 'singleClick',
|
|
1010
|
-
description: localize(
|
|
1010
|
+
description: localize(1722, "Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable."),
|
|
1011
1011
|
},
|
|
1012
1012
|
[treeStickyScroll]: {
|
|
1013
1013
|
type: 'boolean',
|
|
1014
1014
|
default: true,
|
|
1015
|
-
description: localize(
|
|
1015
|
+
description: localize(1723, "Controls whether sticky scrolling is enabled in trees."),
|
|
1016
1016
|
},
|
|
1017
1017
|
[treeStickyScrollMaxElements]: {
|
|
1018
1018
|
type: 'number',
|
|
1019
1019
|
minimum: 1,
|
|
1020
1020
|
default: 7,
|
|
1021
|
-
markdownDescription: localize(
|
|
1021
|
+
markdownDescription: localize(1724, "Controls the number of sticky elements displayed in the tree when {0} is enabled.", '`#workbench.tree.enableStickyScroll#`'),
|
|
1022
1022
|
},
|
|
1023
1023
|
[typeNavigationModeSettingKey]: {
|
|
1024
1024
|
type: 'string',
|
|
1025
1025
|
enum: ['automatic', 'trigger'],
|
|
1026
1026
|
default: 'automatic',
|
|
1027
|
-
markdownDescription: localize(
|
|
1027
|
+
markdownDescription: localize(1725, "Controls how type navigation works in lists and trees in the workbench. When set to `trigger`, type navigation begins once the `list.triggerTypeNavigation` command is run."),
|
|
1028
1028
|
}
|
|
1029
1029
|
}
|
|
1030
1030
|
});
|
|
@@ -239,8 +239,8 @@ export class MarkerService {
|
|
|
239
239
|
*/
|
|
240
240
|
_createFilteredMarker(resource, reasons) {
|
|
241
241
|
const message = reasons.length === 1
|
|
242
|
-
? localize(
|
|
243
|
-
: localize(
|
|
242
|
+
? localize(1732, "Problems are paused because: \"{0}\"", reasons[0])
|
|
243
|
+
: localize(1733, "Problems are paused because: \"{0}\" and {1} more", reasons[0], reasons.length - 1);
|
|
244
244
|
return {
|
|
245
245
|
owner: 'markersFilter',
|
|
246
246
|
resource,
|
|
@@ -18,17 +18,17 @@ export var MarkerSeverity;
|
|
|
18
18
|
}
|
|
19
19
|
MarkerSeverity.compare = compare;
|
|
20
20
|
const _displayStrings = Object.create(null);
|
|
21
|
-
_displayStrings[MarkerSeverity.Error] = localize(
|
|
22
|
-
_displayStrings[MarkerSeverity.Warning] = localize(
|
|
23
|
-
_displayStrings[MarkerSeverity.Info] = localize(
|
|
21
|
+
_displayStrings[MarkerSeverity.Error] = localize(1726, "Error");
|
|
22
|
+
_displayStrings[MarkerSeverity.Warning] = localize(1727, "Warning");
|
|
23
|
+
_displayStrings[MarkerSeverity.Info] = localize(1728, "Info");
|
|
24
24
|
function toString(a) {
|
|
25
25
|
return _displayStrings[a] || '';
|
|
26
26
|
}
|
|
27
27
|
MarkerSeverity.toString = toString;
|
|
28
28
|
const _displayStringsPlural = Object.create(null);
|
|
29
|
-
_displayStringsPlural[MarkerSeverity.Error] = localize(
|
|
30
|
-
_displayStringsPlural[MarkerSeverity.Warning] = localize(
|
|
31
|
-
_displayStringsPlural[MarkerSeverity.Info] = localize(
|
|
29
|
+
_displayStringsPlural[MarkerSeverity.Error] = localize(1729, "Errors");
|
|
30
|
+
_displayStringsPlural[MarkerSeverity.Warning] = localize(1730, "Warnings");
|
|
31
|
+
_displayStringsPlural[MarkerSeverity.Info] = localize(1731, "Infos");
|
|
32
32
|
function toStringPlural(a) {
|
|
33
33
|
return _displayStringsPlural[a] || '';
|
|
34
34
|
}
|
|
@@ -30,6 +30,7 @@ import { PickerQuickAccessProvider } from './pickerQuickAccess.js';
|
|
|
30
30
|
import { IStorageService, WillSaveStateReason } from '../../storage/common/storage.js';
|
|
31
31
|
import { ITelemetryService } from '../../telemetry/common/telemetry.js';
|
|
32
32
|
import { removeAccents } from '../../../base/common/normalization.js';
|
|
33
|
+
import { Categories } from '../../action/common/actionCommonCategories.js';
|
|
33
34
|
let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvider extends PickerQuickAccessProvider {
|
|
34
35
|
static { AbstractCommandsQuickAccessProvider_1 = this; }
|
|
35
36
|
static { this.PREFIX = '>'; }
|
|
@@ -150,6 +151,15 @@ let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvi
|
|
|
150
151
|
return 1; // other command was suggested so it wins over the command
|
|
151
152
|
}
|
|
152
153
|
}
|
|
154
|
+
// if one is Developer and the other isn't, put non-Developer first
|
|
155
|
+
const isDeveloperA = commandPickA.commandCategory === Categories.Developer.value;
|
|
156
|
+
const isDeveloperB = commandPickB.commandCategory === Categories.Developer.value;
|
|
157
|
+
if (isDeveloperA && !isDeveloperB) {
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
160
|
+
if (!isDeveloperA && isDeveloperB) {
|
|
161
|
+
return -1;
|
|
162
|
+
}
|
|
153
163
|
// both commands were never used, so we sort by name
|
|
154
164
|
return commandPickA.label.localeCompare(commandPickB.label);
|
|
155
165
|
});
|
|
@@ -161,22 +171,22 @@ let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvi
|
|
|
161
171
|
const commandPick = filteredCommandPicks[i];
|
|
162
172
|
// Separator: recently used
|
|
163
173
|
if (i === 0 && this.commandsHistory.peek(commandPick.commandId)) {
|
|
164
|
-
commandPicks.push({ type: 'separator', label: localize(
|
|
174
|
+
commandPicks.push({ type: 'separator', label: localize(1734, "recently used") });
|
|
165
175
|
addOtherSeparator = true;
|
|
166
176
|
}
|
|
167
177
|
if (addSuggestedSeparator && commandPick.tfIdfScore !== undefined) {
|
|
168
|
-
commandPicks.push({ type: 'separator', label: localize(
|
|
178
|
+
commandPicks.push({ type: 'separator', label: localize(1735, "similar commands") });
|
|
169
179
|
addSuggestedSeparator = false;
|
|
170
180
|
}
|
|
171
181
|
// Separator: commonly used
|
|
172
182
|
if (addCommonlyUsedSeparator && commandPick.tfIdfScore === undefined && !this.commandsHistory.peek(commandPick.commandId) && this.options.suggestedCommandIds?.has(commandPick.commandId)) {
|
|
173
|
-
commandPicks.push({ type: 'separator', label: localize(
|
|
183
|
+
commandPicks.push({ type: 'separator', label: localize(1736, "commonly used") });
|
|
174
184
|
addOtherSeparator = true;
|
|
175
185
|
addCommonlyUsedSeparator = false;
|
|
176
186
|
}
|
|
177
187
|
// Separator: other commands
|
|
178
188
|
if (addOtherSeparator && commandPick.tfIdfScore === undefined && !this.commandsHistory.peek(commandPick.commandId) && !this.options.suggestedCommandIds?.has(commandPick.commandId)) {
|
|
179
|
-
commandPicks.push({ type: 'separator', label: localize(
|
|
189
|
+
commandPicks.push({ type: 'separator', label: localize(1737, "other commands") });
|
|
180
190
|
addOtherSeparator = false;
|
|
181
191
|
}
|
|
182
192
|
// Command
|
|
@@ -196,7 +206,7 @@ let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvi
|
|
|
196
206
|
// Basically, if we haven't already added a separator, we add one before the additional picks so long
|
|
197
207
|
// as one hasn't been added to the start of the array.
|
|
198
208
|
if (addSuggestedSeparator && commandPicks[0]?.type !== 'separator') {
|
|
199
|
-
commandPicks.unshift({ type: 'separator', label: localize(
|
|
209
|
+
commandPicks.unshift({ type: 'separator', label: localize(1738, "similar commands") });
|
|
200
210
|
}
|
|
201
211
|
return commandPicks;
|
|
202
212
|
})()
|
|
@@ -208,7 +218,7 @@ let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvi
|
|
|
208
218
|
}
|
|
209
219
|
const keybinding = this.keybindingService.lookupKeybinding(commandPick.commandId);
|
|
210
220
|
const ariaLabel = keybinding ?
|
|
211
|
-
localize(
|
|
221
|
+
localize(1739, "{0}, {1}", commandPick.label, keybinding.getAriaLabel()) :
|
|
212
222
|
commandPick.label;
|
|
213
223
|
return {
|
|
214
224
|
...commandPick,
|
|
@@ -231,7 +241,7 @@ let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvi
|
|
|
231
241
|
}
|
|
232
242
|
catch (error) {
|
|
233
243
|
if (!isCancellationError(error)) {
|
|
234
|
-
this.dialogService.error(localize(
|
|
244
|
+
this.dialogService.error(localize(1740, "Command '{0}' resulted in an error", commandPick.label), toErrorMessage(error));
|
|
235
245
|
}
|
|
236
246
|
}
|
|
237
247
|
}
|
|
@@ -250,8 +260,8 @@ let AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvi
|
|
|
250
260
|
return chunk;
|
|
251
261
|
}
|
|
252
262
|
/**
|
|
253
|
-
* Normalizes a string for filtering by removing accents, but only if
|
|
254
|
-
* returns the original string.
|
|
263
|
+
* Normalizes a string for filtering by removing accents, but only if
|
|
264
|
+
* the result has the same length, otherwise returns the original string.
|
|
255
265
|
*/
|
|
256
266
|
normalizeForFiltering(value) {
|
|
257
267
|
const withoutAccents = removeAccents(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["vs/platform/quickinput/browser/commandsQuickAccess.ts"],"names":[],"mappings":"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","file":"commandsQuickAccess.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { toErrorMessage } from '../../../base/common/errorMessage.js';\nimport { isCancellationError } from '../../../base/common/errors.js';\nimport { IMatch, matchesContiguousSubString, matchesPrefix, matchesWords, or } from '../../../base/common/filters.js';\nimport { createSingleCallFunction } from '../../../base/common/functional.js';\nimport { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { TfIdfCalculator, normalizeTfIdfScores } from '../../../base/common/tfIdf.js';\nimport { localize } from '../../../nls.js';\nimport { ILocalizedString } from '../../action/common/action.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { IConfigurationChangeEvent, IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IDialogService } from '../../dialogs/common/dialogs.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { ILogService } from '../../log/common/log.js';\nimport { FastAndSlowPicks, IPickerQuickAccessItem, IPickerQuickAccessProviderOptions, PickerQuickAccessProvider, Picks } from './pickerQuickAccess.js';\nimport { IQuickAccessProviderRunOptions } from '../common/quickAccess.js';\nimport { IQuickPickSeparator } from '../common/quickInput.js';\nimport { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from '../../storage/common/storage.js';\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\nimport { removeAccents } from '../../../base/common/normalization.js';\n\nexport interface ICommandQuickPick extends IPickerQuickAccessItem {\n\treadonly commandId: string;\n\treadonly commandAlias?: string;\n\treadonly commandDescription?: ILocalizedString;\n\ttfIdfScore?: number;\n\treadonly args?: any[];\n\n\t// These fields are lazy initialized during filtering process.\n\tlabelNoAccents?: string;\n\taliasNoAccents?: string;\n}\n\nexport interface ICommandsQuickAccessOptions extends IPickerQuickAccessProviderOptions<ICommandQuickPick> {\n\treadonly showAlias: boolean;\n\tsuggestedCommandIds?: Set<string>;\n}\n\nexport abstract class AbstractCommandsQuickAccessProvider extends PickerQuickAccessProvider<ICommandQuickPick> implements IDisposable {\n\n\tstatic PREFIX = '>';\n\n\tprivate static readonly TFIDF_THRESHOLD = 0.5;\n\tprivate static readonly TFIDF_MAX_RESULTS = 5;\n\n\tprivate static WORD_FILTER = or(matchesPrefix, matchesWords, matchesContiguousSubString);\n\n\tprivate readonly commandsHistory: CommandsHistory;\n\n\tprotected override readonly options: ICommandsQuickAccessOptions;\n\n\tconstructor(\n\t\toptions: ICommandsQuickAccessOptions,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IKeybindingService protected readonly keybindingService: IKeybindingService,\n\t\t@ICommandService private readonly commandService: ICommandService,\n\t\t@ITelemetryService private readonly telemetryService: ITelemetryService,\n\t\t@IDialogService private readonly dialogService: IDialogService\n\t) {\n\t\tsuper(AbstractCommandsQuickAccessProvider.PREFIX, options);\n\n\t\tthis.commandsHistory = this._register(instantiationService.createInstance(CommandsHistory));\n\n\t\tthis.options = options;\n\t}\n\n\tprotected async _getPicks(filter: string, _disposables: DisposableStore, token: CancellationToken, runOptions?: IQuickAccessProviderRunOptions): Promise<Picks<ICommandQuickPick> | FastAndSlowPicks<ICommandQuickPick>> {\n\n\t\t// Ask subclass for all command picks\n\t\tconst allCommandPicks = await this.getCommandPicks(token);\n\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst runTfidf = createSingleCallFunction(() => {\n\t\t\tconst tfidf = new TfIdfCalculator();\n\t\t\ttfidf.updateDocuments(allCommandPicks.map(commandPick => ({\n\t\t\t\tkey: commandPick.commandId,\n\t\t\t\ttextChunks: [this.getTfIdfChunk(commandPick)]\n\t\t\t})));\n\t\t\tconst result = tfidf.calculateScores(filter, token);\n\n\t\t\treturn normalizeTfIdfScores(result)\n\t\t\t\t.filter(score => score.score > AbstractCommandsQuickAccessProvider.TFIDF_THRESHOLD)\n\t\t\t\t.slice(0, AbstractCommandsQuickAccessProvider.TFIDF_MAX_RESULTS);\n\t\t});\n\n\t\tconst noAccentsFilter = this.normalizeForFiltering(filter);\n\n\t\t// Filter\n\t\tconst filteredCommandPicks: ICommandQuickPick[] = [];\n\t\tfor (const commandPick of allCommandPicks) {\n\t\t\tcommandPick.labelNoAccents ??= this.normalizeForFiltering(commandPick.label);\n\t\t\tconst labelHighlights = AbstractCommandsQuickAccessProvider.WORD_FILTER(noAccentsFilter, commandPick.labelNoAccents) ?? undefined;\n\n\t\t\tlet aliasHighlights: IMatch[] | undefined;\n\t\t\tif (commandPick.commandAlias) {\n\t\t\t\tcommandPick.aliasNoAccents ??= this.normalizeForFiltering(commandPick.commandAlias);\n\t\t\t\taliasHighlights = AbstractCommandsQuickAccessProvider.WORD_FILTER(noAccentsFilter, commandPick.aliasNoAccents) ?? undefined;\n\t\t\t}\n\n\t\t\t// Add if matching in label or alias\n\t\t\tif (labelHighlights || aliasHighlights) {\n\t\t\t\tcommandPick.highlights = {\n\t\t\t\t\tlabel: labelHighlights,\n\t\t\t\t\tdetail: this.options.showAlias ? aliasHighlights : undefined\n\t\t\t\t};\n\n\t\t\t\tfilteredCommandPicks.push(commandPick);\n\t\t\t}\n\n\t\t\t// Also add if we have a 100% command ID match\n\t\t\telse if (filter === commandPick.commandId) {\n\t\t\t\tfilteredCommandPicks.push(commandPick);\n\t\t\t}\n\n\t\t\t// Handle tf-idf scoring for the rest if there's a filter\n\t\t\telse if (filter.length >= 3) {\n\t\t\t\tconst tfidf = runTfidf();\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\t// Add if we have a tf-idf score\n\t\t\t\tconst tfidfScore = tfidf.find(score => score.key === commandPick.commandId);\n\t\t\t\tif (tfidfScore) {\n\t\t\t\t\tcommandPick.tfIdfScore = tfidfScore.score;\n\t\t\t\t\tfilteredCommandPicks.push(commandPick);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add description to commands that have duplicate labels\n\t\tconst mapLabelToCommand = new Map<string, ICommandQuickPick>();\n\t\tfor (const commandPick of filteredCommandPicks) {\n\t\t\tconst existingCommandForLabel = mapLabelToCommand.get(commandPick.label);\n\t\t\tif (existingCommandForLabel) {\n\t\t\t\tcommandPick.description = commandPick.commandId;\n\t\t\t\texistingCommandForLabel.description = existingCommandForLabel.commandId;\n\t\t\t} else {\n\t\t\t\tmapLabelToCommand.set(commandPick.label, commandPick);\n\t\t\t}\n\t\t}\n\n\t\t// Sort by MRU order and fallback to name otherwise\n\t\tfilteredCommandPicks.sort((commandPickA, commandPickB) => {\n\t\t\t// If a result came from tf-idf, we want to put that towards the bottom\n\t\t\tif (commandPickA.tfIdfScore && commandPickB.tfIdfScore) {\n\t\t\t\tif (commandPickA.tfIdfScore === commandPickB.tfIdfScore) {\n\t\t\t\t\treturn commandPickA.label.localeCompare(commandPickB.label); // prefer lexicographically smaller command\n\t\t\t\t}\n\t\t\t\treturn commandPickB.tfIdfScore - commandPickA.tfIdfScore; // prefer higher tf-idf score\n\t\t\t} else if (commandPickA.tfIdfScore) {\n\t\t\t\treturn 1; // first command has a score but other doesn't so other wins\n\t\t\t} else if (commandPickB.tfIdfScore) {\n\t\t\t\treturn -1; // other command has a score but first doesn't so first wins\n\t\t\t}\n\n\t\t\tconst commandACounter = this.commandsHistory.peek(commandPickA.commandId);\n\t\t\tconst commandBCounter = this.commandsHistory.peek(commandPickB.commandId);\n\n\t\t\tif (commandACounter && commandBCounter) {\n\t\t\t\treturn commandACounter > commandBCounter ? -1 : 1; // use more recently used command before older\n\t\t\t}\n\n\t\t\tif (commandACounter) {\n\t\t\t\treturn -1; // first command was used, so it wins over the non used one\n\t\t\t}\n\n\t\t\tif (commandBCounter) {\n\t\t\t\treturn 1; // other command was used so it wins over the command\n\t\t\t}\n\n\t\t\tif (this.options.suggestedCommandIds) {\n\t\t\t\tconst commandASuggestion = this.options.suggestedCommandIds.has(commandPickA.commandId);\n\t\t\t\tconst commandBSuggestion = this.options.suggestedCommandIds.has(commandPickB.commandId);\n\t\t\t\tif (commandASuggestion && commandBSuggestion) {\n\t\t\t\t\treturn 0; // honor the order of the array\n\t\t\t\t}\n\n\t\t\t\tif (commandASuggestion) {\n\t\t\t\t\treturn -1; // first command was suggested, so it wins over the non suggested one\n\t\t\t\t}\n\n\t\t\t\tif (commandBSuggestion) {\n\t\t\t\t\treturn 1; // other command was suggested so it wins over the command\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// both commands were never used, so we sort by name\n\t\t\treturn commandPickA.label.localeCompare(commandPickB.label);\n\t\t});\n\n\t\tconst commandPicks: Array<ICommandQuickPick | IQuickPickSeparator> = [];\n\n\t\tlet addOtherSeparator = false;\n\t\tlet addSuggestedSeparator = true;\n\t\tlet addCommonlyUsedSeparator = !!this.options.suggestedCommandIds;\n\t\tfor (let i = 0; i < filteredCommandPicks.length; i++) {\n\t\t\tconst commandPick = filteredCommandPicks[i];\n\n\t\t\t// Separator: recently used\n\t\t\tif (i === 0 && this.commandsHistory.peek(commandPick.commandId)) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('recentlyUsed', \"recently used\") });\n\t\t\t\taddOtherSeparator = true;\n\t\t\t}\n\n\t\t\tif (addSuggestedSeparator && commandPick.tfIdfScore !== undefined) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('suggested', \"similar commands\") });\n\t\t\t\taddSuggestedSeparator = false;\n\t\t\t}\n\n\t\t\t// Separator: commonly used\n\t\t\tif (addCommonlyUsedSeparator && commandPick.tfIdfScore === undefined && !this.commandsHistory.peek(commandPick.commandId) && this.options.suggestedCommandIds?.has(commandPick.commandId)) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('commonlyUsed', \"commonly used\") });\n\t\t\t\taddOtherSeparator = true;\n\t\t\t\taddCommonlyUsedSeparator = false;\n\t\t\t}\n\n\t\t\t// Separator: other commands\n\t\t\tif (addOtherSeparator && commandPick.tfIdfScore === undefined && !this.commandsHistory.peek(commandPick.commandId) && !this.options.suggestedCommandIds?.has(commandPick.commandId)) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('morecCommands', \"other commands\") });\n\t\t\t\taddOtherSeparator = false;\n\t\t\t}\n\n\t\t\t// Command\n\t\t\tcommandPicks.push(this.toCommandPick(commandPick, runOptions));\n\t\t}\n\n\t\tif (!this.hasAdditionalCommandPicks(filter, token)) {\n\t\t\treturn commandPicks;\n\t\t}\n\n\t\treturn {\n\t\t\tpicks: commandPicks,\n\t\t\tadditionalPicks: (async (): Promise<Picks<ICommandQuickPick>> => {\n\t\t\t\tconst additionalCommandPicks = await this.getAdditionalCommandPicks(allCommandPicks, filteredCommandPicks, filter, token);\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tconst commandPicks: Array<ICommandQuickPick | IQuickPickSeparator> = additionalCommandPicks.map(commandPick => this.toCommandPick(commandPick, runOptions));\n\t\t\t\t// Basically, if we haven't already added a separator, we add one before the additional picks so long\n\t\t\t\t// as one hasn't been added to the start of the array.\n\t\t\t\tif (addSuggestedSeparator && commandPicks[0]?.type !== 'separator') {\n\t\t\t\t\tcommandPicks.unshift({ type: 'separator', label: localize('suggested', \"similar commands\") });\n\t\t\t\t}\n\t\t\t\treturn commandPicks;\n\t\t\t})()\n\t\t};\n\t}\n\n\tprivate toCommandPick(commandPick: ICommandQuickPick | IQuickPickSeparator, runOptions?: IQuickAccessProviderRunOptions): ICommandQuickPick | IQuickPickSeparator {\n\t\tif (commandPick.type === 'separator') {\n\t\t\treturn commandPick;\n\t\t}\n\n\t\tconst keybinding = this.keybindingService.lookupKeybinding(commandPick.commandId);\n\t\tconst ariaLabel = keybinding ?\n\t\t\tlocalize('commandPickAriaLabelWithKeybinding', \"{0}, {1}\", commandPick.label, keybinding.getAriaLabel()) :\n\t\t\tcommandPick.label;\n\n\t\treturn {\n\t\t\t...commandPick,\n\t\t\tariaLabel,\n\t\t\tdetail: this.options.showAlias && commandPick.commandAlias !== commandPick.label ? commandPick.commandAlias : undefined,\n\t\t\tkeybinding,\n\t\t\taccept: async () => {\n\n\t\t\t\t// Add to history\n\t\t\t\tthis.commandsHistory.push(commandPick.commandId);\n\n\t\t\t\t// Telementry\n\t\t\t\tthis.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', {\n\t\t\t\t\tid: commandPick.commandId,\n\t\t\t\t\tfrom: runOptions?.from ?? 'quick open'\n\t\t\t\t});\n\n\t\t\t\t// Run\n\t\t\t\ttry {\n\t\t\t\t\tcommandPick.args?.length\n\t\t\t\t\t\t? await this.commandService.executeCommand(commandPick.commandId, ...commandPick.args)\n\t\t\t\t\t\t: await this.commandService.executeCommand(commandPick.commandId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!isCancellationError(error)) {\n\t\t\t\t\t\tthis.dialogService.error(localize('canNotRun', \"Command '{0}' resulted in an error\", commandPick.label), toErrorMessage(error));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// TF-IDF string to be indexed\n\tprivate getTfIdfChunk({ label, commandAlias, commandDescription }: ICommandQuickPick) {\n\t\tlet chunk = label;\n\t\tif (commandAlias && commandAlias !== label) {\n\t\t\tchunk += ` - ${commandAlias}`;\n\t\t}\n\t\tif (commandDescription && commandDescription.value !== label) {\n\t\t\t// If the original is the same as the value, don't add it\n\t\t\tchunk += ` - ${commandDescription.value === commandDescription.original ? commandDescription.value : `${commandDescription.value} (${commandDescription.original})`}`;\n\t\t}\n\t\treturn chunk;\n\t}\n\n\n\t/**\n\t * Normalizes a string for filtering by removing accents, but only if the result has the same length, otherwise\n\t * returns the original string.\n\t */\n\tprivate normalizeForFiltering(value: string): string {\n\t\tconst withoutAccents = removeAccents(value);\n\t\tif (withoutAccents.length !== value.length) {\n\t\t\ttype QuickAccessTelemetry = {\n\t\t\t\toriginalLength: number;\n\t\t\t\tnormalizedLength: number;\n\t\t\t};\n\n\t\t\ttype QuickAccessTelemetryMeta = {\n\t\t\t\toriginalLength: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Length of the original filter string' };\n\t\t\t\tnormalizedLength: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Length of the normalized filter string' };\n\t\t\t\towner: 'dmitriv';\n\t\t\t\tcomment: 'Helps to gain insights on cases where the normalized filter string length differs from the original';\n\t\t\t};\n\n\t\t\tthis.telemetryService.publicLog2<QuickAccessTelemetry, QuickAccessTelemetryMeta>('QuickAccess:FilterLengthMismatch', {\n\t\t\t\toriginalLength: value.length,\n\t\t\t\tnormalizedLength: withoutAccents.length\n\t\t\t});\n\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn withoutAccents;\n\t\t}\n\t}\n\n\tprotected abstract getCommandPicks(token: CancellationToken): Promise<Array<ICommandQuickPick>>;\n\n\tprotected abstract hasAdditionalCommandPicks(filter: string, token: CancellationToken): boolean;\n\tprotected abstract getAdditionalCommandPicks(allPicks: ICommandQuickPick[], picksSoFar: ICommandQuickPick[], filter: string, token: CancellationToken): Promise<Array<ICommandQuickPick | IQuickPickSeparator>>;\n}\n\ninterface ISerializedCommandHistory {\n\treadonly usesLRU?: boolean;\n\treadonly entries: { key: string; value: number }[];\n}\n\ninterface ICommandsQuickAccessConfiguration {\n\treadonly workbench: {\n\t\treadonly commandPalette: {\n\t\t\treadonly history: number;\n\t\t\treadonly preserveInput: boolean;\n\t\t};\n\t};\n}\n\nexport class CommandsHistory extends Disposable {\n\n\tstatic readonly DEFAULT_COMMANDS_HISTORY_LENGTH = 50;\n\n\tprivate static readonly PREF_KEY_CACHE = 'commandPalette.mru.cache';\n\tprivate static readonly PREF_KEY_COUNTER = 'commandPalette.mru.counter';\n\n\tprivate static cache: LRUCache<string, number> | undefined;\n\tprivate static counter = 1;\n\tprivate static hasChanges = false;\n\n\tprivate configuredCommandsHistoryLength = 0;\n\n\tconstructor(\n\t\t@IStorageService private readonly storageService: IStorageService,\n\t\t@IConfigurationService private readonly configurationService: IConfigurationService,\n\t\t@ILogService private readonly logService: ILogService\n\t) {\n\t\tsuper();\n\n\t\tthis.updateConfiguration();\n\t\tthis.load();\n\n\t\tthis.registerListeners();\n\t}\n\n\tprivate registerListeners(): void {\n\t\tthis._register(this.configurationService.onDidChangeConfiguration(e => this.updateConfiguration(e)));\n\t\tthis._register(this.storageService.onWillSaveState(e => {\n\t\t\tif (e.reason === WillSaveStateReason.SHUTDOWN) {\n\t\t\t\t// Commands history is very dynamic and so we limit impact\n\t\t\t\t// on storage to only save on shutdown. This helps reduce\n\t\t\t\t// the overhead of syncing this data across machines.\n\t\t\t\tthis.saveState();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate updateConfiguration(e?: IConfigurationChangeEvent): void {\n\t\tif (e && !e.affectsConfiguration('workbench.commandPalette.history')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.configuredCommandsHistoryLength = CommandsHistory.getConfiguredCommandHistoryLength(this.configurationService);\n\n\t\tif (CommandsHistory.cache && CommandsHistory.cache.limit !== this.configuredCommandsHistoryLength) {\n\t\t\tCommandsHistory.cache.limit = this.configuredCommandsHistoryLength;\n\t\t\tCommandsHistory.hasChanges = true;\n\t\t}\n\t}\n\n\tprivate load(): void {\n\t\tconst raw = this.storageService.get(CommandsHistory.PREF_KEY_CACHE, StorageScope.PROFILE);\n\t\tlet serializedCache: ISerializedCommandHistory | undefined;\n\t\tif (raw) {\n\t\t\ttry {\n\t\t\t\tserializedCache = JSON.parse(raw);\n\t\t\t} catch (error) {\n\t\t\t\tthis.logService.error(`[CommandsHistory] invalid data: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\tconst cache = CommandsHistory.cache = new LRUCache<string, number>(this.configuredCommandsHistoryLength, 1);\n\t\tif (serializedCache) {\n\t\t\tlet entries: { key: string; value: number }[];\n\t\t\tif (serializedCache.usesLRU) {\n\t\t\t\tentries = serializedCache.entries;\n\t\t\t} else {\n\t\t\t\tentries = serializedCache.entries.sort((a, b) => a.value - b.value);\n\t\t\t}\n\t\t\tentries.forEach(entry => cache.set(entry.key, entry.value));\n\t\t}\n\n\t\tCommandsHistory.counter = this.storageService.getNumber(CommandsHistory.PREF_KEY_COUNTER, StorageScope.PROFILE, CommandsHistory.counter);\n\t}\n\n\tpush(commandId: string): void {\n\t\tif (!CommandsHistory.cache) {\n\t\t\treturn;\n\t\t}\n\n\t\tCommandsHistory.cache.set(commandId, CommandsHistory.counter++); // set counter to command\n\t\tCommandsHistory.hasChanges = true;\n\t}\n\n\tpeek(commandId: string): number | undefined {\n\t\treturn CommandsHistory.cache?.peek(commandId);\n\t}\n\n\tprivate saveState(): void {\n\t\tif (!CommandsHistory.cache) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!CommandsHistory.hasChanges) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst serializedCache: ISerializedCommandHistory = { usesLRU: true, entries: [] };\n\t\tCommandsHistory.cache.forEach((value, key) => serializedCache.entries.push({ key, value }));\n\n\t\tthis.storageService.store(CommandsHistory.PREF_KEY_CACHE, JSON.stringify(serializedCache), StorageScope.PROFILE, StorageTarget.USER);\n\t\tthis.storageService.store(CommandsHistory.PREF_KEY_COUNTER, CommandsHistory.counter, StorageScope.PROFILE, StorageTarget.USER);\n\t\tCommandsHistory.hasChanges = false;\n\t}\n\n\tstatic getConfiguredCommandHistoryLength(configurationService: IConfigurationService): number {\n\t\tconst config = <ICommandsQuickAccessConfiguration>configurationService.getValue();\n\n\t\tconst configuredCommandHistoryLength = config.workbench?.commandPalette?.history;\n\t\tif (typeof configuredCommandHistoryLength === 'number') {\n\t\t\treturn configuredCommandHistoryLength;\n\t\t}\n\n\t\treturn CommandsHistory.DEFAULT_COMMANDS_HISTORY_LENGTH;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/platform/quickinput/browser/commandsQuickAccess.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;AAIhG,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAU,0BAA0B,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,iCAAiC,CAAC;AACtH,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAgC,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAA6B,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAA+E,yBAAyB,EAAS,MAAM,wBAAwB,CAAC;AAGvJ,OAAO,EAAE,eAAe,EAA+B,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAsBpE,IAAe,mCAAmC,GAAlD,MAAe,mCAAoC,SAAQ,yBAA4C;;aAEtG,WAAM,GAAG,GAAH,AAAM,CAAC;aAEI,oBAAe,GAAG,GAAH,AAAM,CAAC;aACtB,sBAAiB,GAAG,CAAH,AAAI,CAAC;aAE/B,gBAAW,GAAG,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,0BAA0B,CAA7D,AAA8D,CAAC;IAMzF,YACC,OAAoC,EACb,oBAA2C,EAC3B,iBAAqC,EAC1C,cAA+B,EAC7B,gBAAmC,EACtC,aAA6B;QAE9D,KAAK,CAAC,qCAAmC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QALpB,sBAAiB,GAAjB,iBAAiB,CAAoB;QAC1C,mBAAc,GAAd,cAAc,CAAiB;QAC7B,qBAAgB,GAAhB,gBAAgB,CAAmB;QACtC,kBAAa,GAAb,aAAa,CAAgB;QAI9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;QAE5F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,YAA6B,EAAE,KAAwB,EAAE,UAA2C;QAE7I,qCAAqC;QACrC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;YACpC,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACzD,GAAG,EAAE,WAAW,CAAC,SAAS;gBAC1B,UAAU,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;aAC7C,CAAC,CAAC,CAAC,CAAC;YACL,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEpD,OAAO,oBAAoB,CAAC,MAAM,CAAC;iBACjC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,qCAAmC,CAAC,eAAe,CAAC;iBAClF,KAAK,CAAC,CAAC,EAAE,qCAAmC,CAAC,iBAAiB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE3D,SAAS;QACT,MAAM,oBAAoB,GAAwB,EAAE,CAAC;QACrD,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE,CAAC;YAC3C,WAAW,CAAC,cAAc,KAAK,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7E,MAAM,eAAe,GAAG,qCAAmC,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;YAElI,IAAI,eAAqC,CAAC;YAC1C,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC9B,WAAW,CAAC,cAAc,KAAK,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACpF,eAAe,GAAG,qCAAmC,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;YAC7H,CAAC;YAED,oCAAoC;YACpC,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;gBACxC,WAAW,CAAC,UAAU,GAAG;oBACxB,KAAK,EAAE,eAAe;oBACtB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;iBAC5D,CAAC;gBAEF,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,CAAC;YAED,8CAA8C;iBACzC,IAAI,MAAM,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC3C,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,CAAC;YAED,yDAAyD;iBACpD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACnC,OAAO,EAAE,CAAC;gBACX,CAAC;gBAED,gCAAgC;gBAChC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC5E,IAAI,UAAU,EAAE,CAAC;oBAChB,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;oBAC1C,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC;QACF,CAAC;QAED,yDAAyD;QACzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA6B,CAAC;QAC/D,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;YAChD,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzE,IAAI,uBAAuB,EAAE,CAAC;gBAC7B,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;gBAChD,uBAAuB,CAAC,WAAW,GAAG,uBAAuB,CAAC,SAAS,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAED,mDAAmD;QACnD,oBAAoB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE;YAExD,uEAAuE;YACvE,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBACxD,IAAI,YAAY,CAAC,UAAU,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;oBACzD,OAAO,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,2CAA2C;gBACzG,CAAC;gBAED,OAAO,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,6BAA6B;YACxF,CAAC;iBAAM,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBACpC,OAAO,CAAC,CAAC,CAAC,4DAA4D;YACvE,CAAC;iBAAM,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBACpC,OAAO,CAAC,CAAC,CAAC,CAAC,4DAA4D;YACxE,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1E,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;gBACxC,OAAO,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;YAClG,CAAC;YAED,IAAI,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,CAAC,CAAC,CAAC,2DAA2D;YACvE,CAAC;YAED,IAAI,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,CAAC,CAAC,qDAAqD;YAChE,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxF,IAAI,kBAAkB,IAAI,kBAAkB,EAAE,CAAC;oBAC9C,OAAO,CAAC,CAAC,CAAC,+BAA+B;gBAC1C,CAAC;gBAED,IAAI,kBAAkB,EAAE,CAAC;oBACxB,OAAO,CAAC,CAAC,CAAC,CAAC,qEAAqE;gBACjF,CAAC;gBAED,IAAI,kBAAkB,EAAE,CAAC;oBACxB,OAAO,CAAC,CAAC,CAAC,0DAA0D;gBACrE,CAAC;YACF,CAAC;YAED,mEAAmE;YACnE,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,KAAK,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;YACjF,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,KAAK,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;YACjF,IAAI,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnC,OAAO,CAAC,CAAC;YACV,CAAC;YACD,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;gBACnC,OAAO,CAAC,CAAC,CAAC;YACX,CAAC;YAED,oDAAoD;YACpD,OAAO,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAmD,EAAE,CAAC;QAExE,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,qBAAqB,GAAG,IAAI,CAAC;QACjC,IAAI,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAE5C,2BAA2B;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAc,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;gBAC3F,iBAAiB,GAAG,IAAI,CAAC;YAC1B,CAAC;YAED,IAAI,qBAAqB,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACnE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAW,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAC3F,qBAAqB,GAAG,KAAK,CAAC;YAC/B,CAAC;YAED,2BAA2B;YAC3B,IAAI,wBAAwB,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3L,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAc,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;gBAC3F,iBAAiB,GAAG,IAAI,CAAC;gBACzB,wBAAwB,GAAG,KAAK,CAAC;YAClC,CAAC;YAED,4BAA4B;YAC5B,IAAI,iBAAiB,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrL,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC7F,iBAAiB,GAAG,KAAK,CAAC;YAC3B,CAAC;YAED,UAAU;YACV,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,YAAY,CAAC;QACrB,CAAC;QAED,OAAO;YACN,KAAK,EAAE,YAAY;YACnB,eAAe,EAAE,CAAC,KAAK,IAAuC,EAAE;gBAC/D,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,eAAe,EAAE,oBAAoB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC1H,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACnC,OAAO,EAAE,CAAC;gBACX,CAAC;gBAED,MAAM,YAAY,GAAmD,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC5J,qGAAqG;gBACrG,sDAAsD;gBACtD,IAAI,qBAAqB,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBACpE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAW,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAC/F,CAAC;gBACD,OAAO,YAAY,CAAC;YACrB,CAAC,CAAC,EAAE;SACJ,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,WAAoD,EAAE,UAA2C;QACtH,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAoC,EAAE,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAC1G,WAAW,CAAC,KAAK,CAAC;QAEnB,OAAO;YACN,GAAG,WAAW;YACd,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YACvH,UAAU;YACV,MAAM,EAAE,KAAK,IAAI,EAAE;gBAElB,iBAAiB;gBACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAEjD,aAAa;gBACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAsE,yBAAyB,EAAE;oBAChI,EAAE,EAAE,WAAW,CAAC,SAAS;oBACzB,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,YAAY;iBACtC,CAAC,CAAC;gBAEH,MAAM;gBACN,IAAI,CAAC;oBACJ,WAAW,CAAC,IAAI,EAAE,MAAM;wBACvB,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;wBACtF,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBACpE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;wBACjC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAW,EAAE,oCAAoC,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;oBACjI,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;IAED,8BAA8B;IACtB,aAAa,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAqB;QACnF,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,YAAY,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YAC5C,KAAK,IAAI,MAAM,YAAY,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC9D,yDAAyD;YACzD,KAAK,IAAI,MAAM,kBAAkB,CAAC,KAAK,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,KAAK,kBAAkB,CAAC,QAAQ,GAAG,EAAE,CAAC;QACvK,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,KAAa;QAC1C,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,cAAc,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAa5C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAiD,kCAAkC,EAAE;gBACpH,cAAc,EAAE,KAAK,CAAC,MAAM;gBAC5B,gBAAgB,EAAE,cAAc,CAAC,MAAM;aACvC,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC;QACd,CAAC;aAAM,CAAC;YACP,OAAO,cAAc,CAAC;QACvB,CAAC;IACF,CAAC;;AApToB,mCAAmC;IAetD,WAAA,qBAAqB,CAAA;IACrB,WAAA,kBAAkB,CAAA;IAClB,WAAA,eAAe,CAAA;IACf,WAAA,iBAAiB,CAAA;IACjB,WAAA,cAAc,CAAA;GAnBK,mCAAmC,CA0TxD;;AAgBM,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;;aAE9B,oCAA+B,GAAG,EAAH,AAAK,CAAC;aAE7B,mBAAc,GAAG,0BAAH,AAA6B,CAAC;aAC5C,qBAAgB,GAAG,4BAAH,AAA+B,CAAC;aAGzD,YAAO,GAAG,CAAH,AAAI,CAAC;aACZ,eAAU,GAAG,KAAH,AAAQ,CAAC;IAIlC,YACkB,cAAgD,EAC1C,oBAA4D,EACtE,UAAwC;QAErD,KAAK,EAAE,CAAC;QAJ0B,mBAAc,GAAd,cAAc,CAAiB;QACzB,yBAAoB,GAApB,oBAAoB,CAAuB;QACrD,eAAU,GAAV,UAAU,CAAa;QAL9C,oCAA+B,GAAG,CAAC,CAAC;QAS3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAEO,iBAAiB;QACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;YACtD,IAAI,CAAC,CAAC,MAAM,KAAK,mBAAmB,CAAC,QAAQ,EAAE,CAAC;gBAC/C,0DAA0D;gBAC1D,yDAAyD;gBACzD,qDAAqD;gBACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,CAA6B;QACxD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,EAAE,CAAC;YACtE,OAAO;QACR,CAAC;QAED,IAAI,CAAC,+BAA+B,GAAG,iBAAe,CAAC,iCAAiC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEpH,IAAI,iBAAe,CAAC,KAAK,IAAI,iBAAe,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACnG,iBAAe,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,+BAA+B,CAAC;YACnE,iBAAe,CAAC,UAAU,GAAG,IAAI,CAAC;QACnC,CAAC;IACF,CAAC;IAEO,IAAI;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAe,CAAC,cAAc,+BAAuB,CAAC;QAC1F,IAAI,eAAsD,CAAC;QAC3D,IAAI,GAAG,EAAE,CAAC;YACT,IAAI,CAAC;gBACJ,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;QACF,CAAC;QAED,MAAM,KAAK,GAAG,iBAAe,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAiB,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;QAC5G,IAAI,eAAe,EAAE,CAAC;YACrB,IAAI,OAAyC,CAAC;YAC9C,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC7B,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACP,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,iBAAe,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,iBAAe,CAAC,gBAAgB,gCAAwB,iBAAe,CAAC,OAAO,CAAC,CAAC;IAC1I,CAAC;IAED,IAAI,CAAC,SAAiB;QACrB,IAAI,CAAC,iBAAe,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO;QACR,CAAC;QAED,iBAAe,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,yBAAyB;QAC1F,iBAAe,CAAC,UAAU,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,SAAiB;QACrB,OAAO,iBAAe,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAEO,SAAS;QAChB,IAAI,CAAC,iBAAe,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO;QACR,CAAC;QAED,IAAI,CAAC,iBAAe,CAAC,UAAU,EAAE,CAAC;YACjC,OAAO;QACR,CAAC;QAED,MAAM,eAAe,GAA8B,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAClF,iBAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAE5F,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,iBAAe,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,2DAA2C,CAAC;QACrI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,iBAAe,CAAC,gBAAgB,EAAE,iBAAe,CAAC,OAAO,2DAA2C,CAAC;QAC/H,iBAAe,CAAC,UAAU,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,iCAAiC,CAAC,oBAA2C;QACnF,MAAM,MAAM,GAAsC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;QAElF,MAAM,8BAA8B,GAAG,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC;QACjF,IAAI,OAAO,8BAA8B,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,8BAA8B,CAAC;QACvC,CAAC;QAED,OAAO,iBAAe,CAAC,+BAA+B,CAAC;IACxD,CAAC;;AAnHW,eAAe;IAczB,WAAA,eAAe,CAAA;IACf,WAAA,qBAAqB,CAAA;IACrB,WAAA,WAAW,CAAA;GAhBD,eAAe,CAoH3B","file":"commandsQuickAccess.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../base/common/actions.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { toErrorMessage } from '../../../base/common/errorMessage.js';\nimport { isCancellationError } from '../../../base/common/errors.js';\nimport { IMatch, matchesContiguousSubString, matchesPrefix, matchesWords, or } from '../../../base/common/filters.js';\nimport { createSingleCallFunction } from '../../../base/common/functional.js';\nimport { Disposable, DisposableStore, IDisposable } from '../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { TfIdfCalculator, normalizeTfIdfScores } from '../../../base/common/tfIdf.js';\nimport { localize } from '../../../nls.js';\nimport { ILocalizedString } from '../../action/common/action.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { IConfigurationChangeEvent, IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IDialogService } from '../../dialogs/common/dialogs.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { ILogService } from '../../log/common/log.js';\nimport { FastAndSlowPicks, IPickerQuickAccessItem, IPickerQuickAccessProviderOptions, PickerQuickAccessProvider, Picks } from './pickerQuickAccess.js';\nimport { IQuickAccessProviderRunOptions } from '../common/quickAccess.js';\nimport { IQuickPickSeparator } from '../common/quickInput.js';\nimport { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from '../../storage/common/storage.js';\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\nimport { removeAccents } from '../../../base/common/normalization.js';\nimport { Categories } from '../../action/common/actionCommonCategories.js';\n\nexport interface ICommandQuickPick extends IPickerQuickAccessItem {\n\treadonly commandId: string;\n\treadonly commandAlias?: string;\n\treadonly commandDescription?: ILocalizedString;\n\treadonly commandCategory?: string;\n\n\treadonly args?: unknown[];\n\n\ttfIdfScore?: number;\n\n\t// These fields are lazy initialized during filtering process.\n\tlabelNoAccents?: string;\n\taliasNoAccents?: string;\n}\n\nexport interface ICommandsQuickAccessOptions extends IPickerQuickAccessProviderOptions<ICommandQuickPick> {\n\treadonly showAlias: boolean;\n\tsuggestedCommandIds?: Set<string>;\n}\n\nexport abstract class AbstractCommandsQuickAccessProvider extends PickerQuickAccessProvider<ICommandQuickPick> implements IDisposable {\n\n\tstatic PREFIX = '>';\n\n\tprivate static readonly TFIDF_THRESHOLD = 0.5;\n\tprivate static readonly TFIDF_MAX_RESULTS = 5;\n\n\tprivate static WORD_FILTER = or(matchesPrefix, matchesWords, matchesContiguousSubString);\n\n\tprivate readonly commandsHistory: CommandsHistory;\n\n\tprotected override readonly options: ICommandsQuickAccessOptions;\n\n\tconstructor(\n\t\toptions: ICommandsQuickAccessOptions,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IKeybindingService protected readonly keybindingService: IKeybindingService,\n\t\t@ICommandService private readonly commandService: ICommandService,\n\t\t@ITelemetryService private readonly telemetryService: ITelemetryService,\n\t\t@IDialogService private readonly dialogService: IDialogService\n\t) {\n\t\tsuper(AbstractCommandsQuickAccessProvider.PREFIX, options);\n\n\t\tthis.commandsHistory = this._register(instantiationService.createInstance(CommandsHistory));\n\n\t\tthis.options = options;\n\t}\n\n\tprotected async _getPicks(filter: string, _disposables: DisposableStore, token: CancellationToken, runOptions?: IQuickAccessProviderRunOptions): Promise<Picks<ICommandQuickPick> | FastAndSlowPicks<ICommandQuickPick>> {\n\n\t\t// Ask subclass for all command picks\n\t\tconst allCommandPicks = await this.getCommandPicks(token);\n\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst runTfidf = createSingleCallFunction(() => {\n\t\t\tconst tfidf = new TfIdfCalculator();\n\t\t\ttfidf.updateDocuments(allCommandPicks.map(commandPick => ({\n\t\t\t\tkey: commandPick.commandId,\n\t\t\t\ttextChunks: [this.getTfIdfChunk(commandPick)]\n\t\t\t})));\n\t\t\tconst result = tfidf.calculateScores(filter, token);\n\n\t\t\treturn normalizeTfIdfScores(result)\n\t\t\t\t.filter(score => score.score > AbstractCommandsQuickAccessProvider.TFIDF_THRESHOLD)\n\t\t\t\t.slice(0, AbstractCommandsQuickAccessProvider.TFIDF_MAX_RESULTS);\n\t\t});\n\n\t\tconst noAccentsFilter = this.normalizeForFiltering(filter);\n\n\t\t// Filter\n\t\tconst filteredCommandPicks: ICommandQuickPick[] = [];\n\t\tfor (const commandPick of allCommandPicks) {\n\t\t\tcommandPick.labelNoAccents ??= this.normalizeForFiltering(commandPick.label);\n\t\t\tconst labelHighlights = AbstractCommandsQuickAccessProvider.WORD_FILTER(noAccentsFilter, commandPick.labelNoAccents) ?? undefined;\n\n\t\t\tlet aliasHighlights: IMatch[] | undefined;\n\t\t\tif (commandPick.commandAlias) {\n\t\t\t\tcommandPick.aliasNoAccents ??= this.normalizeForFiltering(commandPick.commandAlias);\n\t\t\t\taliasHighlights = AbstractCommandsQuickAccessProvider.WORD_FILTER(noAccentsFilter, commandPick.aliasNoAccents) ?? undefined;\n\t\t\t}\n\n\t\t\t// Add if matching in label or alias\n\t\t\tif (labelHighlights || aliasHighlights) {\n\t\t\t\tcommandPick.highlights = {\n\t\t\t\t\tlabel: labelHighlights,\n\t\t\t\t\tdetail: this.options.showAlias ? aliasHighlights : undefined\n\t\t\t\t};\n\n\t\t\t\tfilteredCommandPicks.push(commandPick);\n\t\t\t}\n\n\t\t\t// Also add if we have a 100% command ID match\n\t\t\telse if (filter === commandPick.commandId) {\n\t\t\t\tfilteredCommandPicks.push(commandPick);\n\t\t\t}\n\n\t\t\t// Handle tf-idf scoring for the rest if there's a filter\n\t\t\telse if (filter.length >= 3) {\n\t\t\t\tconst tfidf = runTfidf();\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\t// Add if we have a tf-idf score\n\t\t\t\tconst tfidfScore = tfidf.find(score => score.key === commandPick.commandId);\n\t\t\t\tif (tfidfScore) {\n\t\t\t\t\tcommandPick.tfIdfScore = tfidfScore.score;\n\t\t\t\t\tfilteredCommandPicks.push(commandPick);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add description to commands that have duplicate labels\n\t\tconst mapLabelToCommand = new Map<string, ICommandQuickPick>();\n\t\tfor (const commandPick of filteredCommandPicks) {\n\t\t\tconst existingCommandForLabel = mapLabelToCommand.get(commandPick.label);\n\t\t\tif (existingCommandForLabel) {\n\t\t\t\tcommandPick.description = commandPick.commandId;\n\t\t\t\texistingCommandForLabel.description = existingCommandForLabel.commandId;\n\t\t\t} else {\n\t\t\t\tmapLabelToCommand.set(commandPick.label, commandPick);\n\t\t\t}\n\t\t}\n\n\t\t// Sort by MRU order and fallback to name otherwise\n\t\tfilteredCommandPicks.sort((commandPickA, commandPickB) => {\n\n\t\t\t// If a result came from tf-idf, we want to put that towards the bottom\n\t\t\tif (commandPickA.tfIdfScore && commandPickB.tfIdfScore) {\n\t\t\t\tif (commandPickA.tfIdfScore === commandPickB.tfIdfScore) {\n\t\t\t\t\treturn commandPickA.label.localeCompare(commandPickB.label); // prefer lexicographically smaller command\n\t\t\t\t}\n\n\t\t\t\treturn commandPickB.tfIdfScore - commandPickA.tfIdfScore; // prefer higher tf-idf score\n\t\t\t} else if (commandPickA.tfIdfScore) {\n\t\t\t\treturn 1; // first command has a score but other doesn't so other wins\n\t\t\t} else if (commandPickB.tfIdfScore) {\n\t\t\t\treturn -1; // other command has a score but first doesn't so first wins\n\t\t\t}\n\n\t\t\tconst commandACounter = this.commandsHistory.peek(commandPickA.commandId);\n\t\t\tconst commandBCounter = this.commandsHistory.peek(commandPickB.commandId);\n\n\t\t\tif (commandACounter && commandBCounter) {\n\t\t\t\treturn commandACounter > commandBCounter ? -1 : 1; // use more recently used command before older\n\t\t\t}\n\n\t\t\tif (commandACounter) {\n\t\t\t\treturn -1; // first command was used, so it wins over the non used one\n\t\t\t}\n\n\t\t\tif (commandBCounter) {\n\t\t\t\treturn 1; // other command was used so it wins over the command\n\t\t\t}\n\n\t\t\tif (this.options.suggestedCommandIds) {\n\t\t\t\tconst commandASuggestion = this.options.suggestedCommandIds.has(commandPickA.commandId);\n\t\t\t\tconst commandBSuggestion = this.options.suggestedCommandIds.has(commandPickB.commandId);\n\t\t\t\tif (commandASuggestion && commandBSuggestion) {\n\t\t\t\t\treturn 0; // honor the order of the array\n\t\t\t\t}\n\n\t\t\t\tif (commandASuggestion) {\n\t\t\t\t\treturn -1; // first command was suggested, so it wins over the non suggested one\n\t\t\t\t}\n\n\t\t\t\tif (commandBSuggestion) {\n\t\t\t\t\treturn 1; // other command was suggested so it wins over the command\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if one is Developer and the other isn't, put non-Developer first\n\t\t\tconst isDeveloperA = commandPickA.commandCategory === Categories.Developer.value;\n\t\t\tconst isDeveloperB = commandPickB.commandCategory === Categories.Developer.value;\n\t\t\tif (isDeveloperA && !isDeveloperB) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (!isDeveloperA && isDeveloperB) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// both commands were never used, so we sort by name\n\t\t\treturn commandPickA.label.localeCompare(commandPickB.label);\n\t\t});\n\n\t\tconst commandPicks: Array<ICommandQuickPick | IQuickPickSeparator> = [];\n\n\t\tlet addOtherSeparator = false;\n\t\tlet addSuggestedSeparator = true;\n\t\tlet addCommonlyUsedSeparator = !!this.options.suggestedCommandIds;\n\t\tfor (let i = 0; i < filteredCommandPicks.length; i++) {\n\t\t\tconst commandPick = filteredCommandPicks[i];\n\n\t\t\t// Separator: recently used\n\t\t\tif (i === 0 && this.commandsHistory.peek(commandPick.commandId)) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('recentlyUsed', \"recently used\") });\n\t\t\t\taddOtherSeparator = true;\n\t\t\t}\n\n\t\t\tif (addSuggestedSeparator && commandPick.tfIdfScore !== undefined) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('suggested', \"similar commands\") });\n\t\t\t\taddSuggestedSeparator = false;\n\t\t\t}\n\n\t\t\t// Separator: commonly used\n\t\t\tif (addCommonlyUsedSeparator && commandPick.tfIdfScore === undefined && !this.commandsHistory.peek(commandPick.commandId) && this.options.suggestedCommandIds?.has(commandPick.commandId)) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('commonlyUsed', \"commonly used\") });\n\t\t\t\taddOtherSeparator = true;\n\t\t\t\taddCommonlyUsedSeparator = false;\n\t\t\t}\n\n\t\t\t// Separator: other commands\n\t\t\tif (addOtherSeparator && commandPick.tfIdfScore === undefined && !this.commandsHistory.peek(commandPick.commandId) && !this.options.suggestedCommandIds?.has(commandPick.commandId)) {\n\t\t\t\tcommandPicks.push({ type: 'separator', label: localize('morecCommands', \"other commands\") });\n\t\t\t\taddOtherSeparator = false;\n\t\t\t}\n\n\t\t\t// Command\n\t\t\tcommandPicks.push(this.toCommandPick(commandPick, runOptions));\n\t\t}\n\n\t\tif (!this.hasAdditionalCommandPicks(filter, token)) {\n\t\t\treturn commandPicks;\n\t\t}\n\n\t\treturn {\n\t\t\tpicks: commandPicks,\n\t\t\tadditionalPicks: (async (): Promise<Picks<ICommandQuickPick>> => {\n\t\t\t\tconst additionalCommandPicks = await this.getAdditionalCommandPicks(allCommandPicks, filteredCommandPicks, filter, token);\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tconst commandPicks: Array<ICommandQuickPick | IQuickPickSeparator> = additionalCommandPicks.map(commandPick => this.toCommandPick(commandPick, runOptions));\n\t\t\t\t// Basically, if we haven't already added a separator, we add one before the additional picks so long\n\t\t\t\t// as one hasn't been added to the start of the array.\n\t\t\t\tif (addSuggestedSeparator && commandPicks[0]?.type !== 'separator') {\n\t\t\t\t\tcommandPicks.unshift({ type: 'separator', label: localize('suggested', \"similar commands\") });\n\t\t\t\t}\n\t\t\t\treturn commandPicks;\n\t\t\t})()\n\t\t};\n\t}\n\n\tprivate toCommandPick(commandPick: ICommandQuickPick | IQuickPickSeparator, runOptions?: IQuickAccessProviderRunOptions): ICommandQuickPick | IQuickPickSeparator {\n\t\tif (commandPick.type === 'separator') {\n\t\t\treturn commandPick;\n\t\t}\n\n\t\tconst keybinding = this.keybindingService.lookupKeybinding(commandPick.commandId);\n\t\tconst ariaLabel = keybinding ?\n\t\t\tlocalize('commandPickAriaLabelWithKeybinding', \"{0}, {1}\", commandPick.label, keybinding.getAriaLabel()) :\n\t\t\tcommandPick.label;\n\n\t\treturn {\n\t\t\t...commandPick,\n\t\t\tariaLabel,\n\t\t\tdetail: this.options.showAlias && commandPick.commandAlias !== commandPick.label ? commandPick.commandAlias : undefined,\n\t\t\tkeybinding,\n\t\t\taccept: async () => {\n\n\t\t\t\t// Add to history\n\t\t\t\tthis.commandsHistory.push(commandPick.commandId);\n\n\t\t\t\t// Telementry\n\t\t\t\tthis.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', {\n\t\t\t\t\tid: commandPick.commandId,\n\t\t\t\t\tfrom: runOptions?.from ?? 'quick open'\n\t\t\t\t});\n\n\t\t\t\t// Run\n\t\t\t\ttry {\n\t\t\t\t\tcommandPick.args?.length\n\t\t\t\t\t\t? await this.commandService.executeCommand(commandPick.commandId, ...commandPick.args)\n\t\t\t\t\t\t: await this.commandService.executeCommand(commandPick.commandId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!isCancellationError(error)) {\n\t\t\t\t\t\tthis.dialogService.error(localize('canNotRun', \"Command '{0}' resulted in an error\", commandPick.label), toErrorMessage(error));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// TF-IDF string to be indexed\n\tprivate getTfIdfChunk({ label, commandAlias, commandDescription }: ICommandQuickPick) {\n\t\tlet chunk = label;\n\t\tif (commandAlias && commandAlias !== label) {\n\t\t\tchunk += ` - ${commandAlias}`;\n\t\t}\n\t\tif (commandDescription && commandDescription.value !== label) {\n\t\t\t// If the original is the same as the value, don't add it\n\t\t\tchunk += ` - ${commandDescription.value === commandDescription.original ? commandDescription.value : `${commandDescription.value} (${commandDescription.original})`}`;\n\t\t}\n\t\treturn chunk;\n\t}\n\n\t/**\n\t * Normalizes a string for filtering by removing accents, but only if\n\t * the result has the same length, otherwise returns the original string.\n\t */\n\tprivate normalizeForFiltering(value: string): string {\n\t\tconst withoutAccents = removeAccents(value);\n\t\tif (withoutAccents.length !== value.length) {\n\t\t\ttype QuickAccessTelemetry = {\n\t\t\t\toriginalLength: number;\n\t\t\t\tnormalizedLength: number;\n\t\t\t};\n\n\t\t\ttype QuickAccessTelemetryMeta = {\n\t\t\t\toriginalLength: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Length of the original filter string' };\n\t\t\t\tnormalizedLength: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Length of the normalized filter string' };\n\t\t\t\towner: 'dmitriv';\n\t\t\t\tcomment: 'Helps to gain insights on cases where the normalized filter string length differs from the original';\n\t\t\t};\n\n\t\t\tthis.telemetryService.publicLog2<QuickAccessTelemetry, QuickAccessTelemetryMeta>('QuickAccess:FilterLengthMismatch', {\n\t\t\t\toriginalLength: value.length,\n\t\t\t\tnormalizedLength: withoutAccents.length\n\t\t\t});\n\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn withoutAccents;\n\t\t}\n\t}\n\n\tprotected abstract getCommandPicks(token: CancellationToken): Promise<Array<ICommandQuickPick>>;\n\n\tprotected abstract hasAdditionalCommandPicks(filter: string, token: CancellationToken): boolean;\n\tprotected abstract getAdditionalCommandPicks(allPicks: ICommandQuickPick[], picksSoFar: ICommandQuickPick[], filter: string, token: CancellationToken): Promise<Array<ICommandQuickPick | IQuickPickSeparator>>;\n}\n\ninterface ISerializedCommandHistory {\n\treadonly usesLRU?: boolean;\n\treadonly entries: { key: string; value: number }[];\n}\n\ninterface ICommandsQuickAccessConfiguration {\n\treadonly workbench: {\n\t\treadonly commandPalette: {\n\t\t\treadonly history: number;\n\t\t\treadonly preserveInput: boolean;\n\t\t};\n\t};\n}\n\nexport class CommandsHistory extends Disposable {\n\n\tstatic readonly DEFAULT_COMMANDS_HISTORY_LENGTH = 50;\n\n\tprivate static readonly PREF_KEY_CACHE = 'commandPalette.mru.cache';\n\tprivate static readonly PREF_KEY_COUNTER = 'commandPalette.mru.counter';\n\n\tprivate static cache: LRUCache<string, number> | undefined;\n\tprivate static counter = 1;\n\tprivate static hasChanges = false;\n\n\tprivate configuredCommandsHistoryLength = 0;\n\n\tconstructor(\n\t\t@IStorageService private readonly storageService: IStorageService,\n\t\t@IConfigurationService private readonly configurationService: IConfigurationService,\n\t\t@ILogService private readonly logService: ILogService\n\t) {\n\t\tsuper();\n\n\t\tthis.updateConfiguration();\n\t\tthis.load();\n\n\t\tthis.registerListeners();\n\t}\n\n\tprivate registerListeners(): void {\n\t\tthis._register(this.configurationService.onDidChangeConfiguration(e => this.updateConfiguration(e)));\n\t\tthis._register(this.storageService.onWillSaveState(e => {\n\t\t\tif (e.reason === WillSaveStateReason.SHUTDOWN) {\n\t\t\t\t// Commands history is very dynamic and so we limit impact\n\t\t\t\t// on storage to only save on shutdown. This helps reduce\n\t\t\t\t// the overhead of syncing this data across machines.\n\t\t\t\tthis.saveState();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate updateConfiguration(e?: IConfigurationChangeEvent): void {\n\t\tif (e && !e.affectsConfiguration('workbench.commandPalette.history')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.configuredCommandsHistoryLength = CommandsHistory.getConfiguredCommandHistoryLength(this.configurationService);\n\n\t\tif (CommandsHistory.cache && CommandsHistory.cache.limit !== this.configuredCommandsHistoryLength) {\n\t\t\tCommandsHistory.cache.limit = this.configuredCommandsHistoryLength;\n\t\t\tCommandsHistory.hasChanges = true;\n\t\t}\n\t}\n\n\tprivate load(): void {\n\t\tconst raw = this.storageService.get(CommandsHistory.PREF_KEY_CACHE, StorageScope.PROFILE);\n\t\tlet serializedCache: ISerializedCommandHistory | undefined;\n\t\tif (raw) {\n\t\t\ttry {\n\t\t\t\tserializedCache = JSON.parse(raw);\n\t\t\t} catch (error) {\n\t\t\t\tthis.logService.error(`[CommandsHistory] invalid data: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\tconst cache = CommandsHistory.cache = new LRUCache<string, number>(this.configuredCommandsHistoryLength, 1);\n\t\tif (serializedCache) {\n\t\t\tlet entries: { key: string; value: number }[];\n\t\t\tif (serializedCache.usesLRU) {\n\t\t\t\tentries = serializedCache.entries;\n\t\t\t} else {\n\t\t\t\tentries = serializedCache.entries.sort((a, b) => a.value - b.value);\n\t\t\t}\n\t\t\tentries.forEach(entry => cache.set(entry.key, entry.value));\n\t\t}\n\n\t\tCommandsHistory.counter = this.storageService.getNumber(CommandsHistory.PREF_KEY_COUNTER, StorageScope.PROFILE, CommandsHistory.counter);\n\t}\n\n\tpush(commandId: string): void {\n\t\tif (!CommandsHistory.cache) {\n\t\t\treturn;\n\t\t}\n\n\t\tCommandsHistory.cache.set(commandId, CommandsHistory.counter++); // set counter to command\n\t\tCommandsHistory.hasChanges = true;\n\t}\n\n\tpeek(commandId: string): number | undefined {\n\t\treturn CommandsHistory.cache?.peek(commandId);\n\t}\n\n\tprivate saveState(): void {\n\t\tif (!CommandsHistory.cache) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!CommandsHistory.hasChanges) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst serializedCache: ISerializedCommandHistory = { usesLRU: true, entries: [] };\n\t\tCommandsHistory.cache.forEach((value, key) => serializedCache.entries.push({ key, value }));\n\n\t\tthis.storageService.store(CommandsHistory.PREF_KEY_CACHE, JSON.stringify(serializedCache), StorageScope.PROFILE, StorageTarget.USER);\n\t\tthis.storageService.store(CommandsHistory.PREF_KEY_COUNTER, CommandsHistory.counter, StorageScope.PROFILE, StorageTarget.USER);\n\t\tCommandsHistory.hasChanges = false;\n\t}\n\n\tstatic getConfiguredCommandHistoryLength(configurationService: IConfigurationService): number {\n\t\tconst config = <ICommandsQuickAccessConfiguration>configurationService.getValue();\n\n\t\tconst configuredCommandHistoryLength = config.workbench?.commandPalette?.history;\n\t\tif (typeof configuredCommandHistoryLength === 'number') {\n\t\t\treturn configuredCommandHistoryLength;\n\t\t}\n\n\t\treturn CommandsHistory.DEFAULT_COMMANDS_HISTORY_LENGTH;\n\t}\n}\n"]}
|
|
@@ -62,7 +62,7 @@ let HelpQuickAccessProvider = class HelpQuickAccessProvider {
|
|
|
62
62
|
prefix,
|
|
63
63
|
label,
|
|
64
64
|
keybinding: helpEntry.commandId ? this.keybindingService.lookupKeybinding(helpEntry.commandId) : undefined,
|
|
65
|
-
ariaLabel: localize(
|
|
65
|
+
ariaLabel: localize(1741, "{0}, {1}", label, helpEntry.description),
|
|
66
66
|
description: helpEntry.description
|
|
67
67
|
};
|
|
68
68
|
});
|
|
@@ -31,22 +31,22 @@ import { IHoverService, WorkbenchHoverDelegate } from '../../hover/browser/hover
|
|
|
31
31
|
import { ContextKeyExpr, RawContextKey } from '../../contextkey/common/contextkey.js';
|
|
32
32
|
import { observableValue } from '../../../base/common/observable.js';
|
|
33
33
|
export const inQuickInputContextKeyValue = 'inQuickInput';
|
|
34
|
-
export const InQuickInputContextKey = new RawContextKey(inQuickInputContextKeyValue, false, localize(
|
|
34
|
+
export const InQuickInputContextKey = new RawContextKey(inQuickInputContextKeyValue, false, localize(1742, "Whether keyboard focus is inside the quick input control"));
|
|
35
35
|
export const inQuickInputContext = ContextKeyExpr.has(inQuickInputContextKeyValue);
|
|
36
36
|
export const quickInputAlignmentContextKeyValue = 'quickInputAlignment';
|
|
37
|
-
export const QuickInputAlignmentContextKey = new RawContextKey(quickInputAlignmentContextKeyValue, 'top', localize(
|
|
37
|
+
export const QuickInputAlignmentContextKey = new RawContextKey(quickInputAlignmentContextKeyValue, 'top', localize(1743, "The alignment of the quick input"));
|
|
38
38
|
export const quickInputTypeContextKeyValue = 'quickInputType';
|
|
39
|
-
export const QuickInputTypeContextKey = new RawContextKey(quickInputTypeContextKeyValue, undefined, localize(
|
|
39
|
+
export const QuickInputTypeContextKey = new RawContextKey(quickInputTypeContextKeyValue, undefined, localize(1744, "The type of the currently visible quick input"));
|
|
40
40
|
export const endOfQuickInputBoxContextKeyValue = 'cursorAtEndOfQuickInputBox';
|
|
41
|
-
export const EndOfQuickInputBoxContextKey = new RawContextKey(endOfQuickInputBoxContextKeyValue, false, localize(
|
|
41
|
+
export const EndOfQuickInputBoxContextKey = new RawContextKey(endOfQuickInputBoxContextKeyValue, false, localize(1745, "Whether the cursor in the quick input is at the end of the input box"));
|
|
42
42
|
export const endOfQuickInputBoxContext = ContextKeyExpr.has(endOfQuickInputBoxContextKeyValue);
|
|
43
43
|
export const backButton = {
|
|
44
44
|
iconClass: ThemeIcon.asClassName(Codicon.quickInputBack),
|
|
45
|
-
tooltip: localize(
|
|
45
|
+
tooltip: localize(1746, "Back"),
|
|
46
46
|
handle: -1 // TODO
|
|
47
47
|
};
|
|
48
48
|
export class QuickInput extends Disposable {
|
|
49
|
-
static { this.noPromptMessage = localize(
|
|
49
|
+
static { this.noPromptMessage = localize(1747, "Press 'Enter' to confirm your input or 'Escape' to cancel"); }
|
|
50
50
|
constructor(ui) {
|
|
51
51
|
super();
|
|
52
52
|
this.ui = ui;
|
|
@@ -316,7 +316,7 @@ export class QuickInput extends Disposable {
|
|
|
316
316
|
}
|
|
317
317
|
getSteps() {
|
|
318
318
|
if (this.step && this.totalSteps) {
|
|
319
|
-
return localize(
|
|
319
|
+
return localize(1748, "{0}/{1}", this.step, this.totalSteps);
|
|
320
320
|
}
|
|
321
321
|
if (this.step) {
|
|
322
322
|
return String(this.step);
|
|
@@ -346,7 +346,7 @@ export class QuickInput extends Disposable {
|
|
|
346
346
|
}
|
|
347
347
|
}
|
|
348
348
|
export class QuickPick extends QuickInput {
|
|
349
|
-
static { this.DEFAULT_ARIA_LABEL = localize(
|
|
349
|
+
static { this.DEFAULT_ARIA_LABEL = localize(1749, "Type to narrow down results."); }
|
|
350
350
|
constructor(ui) {
|
|
351
351
|
super(ui);
|
|
352
352
|
this._value = '';
|
|
@@ -580,7 +580,7 @@ export class QuickPick extends QuickInput {
|
|
|
580
580
|
this.update();
|
|
581
581
|
}
|
|
582
582
|
get okLabel() {
|
|
583
|
-
return this._okLabel ?? localize(
|
|
583
|
+
return this._okLabel ?? localize(1750, "OK");
|
|
584
584
|
}
|
|
585
585
|
set okLabel(okLabel) {
|
|
586
586
|
this._okLabel = okLabel;
|
|
@@ -926,7 +926,7 @@ export class InputBox extends QuickInput {
|
|
|
926
926
|
set prompt(prompt) {
|
|
927
927
|
this._prompt = prompt;
|
|
928
928
|
this.noValidationMessage = prompt
|
|
929
|
-
? localize(
|
|
929
|
+
? localize(1751, "{0} (Press 'Enter' to confirm or 'Escape' to cancel)", prompt)
|
|
930
930
|
: QuickInput.noPromptMessage;
|
|
931
931
|
this.update();
|
|
932
932
|
}
|