monaco-editor-core 0.56.0-dev-20251125 → 0.56.0-dev-20251217
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 +30 -4
- package/esm/vs/base/browser/dom.js +1 -4
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/markdownRenderer.js +25 -11
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/ui/button/button.js +15 -8
- package/esm/vs/base/browser/ui/button/button.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css +3 -8
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/list/list.css +1 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +11 -2
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/defaultAccount.js +6 -0
- package/esm/vs/base/common/defaultAccount.js.map +1 -0
- package/esm/vs/base/common/equals.js +73 -24
- package/esm/vs/base/common/equals.js.map +1 -1
- package/esm/vs/base/common/event.js +14 -4
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/iterator.js.map +1 -1
- package/esm/vs/base/common/keybindings.js +0 -8
- package/esm/vs/base/common/keybindings.js.map +1 -1
- package/esm/vs/base/common/lifecycle.js +2 -2
- package/esm/vs/base/common/lifecycle.js.map +1 -1
- package/esm/vs/base/common/marshallingIds.js.map +1 -1
- package/esm/vs/base/common/observableInternal/index.js +1 -1
- package/esm/vs/base/common/observableInternal/index.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +16 -0
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
- package/esm/vs/base/common/observableInternal/utils/utils.js +11 -0
- package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
- package/esm/vs/base/common/product.js.map +1 -1
- package/esm/vs/base/common/strings.js +3 -1
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js +2 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +73 -2
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +7 -51
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +7 -20
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +14 -44
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js +19 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js.map +1 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js +14 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +5 -2
- package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +32 -15
- package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
- package/esm/vs/editor/browser/view.js +11 -2
- package/esm/vs/editor/browser/view.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +5 -2
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +10 -0
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +48 -0
- package/esm/vs/editor/common/config/fontInfo.js +1 -1
- package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
- package/esm/vs/editor/common/core/edits/edit.js +19 -0
- package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/stringEdit.js +13 -0
- package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/textEdit.js +0 -3
- package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js +24 -10
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorWordOperations.js +6 -3
- package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js +2 -2
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js.map +1 -1
- package/esm/vs/editor/common/languages/supports/tokenization.js +3 -0
- package/esm/vs/editor/common/languages/supports/tokenization.js.map +1 -1
- package/esm/vs/editor/common/languages.js +2 -1
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/decorationProvider.js +21 -1
- package/esm/vs/editor/common/model/decorationProvider.js.map +1 -1
- package/esm/vs/editor/common/model/textModel.js +49 -30
- package/esm/vs/editor/common/model/textModel.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js +6 -3
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/annotations.js +177 -0
- package/esm/vs/editor/common/model/tokens/annotations.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +131 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/textModelEditSource.js +2 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/textModelEvents.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/lineDecorations.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +54 -36
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +14 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +1 -0
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +33 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js +8 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js +198 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js +40 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +128 -70
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +59 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +152 -95
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +113 -54
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +317 -75
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js +20 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +59 -42
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +29 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +78 -46
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +9 -4
- 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 +11 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +81 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js +48 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +18 -15
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js +3 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +4 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +4 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +9 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +203 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js +189 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +85 -102
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +75 -32
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js +121 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +22 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +15 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +39 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +10 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
- 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 +32 -32
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
- 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 +11 -11
- 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 +19 -15
- package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +3 -2
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js.map +1 -1
- 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/snippetParser.js +33 -0
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
- 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/stickyScroll/browser/stickyScrollController.js +12 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -0
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -8
- package/esm/vs/editor/contrib/suggest/browser/suggest.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +39 -28
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +1 -0
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +22 -18
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +28 -6
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
- 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 +19 -2
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js.map +1 -1
- package/esm/vs/editor/editor.api.d.ts +34 -3
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js +2 -2
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js +11 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.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.css +11 -8
- 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 +11 -5
- 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/{product/common/productService.js → defaultAccount/common/defaultAccount.js} +2 -2
- package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -0
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
- package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -8
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +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/log/common/log.js +1 -1
- package/esm/vs/platform/log/common/log.js.map +1 -1
- package/esm/vs/platform/markers/common/markerService.js +6 -6
- package/esm/vs/platform/markers/common/markerService.js.map +1 -1
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +7 -3
- package/esm/vs/platform/quickinput/browser/quickInput.js +19 -11
- package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
- 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 +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +18 -17
- package/esm/vs/platform/theme/common/colors/baseColors.js.map +1 -1
- 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 +13 -13
- package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- 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 +21 -21
- package/esm/vs/platform/undoRedo/common/undoRedoService.js.map +1 -1
- package/esm/vs/platform/window/common/window.js +1 -1
- package/esm/vs/platform/window/common/window.js.map +1 -1
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +34 -3
- package/package.json +2 -2
- package/version.txt +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +0 -16
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +0 -1
- package/esm/vs/platform/product/common/productService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["vs/platform/undoRedo/common/undoRedoService.ts"],"names":[],"mappings":"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","file":"undoRedoService.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 { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Disposable, IDisposable, isDisposable } from '../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport Severity from '../../../base/common/severity.js';\nimport { URI } from '../../../base/common/uri.js';\nimport * as nls from '../../../nls.js';\nimport { IDialogService } from '../../dialogs/common/dialogs.js';\nimport { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { IPastFutureElements, IResourceUndoRedoElement, IUndoRedoElement, IUndoRedoService, IWorkspaceUndoRedoElement, ResourceEditStackSnapshot, UndoRedoElementType, UndoRedoGroup, UndoRedoSource, UriComparisonKeyComputer } from './undoRedo.js';\n\nconst DEBUG = false;\n\nfunction getResourceLabel(resource: URI): string {\n\treturn resource.scheme === Schemas.file ? resource.fsPath : resource.path;\n}\n\nlet stackElementCounter = 0;\n\nclass ResourceStackElement {\n\tpublic readonly id = (++stackElementCounter);\n\tpublic readonly type = UndoRedoElementType.Resource;\n\tpublic readonly actual: IUndoRedoElement;\n\tpublic readonly label: string;\n\tpublic readonly confirmBeforeUndo: boolean;\n\n\tpublic readonly resourceLabel: string;\n\tpublic readonly strResource: string;\n\tpublic readonly resourceLabels: string[];\n\tpublic readonly strResources: string[];\n\tpublic readonly groupId: number;\n\tpublic readonly groupOrder: number;\n\tpublic readonly sourceId: number;\n\tpublic readonly sourceOrder: number;\n\tpublic isValid: boolean;\n\n\tconstructor(actual: IUndoRedoElement, resourceLabel: string, strResource: string, groupId: number, groupOrder: number, sourceId: number, sourceOrder: number) {\n\t\tthis.actual = actual;\n\t\tthis.label = actual.label;\n\t\tthis.confirmBeforeUndo = actual.confirmBeforeUndo || false;\n\t\tthis.resourceLabel = resourceLabel;\n\t\tthis.strResource = strResource;\n\t\tthis.resourceLabels = [this.resourceLabel];\n\t\tthis.strResources = [this.strResource];\n\t\tthis.groupId = groupId;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.sourceId = sourceId;\n\t\tthis.sourceOrder = sourceOrder;\n\t\tthis.isValid = true;\n\t}\n\n\tpublic setValid(isValid: boolean): void {\n\t\tthis.isValid = isValid;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[id:${this.id}] [group:${this.groupId}] [${this.isValid ? ' VALID' : 'INVALID'}] ${this.actual.constructor.name} - ${this.actual}`;\n\t}\n}\n\nconst enum RemovedResourceReason {\n\tExternalRemoval = 0,\n\tNoParallelUniverses = 1\n}\n\nclass ResourceReasonPair {\n\tconstructor(\n\t\tpublic readonly resourceLabel: string,\n\t\tpublic readonly reason: RemovedResourceReason\n\t) { }\n}\n\nclass RemovedResources {\n\tprivate readonly elements = new Map<string, ResourceReasonPair>();\n\n\tpublic createMessage(): string {\n\t\tconst externalRemoval: string[] = [];\n\t\tconst noParallelUniverses: string[] = [];\n\t\tfor (const [, element] of this.elements) {\n\t\t\tconst dest = (\n\t\t\t\telement.reason === RemovedResourceReason.ExternalRemoval\n\t\t\t\t\t? externalRemoval\n\t\t\t\t\t: noParallelUniverses\n\t\t\t);\n\t\t\tdest.push(element.resourceLabel);\n\t\t}\n\n\t\tconst messages: string[] = [];\n\t\tif (externalRemoval.length > 0) {\n\t\t\tmessages.push(\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'externalRemoval', comment: ['{0} is a list of filenames'] },\n\t\t\t\t\t\"The following files have been closed and modified on disk: {0}.\", externalRemoval.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (noParallelUniverses.length > 0) {\n\t\t\tmessages.push(\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'noParallelUniverses', comment: ['{0} is a list of filenames'] },\n\t\t\t\t\t\"The following files have been modified in an incompatible way: {0}.\", noParallelUniverses.join(', ')\n\t\t\t\t));\n\t\t}\n\t\treturn messages.join('\\n');\n\t}\n\n\tpublic get size(): number {\n\t\treturn this.elements.size;\n\t}\n\n\tpublic has(strResource: string): boolean {\n\t\treturn this.elements.has(strResource);\n\t}\n\n\tpublic set(strResource: string, value: ResourceReasonPair): void {\n\t\tthis.elements.set(strResource, value);\n\t}\n\n\tpublic delete(strResource: string): boolean {\n\t\treturn this.elements.delete(strResource);\n\t}\n}\n\nclass WorkspaceStackElement {\n\tpublic readonly id = (++stackElementCounter);\n\tpublic readonly type = UndoRedoElementType.Workspace;\n\tpublic readonly actual: IWorkspaceUndoRedoElement;\n\tpublic readonly label: string;\n\tpublic readonly confirmBeforeUndo: boolean;\n\n\tpublic readonly resourceLabels: string[];\n\tpublic readonly strResources: string[];\n\tpublic readonly groupId: number;\n\tpublic readonly groupOrder: number;\n\tpublic readonly sourceId: number;\n\tpublic readonly sourceOrder: number;\n\tpublic removedResources: RemovedResources | null;\n\tpublic invalidatedResources: RemovedResources | null;\n\n\tconstructor(actual: IWorkspaceUndoRedoElement, resourceLabels: string[], strResources: string[], groupId: number, groupOrder: number, sourceId: number, sourceOrder: number) {\n\t\tthis.actual = actual;\n\t\tthis.label = actual.label;\n\t\tthis.confirmBeforeUndo = actual.confirmBeforeUndo || false;\n\t\tthis.resourceLabels = resourceLabels;\n\t\tthis.strResources = strResources;\n\t\tthis.groupId = groupId;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.sourceId = sourceId;\n\t\tthis.sourceOrder = sourceOrder;\n\t\tthis.removedResources = null;\n\t\tthis.invalidatedResources = null;\n\t}\n\n\tpublic canSplit(): this is WorkspaceStackElement & { actual: { split(): IResourceUndoRedoElement[] } } {\n\t\treturn (typeof this.actual.split === 'function');\n\t}\n\n\tpublic removeResource(resourceLabel: string, strResource: string, reason: RemovedResourceReason): void {\n\t\tif (!this.removedResources) {\n\t\t\tthis.removedResources = new RemovedResources();\n\t\t}\n\t\tif (!this.removedResources.has(strResource)) {\n\t\t\tthis.removedResources.set(strResource, new ResourceReasonPair(resourceLabel, reason));\n\t\t}\n\t}\n\n\tpublic setValid(resourceLabel: string, strResource: string, isValid: boolean): void {\n\t\tif (isValid) {\n\t\t\tif (this.invalidatedResources) {\n\t\t\t\tthis.invalidatedResources.delete(strResource);\n\t\t\t\tif (this.invalidatedResources.size === 0) {\n\t\t\t\t\tthis.invalidatedResources = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.invalidatedResources) {\n\t\t\t\tthis.invalidatedResources = new RemovedResources();\n\t\t\t}\n\t\t\tif (!this.invalidatedResources.has(strResource)) {\n\t\t\t\tthis.invalidatedResources.set(strResource, new ResourceReasonPair(resourceLabel, RemovedResourceReason.ExternalRemoval));\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources ? 'INVALID' : ' VALID'}] ${this.actual.constructor.name} - ${this.actual}`;\n\t}\n}\n\ntype StackElement = ResourceStackElement | WorkspaceStackElement;\n\nclass ResourceEditStack {\n\tpublic readonly resourceLabel: string;\n\tprivate readonly strResource: string;\n\tprivate _past: StackElement[];\n\tprivate _future: StackElement[];\n\tpublic locked: boolean;\n\tpublic versionId: number;\n\n\tconstructor(resourceLabel: string, strResource: string) {\n\t\tthis.resourceLabel = resourceLabel;\n\t\tthis.strResource = strResource;\n\t\tthis._past = [];\n\t\tthis._future = [];\n\t\tthis.locked = false;\n\t\tthis.versionId = 1;\n\t}\n\n\tpublic dispose(): void {\n\t\tfor (const element of this._past) {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tfor (const element of this._future) {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic toString(): string {\n\t\tconst result: string[] = [];\n\t\tresult.push(`* ${this.strResource}:`);\n\t\tfor (let i = 0; i < this._past.length; i++) {\n\t\t\tresult.push(` * [UNDO] ${this._past[i]}`);\n\t\t}\n\t\tfor (let i = this._future.length - 1; i >= 0; i--) {\n\t\t\tresult.push(` * [REDO] ${this._future[i]}`);\n\t\t}\n\t\treturn result.join('\\n');\n\t}\n\n\tpublic flushAllElements(): void {\n\t\tthis._past = [];\n\t\tthis._future = [];\n\t\tthis.versionId++;\n\t}\n\n\tprivate _setElementValidFlag(element: StackElement, isValid: boolean): void {\n\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\telement.setValid(this.resourceLabel, this.strResource, isValid);\n\t\t} else {\n\t\t\telement.setValid(isValid);\n\t\t}\n\t}\n\n\tpublic setElementsValidFlag(isValid: boolean, filter: (element: IUndoRedoElement) => boolean): void {\n\t\tfor (const element of this._past) {\n\t\t\tif (filter(element.actual)) {\n\t\t\t\tthis._setElementValidFlag(element, isValid);\n\t\t\t}\n\t\t}\n\t\tfor (const element of this._future) {\n\t\t\tif (filter(element.actual)) {\n\t\t\t\tthis._setElementValidFlag(element, isValid);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic pushElement(element: StackElement): void {\n\t\t// remove the future\n\t\tfor (const futureElement of this._future) {\n\t\t\tif (futureElement.type === UndoRedoElementType.Workspace) {\n\t\t\t\tfutureElement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.NoParallelUniverses);\n\t\t\t}\n\t\t}\n\t\tthis._future = [];\n\t\tthis._past.push(element);\n\t\tthis.versionId++;\n\t}\n\n\tpublic createSnapshot(resource: URI): ResourceEditStackSnapshot {\n\t\tconst elements: number[] = [];\n\n\t\tfor (let i = 0, len = this._past.length; i < len; i++) {\n\t\t\telements.push(this._past[i].id);\n\t\t}\n\t\tfor (let i = this._future.length - 1; i >= 0; i--) {\n\t\t\telements.push(this._future[i].id);\n\t\t}\n\n\t\treturn new ResourceEditStackSnapshot(resource, elements);\n\t}\n\n\tpublic restoreSnapshot(snapshot: ResourceEditStackSnapshot): void {\n\t\tconst snapshotLength = snapshot.elements.length;\n\t\tlet isOK = true;\n\t\tlet snapshotIndex = 0;\n\t\tlet removePastAfter = -1;\n\t\tfor (let i = 0, len = this._past.length; i < len; i++, snapshotIndex++) {\n\t\t\tconst element = this._past[i];\n\t\t\tif (isOK && (snapshotIndex >= snapshotLength || element.id !== snapshot.elements[snapshotIndex])) {\n\t\t\t\tisOK = false;\n\t\t\t\tremovePastAfter = 0;\n\t\t\t}\n\t\t\tif (!isOK && element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tlet removeFutureBefore = -1;\n\t\tfor (let i = this._future.length - 1; i >= 0; i--, snapshotIndex++) {\n\t\t\tconst element = this._future[i];\n\t\t\tif (isOK && (snapshotIndex >= snapshotLength || element.id !== snapshot.elements[snapshotIndex])) {\n\t\t\t\tisOK = false;\n\t\t\t\tremoveFutureBefore = i;\n\t\t\t}\n\t\t\tif (!isOK && element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tif (removePastAfter !== -1) {\n\t\t\tthis._past = this._past.slice(0, removePastAfter);\n\t\t}\n\t\tif (removeFutureBefore !== -1) {\n\t\t\tthis._future = this._future.slice(removeFutureBefore + 1);\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic getElements(): IPastFutureElements {\n\t\tconst past: IUndoRedoElement[] = [];\n\t\tconst future: IUndoRedoElement[] = [];\n\n\t\tfor (const element of this._past) {\n\t\t\tpast.push(element.actual);\n\t\t}\n\t\tfor (const element of this._future) {\n\t\t\tfuture.push(element.actual);\n\t\t}\n\n\t\treturn { past, future };\n\t}\n\n\tpublic getClosestPastElement(): StackElement | null {\n\t\tif (this._past.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._past[this._past.length - 1];\n\t}\n\n\tpublic getSecondClosestPastElement(): StackElement | null {\n\t\tif (this._past.length < 2) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._past[this._past.length - 2];\n\t}\n\n\tpublic getClosestFutureElement(): StackElement | null {\n\t\tif (this._future.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._future[this._future.length - 1];\n\t}\n\n\tpublic hasPastElements(): boolean {\n\t\treturn (this._past.length > 0);\n\t}\n\n\tpublic hasFutureElements(): boolean {\n\t\treturn (this._future.length > 0);\n\t}\n\n\tpublic splitPastWorkspaceElement(toRemove: WorkspaceStackElement, individualMap: Map<string, ResourceStackElement>): void {\n\t\tfor (let j = this._past.length - 1; j >= 0; j--) {\n\t\t\tif (this._past[j] === toRemove) {\n\t\t\t\tif (individualMap.has(this.strResource)) {\n\t\t\t\t\t// gets replaced\n\t\t\t\t\tthis._past[j] = individualMap.get(this.strResource)!;\n\t\t\t\t} else {\n\t\t\t\t\t// gets deleted\n\t\t\t\t\tthis._past.splice(j, 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic splitFutureWorkspaceElement(toRemove: WorkspaceStackElement, individualMap: Map<string, ResourceStackElement>): void {\n\t\tfor (let j = this._future.length - 1; j >= 0; j--) {\n\t\t\tif (this._future[j] === toRemove) {\n\t\t\t\tif (individualMap.has(this.strResource)) {\n\t\t\t\t\t// gets replaced\n\t\t\t\t\tthis._future[j] = individualMap.get(this.strResource)!;\n\t\t\t\t} else {\n\t\t\t\t\t// gets deleted\n\t\t\t\t\tthis._future.splice(j, 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic moveBackward(element: StackElement): void {\n\t\tthis._past.pop();\n\t\tthis._future.push(element);\n\t\tthis.versionId++;\n\t}\n\n\tpublic moveForward(element: StackElement): void {\n\t\tthis._future.pop();\n\t\tthis._past.push(element);\n\t\tthis.versionId++;\n\t}\n}\n\nclass EditStackSnapshot {\n\n\tpublic readonly editStacks: ResourceEditStack[];\n\tprivate readonly _versionIds: number[];\n\n\tconstructor(editStacks: ResourceEditStack[]) {\n\t\tthis.editStacks = editStacks;\n\t\tthis._versionIds = [];\n\t\tfor (let i = 0, len = this.editStacks.length; i < len; i++) {\n\t\t\tthis._versionIds[i] = this.editStacks[i].versionId;\n\t\t}\n\t}\n\n\tpublic isValid(): boolean {\n\t\tfor (let i = 0, len = this.editStacks.length; i < len; i++) {\n\t\t\tif (this._versionIds[i] !== this.editStacks[i].versionId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\nconst missingEditStack = new ResourceEditStack('', '');\nmissingEditStack.locked = true;\n\nexport class UndoRedoService implements IUndoRedoService {\n\tdeclare readonly _serviceBrand: undefined;\n\n\tprivate readonly _editStacks: Map<string, ResourceEditStack>;\n\tprivate readonly _uriComparisonKeyComputers: [string, UriComparisonKeyComputer][];\n\n\tconstructor(\n\t\t@IDialogService private readonly _dialogService: IDialogService,\n\t\t@INotificationService private readonly _notificationService: INotificationService,\n\t) {\n\t\tthis._editStacks = new Map<string, ResourceEditStack>();\n\t\tthis._uriComparisonKeyComputers = [];\n\t}\n\n\tpublic getUriComparisonKey(resource: URI): string {\n\t\tfor (const uriComparisonKeyComputer of this._uriComparisonKeyComputers) {\n\t\t\tif (uriComparisonKeyComputer[0] === resource.scheme) {\n\t\t\t\treturn uriComparisonKeyComputer[1].getComparisonKey(resource);\n\t\t\t}\n\t\t}\n\t\treturn resource.toString();\n\t}\n\n\tprivate _print(label: string): void {\n\t\tconsole.log(`------------------------------------`);\n\t\tconsole.log(`AFTER ${label}: `);\n\t\tconst str: string[] = [];\n\t\tfor (const element of this._editStacks) {\n\t\t\tstr.push(element[1].toString());\n\t\t}\n\t\tconsole.log(str.join('\\n'));\n\t}\n\n\tpublic pushElement(element: IUndoRedoElement, group: UndoRedoGroup = UndoRedoGroup.None, source: UndoRedoSource = UndoRedoSource.None): void {\n\t\tif (element.type === UndoRedoElementType.Resource) {\n\t\t\tconst resourceLabel = getResourceLabel(element.resource);\n\t\t\tconst strResource = this.getUriComparisonKey(element.resource);\n\t\t\tthis._pushElement(new ResourceStackElement(element, resourceLabel, strResource, group.id, group.nextOrder(), source.id, source.nextOrder()));\n\t\t} else {\n\t\t\tconst seen = new Set<string>();\n\t\t\tconst resourceLabels: string[] = [];\n\t\t\tconst strResources: string[] = [];\n\t\t\tfor (const resource of element.resources) {\n\t\t\t\tconst resourceLabel = getResourceLabel(resource);\n\t\t\t\tconst strResource = this.getUriComparisonKey(resource);\n\n\t\t\t\tif (seen.has(strResource)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tseen.add(strResource);\n\t\t\t\tresourceLabels.push(resourceLabel);\n\t\t\t\tstrResources.push(strResource);\n\t\t\t}\n\n\t\t\tif (resourceLabels.length === 1) {\n\t\t\t\tthis._pushElement(new ResourceStackElement(element, resourceLabels[0], strResources[0], group.id, group.nextOrder(), source.id, source.nextOrder()));\n\t\t\t} else {\n\t\t\t\tthis._pushElement(new WorkspaceStackElement(element, resourceLabels, strResources, group.id, group.nextOrder(), source.id, source.nextOrder()));\n\t\t\t}\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('pushElement');\n\t\t}\n\t}\n\n\tprivate _pushElement(element: StackElement): void {\n\t\tfor (let i = 0, len = element.strResources.length; i < len; i++) {\n\t\t\tconst resourceLabel = element.resourceLabels[i];\n\t\t\tconst strResource = element.strResources[i];\n\n\t\t\tlet editStack: ResourceEditStack;\n\t\t\tif (this._editStacks.has(strResource)) {\n\t\t\t\teditStack = this._editStacks.get(strResource)!;\n\t\t\t} else {\n\t\t\t\teditStack = new ResourceEditStack(resourceLabel, strResource);\n\t\t\t\tthis._editStacks.set(strResource, editStack);\n\t\t\t}\n\n\t\t\teditStack.pushElement(element);\n\t\t}\n\t}\n\n\tpublic getLastElement(resource: URI): IUndoRedoElement | null {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\tif (editStack.hasFutureElements()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst closestPastElement = editStack.getClosestPastElement();\n\t\t\treturn closestPastElement ? closestPastElement.actual : null;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _splitPastWorkspaceElement(toRemove: WorkspaceStackElement & { actual: { split(): IResourceUndoRedoElement[] } }, ignoreResources: RemovedResources | null): void {\n\t\tconst individualArr = toRemove.actual.split();\n\t\tconst individualMap = new Map<string, ResourceStackElement>();\n\t\tfor (const _element of individualArr) {\n\t\t\tconst resourceLabel = getResourceLabel(_element.resource);\n\t\t\tconst strResource = this.getUriComparisonKey(_element.resource);\n\t\t\tconst element = new ResourceStackElement(_element, resourceLabel, strResource, 0, 0, 0, 0);\n\t\t\tindividualMap.set(element.strResource, element);\n\t\t}\n\n\t\tfor (const strResource of toRemove.strResources) {\n\t\t\tif (ignoreResources && ignoreResources.has(strResource)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.splitPastWorkspaceElement(toRemove, individualMap);\n\t\t}\n\t}\n\n\tprivate _splitFutureWorkspaceElement(toRemove: WorkspaceStackElement & { actual: { split(): IResourceUndoRedoElement[] } }, ignoreResources: RemovedResources | null): void {\n\t\tconst individualArr = toRemove.actual.split();\n\t\tconst individualMap = new Map<string, ResourceStackElement>();\n\t\tfor (const _element of individualArr) {\n\t\t\tconst resourceLabel = getResourceLabel(_element.resource);\n\t\t\tconst strResource = this.getUriComparisonKey(_element.resource);\n\t\t\tconst element = new ResourceStackElement(_element, resourceLabel, strResource, 0, 0, 0, 0);\n\t\t\tindividualMap.set(element.strResource, element);\n\t\t}\n\n\t\tfor (const strResource of toRemove.strResources) {\n\t\t\tif (ignoreResources && ignoreResources.has(strResource)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.splitFutureWorkspaceElement(toRemove, individualMap);\n\t\t}\n\t}\n\n\tpublic removeElements(resource: URI | string): void {\n\t\tconst strResource = typeof resource === 'string' ? resource : this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.dispose();\n\t\t\tthis._editStacks.delete(strResource);\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('removeElements');\n\t\t}\n\t}\n\n\tpublic setElementsValidFlag(resource: URI, isValid: boolean, filter: (element: IUndoRedoElement) => boolean): void {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.setElementsValidFlag(isValid, filter);\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('setElementsValidFlag');\n\t\t}\n\t}\n\n\tpublic createSnapshot(resource: URI): ResourceEditStackSnapshot {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.createSnapshot(resource);\n\t\t}\n\t\treturn new ResourceEditStackSnapshot(resource, []);\n\t}\n\n\tpublic restoreSnapshot(snapshot: ResourceEditStackSnapshot): void {\n\t\tconst strResource = this.getUriComparisonKey(snapshot.resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.restoreSnapshot(snapshot);\n\n\t\t\tif (!editStack.hasPastElements() && !editStack.hasFutureElements()) {\n\t\t\t\t// the edit stack is now empty, just remove it entirely\n\t\t\t\teditStack.dispose();\n\t\t\t\tthis._editStacks.delete(strResource);\n\t\t\t}\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('restoreSnapshot');\n\t\t}\n\t}\n\n\tpublic getElements(resource: URI): IPastFutureElements {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.getElements();\n\t\t}\n\t\treturn { past: [], future: [] };\n\t}\n\n\tprivate _findClosestUndoElementWithSource(sourceId: number): [StackElement | null, string | null] {\n\t\tif (!sourceId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find an element with the sourceId and with the highest sourceOrder ready to be undone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestPastElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.sourceId === sourceId) {\n\t\t\t\tif (!matchedElement || candidate.sourceOrder > matchedElement.sourceOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tpublic canUndo(resourceOrSource: URI | UndoRedoSource): boolean {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestUndoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? true : false;\n\t\t}\n\t\tconst strResource = this.getUriComparisonKey(resourceOrSource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.hasPastElements();\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _onError(err: Error, element: StackElement): void {\n\t\tonUnexpectedError(err);\n\t\t// An error occurred while undoing or redoing => drop the undo/redo stack for all affected resources\n\t\tfor (const strResource of element.strResources) {\n\t\t\tthis.removeElements(strResource);\n\t\t}\n\t\tthis._notificationService.error(err);\n\t}\n\n\tprivate _acquireLocks(editStackSnapshot: EditStackSnapshot): () => void {\n\t\t// first, check if all locks can be acquired\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.locked) {\n\t\t\t\tthrow new Error('Cannot acquire edit stack lock');\n\t\t\t}\n\t\t}\n\n\t\t// can acquire all locks\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\teditStack.locked = true;\n\t\t}\n\n\t\treturn () => {\n\t\t\t// release all locks\n\t\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\t\teditStack.locked = false;\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _safeInvokeWithLocks(element: StackElement, invoke: () => Promise<void> | void, editStackSnapshot: EditStackSnapshot, cleanup: IDisposable, continuation: () => Promise<void> | void): Promise<void> | void {\n\t\tconst releaseLocks = this._acquireLocks(editStackSnapshot);\n\n\t\tlet result: Promise<void> | void;\n\t\ttry {\n\t\t\tresult = invoke();\n\t\t} catch (err) {\n\t\t\treleaseLocks();\n\t\t\tcleanup.dispose();\n\t\t\treturn this._onError(err, element);\n\t\t}\n\n\t\tif (result) {\n\t\t\t// result is Promise<void>\n\t\t\treturn result.then(\n\t\t\t\t() => {\n\t\t\t\t\treleaseLocks();\n\t\t\t\t\tcleanup.dispose();\n\t\t\t\t\treturn continuation();\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\treleaseLocks();\n\t\t\t\t\tcleanup.dispose();\n\t\t\t\t\treturn this._onError(err, element);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\t// result is void\n\t\t\treleaseLocks();\n\t\t\tcleanup.dispose();\n\t\t\treturn continuation();\n\t\t}\n\t}\n\n\tprivate async _invokeWorkspacePrepare(element: WorkspaceStackElement): Promise<IDisposable> {\n\t\tif (typeof element.actual.prepareUndoRedo === 'undefined') {\n\t\t\treturn Disposable.None;\n\t\t}\n\t\tconst result = element.actual.prepareUndoRedo();\n\t\tif (typeof result === 'undefined') {\n\t\t\treturn Disposable.None;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _invokeResourcePrepare(element: ResourceStackElement, callback: (disposable: IDisposable) => Promise<void> | void): void | Promise<void> {\n\t\tif (element.actual.type !== UndoRedoElementType.Workspace || typeof element.actual.prepareUndoRedo === 'undefined') {\n\t\t\t// no preparation needed\n\t\t\treturn callback(Disposable.None);\n\t\t}\n\n\t\tconst r = element.actual.prepareUndoRedo();\n\t\tif (!r) {\n\t\t\t// nothing to clean up\n\t\t\treturn callback(Disposable.None);\n\t\t}\n\n\t\tif (isDisposable(r)) {\n\t\t\treturn callback(r);\n\t\t}\n\n\t\treturn r.then((disposable) => {\n\t\t\treturn callback(disposable);\n\t\t});\n\t}\n\n\tprivate _getAffectedEditStacks(element: WorkspaceStackElement): EditStackSnapshot {\n\t\tconst affectedEditStacks: ResourceEditStack[] = [];\n\t\tfor (const strResource of element.strResources) {\n\t\t\taffectedEditStacks.push(this._editStacks.get(strResource) || missingEditStack);\n\t\t}\n\t\treturn new EditStackSnapshot(affectedEditStacks);\n\t}\n\n\tprivate _tryToSplitAndUndo(strResource: string, element: WorkspaceStackElement, ignoreResources: RemovedResources | null, message: string): WorkspaceVerificationError {\n\t\tif (element.canSplit()) {\n\t\t\tthis._splitPastWorkspaceElement(element, ignoreResources);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError(this._undo(strResource, 0, true));\n\t\t} else {\n\t\t\t// Cannot safely split this workspace element => flush all undo/redo stacks\n\t\t\tfor (const strResource of element.strResources) {\n\t\t\t\tthis.removeElements(strResource);\n\t\t\t}\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError();\n\t\t}\n\t}\n\n\tprivate _checkWorkspaceUndo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot, checkInvalidatedResources: boolean): WorkspaceVerificationError | null {\n\t\tif (element.removedResources) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.removedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files. {1}\", element.label, element.removedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (checkInvalidatedResources && element.invalidatedResources) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.invalidatedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files. {1}\", element.label, element.invalidatedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// this must be the last past element in all the impacted resources!\n\t\tconst cannotUndoDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.getClosestPastElement() !== element) {\n\t\t\t\tcannotUndoDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotUndoDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndoDueToChanges', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files because changes were made to {1}\", element.label, cannotUndoDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconst cannotLockDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.locked) {\n\t\t\t\tcannotLockDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotLockDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}\", element.label, cannotLockDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// check if new stack elements were added in the meantime...\n\t\tif (!editStackSnapshot.isValid()) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndoDueToInMeantimeUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime\", element.label\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _workspaceUndo(strResource: string, element: WorkspaceStackElement, undoConfirmed: boolean): Promise<void> | void {\n\t\tconst affectedEditStacks = this._getAffectedEditStacks(element);\n\t\tconst verificationError = this._checkWorkspaceUndo(strResource, element, affectedEditStacks, /*invalidated resources will be checked after the prepare call*/false);\n\t\tif (verificationError) {\n\t\t\treturn verificationError.returnValue;\n\t\t}\n\t\treturn this._confirmAndExecuteWorkspaceUndo(strResource, element, affectedEditStacks, undoConfirmed);\n\t}\n\n\tprivate _isPartOfUndoGroup(element: WorkspaceStackElement): boolean {\n\t\tif (!element.groupId) {\n\t\t\treturn false;\n\t\t}\n\t\t// check that there is at least another element with the same groupId ready to be undone\n\t\tfor (const [, editStack] of this._editStacks) {\n\t\t\tconst pastElement = editStack.getClosestPastElement();\n\t\t\tif (!pastElement) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pastElement === element) {\n\t\t\t\tconst secondPastElement = editStack.getSecondClosestPastElement();\n\t\t\t\tif (secondPastElement && secondPastElement.groupId === element.groupId) {\n\t\t\t\t\t// there is another element with the same group id in the same stack!\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pastElement.groupId === element.groupId) {\n\t\t\t\t// there is another element with the same group id in another stack!\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate async _confirmAndExecuteWorkspaceUndo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot, undoConfirmed: boolean): Promise<void> {\n\n\t\tif (element.canSplit() && !this._isPartOfUndoGroup(element)) {\n\t\t\t// this element can be split\n\n\t\t\tenum UndoChoice {\n\t\t\t\tAll = 0,\n\t\t\t\tThis = 1,\n\t\t\t\tCancel = 2\n\t\t\t}\n\n\t\t\tconst { result } = await this._dialogService.prompt<UndoChoice>({\n\t\t\t\ttype: Severity.Info,\n\t\t\t\tmessage: nls.localize('confirmWorkspace', \"Would you like to undo '{0}' across all files?\", element.label),\n\t\t\t\tbuttons: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: nls.localize({ key: 'ok', comment: ['{0} denotes a number that is > 1, && denotes a mnemonic'] }, \"&&Undo in {0} Files\", editStackSnapshot.editStacks.length),\n\t\t\t\t\t\trun: () => UndoChoice.All\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: nls.localize({ key: 'nok', comment: ['&& denotes a mnemonic'] }, \"Undo this &&File\"),\n\t\t\t\t\t\trun: () => UndoChoice.This\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tcancelButton: {\n\t\t\t\t\trun: () => UndoChoice.Cancel\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (result === UndoChoice.Cancel) {\n\t\t\t\t// choice: cancel\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (result === UndoChoice.This) {\n\t\t\t\t// choice: undo this file\n\t\t\t\tthis._splitPastWorkspaceElement(element, null);\n\t\t\t\treturn this._undo(strResource, 0, true);\n\t\t\t}\n\n\t\t\t// choice: undo in all files\n\n\t\t\t// At this point, it is possible that the element has been made invalid in the meantime (due to the confirmation await)\n\t\t\tconst verificationError1 = this._checkWorkspaceUndo(strResource, element, editStackSnapshot, /*invalidated resources will be checked after the prepare call*/false);\n\t\t\tif (verificationError1) {\n\t\t\t\treturn verificationError1.returnValue;\n\t\t\t}\n\n\t\t\tundoConfirmed = true;\n\t\t}\n\n\t\t// prepare\n\t\tlet cleanup: IDisposable;\n\t\ttry {\n\t\t\tcleanup = await this._invokeWorkspacePrepare(element);\n\t\t} catch (err) {\n\t\t\treturn this._onError(err, element);\n\t\t}\n\n\t\t// At this point, it is possible that the element has been made invalid in the meantime (due to the prepare await)\n\t\tconst verificationError2 = this._checkWorkspaceUndo(strResource, element, editStackSnapshot, /*now also check that there are no more invalidated resources*/true);\n\t\tif (verificationError2) {\n\t\t\tcleanup.dispose();\n\t\t\treturn verificationError2.returnValue;\n\t\t}\n\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\teditStack.moveBackward(element);\n\t\t}\n\t\treturn this._safeInvokeWithLocks(element, () => element.actual.undo(), editStackSnapshot, cleanup, () => this._continueUndoInGroup(element.groupId, undoConfirmed));\n\t}\n\n\tprivate _resourceUndo(editStack: ResourceEditStack, element: ResourceStackElement, undoConfirmed: boolean): Promise<void> | void {\n\t\tif (!element.isValid) {\n\t\t\t// invalid element => immediately flush edit stack!\n\t\t\teditStack.flushAllElements();\n\t\t\treturn;\n\t\t}\n\t\tif (editStack.locked) {\n\t\t\tconst message = nls.localize(\n\t\t\t\t{ key: 'cannotResourceUndoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation.'] },\n\t\t\t\t\"Could not undo '{0}' because there is already an undo or redo operation running.\", element.label\n\t\t\t);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn;\n\t\t}\n\t\treturn this._invokeResourcePrepare(element, (cleanup) => {\n\t\t\teditStack.moveBackward(element);\n\t\t\treturn this._safeInvokeWithLocks(element, () => element.actual.undo(), new EditStackSnapshot([editStack]), cleanup, () => this._continueUndoInGroup(element.groupId, undoConfirmed));\n\t\t});\n\t}\n\n\tprivate _findClosestUndoElementInGroup(groupId: number): [StackElement | null, string | null] {\n\t\tif (!groupId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find another element with the same groupId and with the highest groupOrder ready to be undone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestPastElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.groupId === groupId) {\n\t\t\t\tif (!matchedElement || candidate.groupOrder > matchedElement.groupOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tprivate _continueUndoInGroup(groupId: number, undoConfirmed: boolean): Promise<void> | void {\n\t\tif (!groupId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [, matchedStrResource] = this._findClosestUndoElementInGroup(groupId);\n\t\tif (matchedStrResource) {\n\t\t\treturn this._undo(matchedStrResource, 0, undoConfirmed);\n\t\t}\n\t}\n\n\tpublic undo(resourceOrSource: URI | UndoRedoSource): Promise<void> | void {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestUndoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? this._undo(matchedStrResource, resourceOrSource.id, false) : undefined;\n\t\t}\n\t\tif (typeof resourceOrSource === 'string') {\n\t\t\treturn this._undo(resourceOrSource, 0, false);\n\t\t}\n\t\treturn this._undo(this.getUriComparisonKey(resourceOrSource), 0, false);\n\t}\n\n\tprivate _undo(strResource: string, sourceId: number = 0, undoConfirmed: boolean): Promise<void> | void {\n\t\tif (!this._editStacks.has(strResource)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\tconst element = editStack.getClosestPastElement();\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (element.groupId) {\n\t\t\t// this element is a part of a group, we need to make sure undoing in a group is in order\n\t\t\tconst [matchedElement, matchedStrResource] = this._findClosestUndoElementInGroup(element.groupId);\n\t\t\tif (element !== matchedElement && matchedStrResource) {\n\t\t\t\t// there is an element in the same group that should be undone before this one\n\t\t\t\treturn this._undo(matchedStrResource, sourceId, undoConfirmed);\n\t\t\t}\n\t\t}\n\n\t\tconst shouldPromptForConfirmation = (element.sourceId !== sourceId || element.confirmBeforeUndo);\n\t\tif (shouldPromptForConfirmation && !undoConfirmed) {\n\t\t\t// Hit a different source or the element asks for prompt before undo, prompt for confirmation\n\t\t\treturn this._confirmAndContinueUndo(strResource, sourceId, element);\n\t\t}\n\n\t\ttry {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\treturn this._workspaceUndo(strResource, element, undoConfirmed);\n\t\t\t} else {\n\t\t\t\treturn this._resourceUndo(editStack, element, undoConfirmed);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (DEBUG) {\n\t\t\t\tthis._print('undo');\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async _confirmAndContinueUndo(strResource: string, sourceId: number, element: StackElement): Promise<void> {\n\t\tconst result = await this._dialogService.confirm({\n\t\t\tmessage: nls.localize('confirmDifferentSource', \"Would you like to undo '{0}'?\", element.label),\n\t\t\tprimaryButton: nls.localize({ key: 'confirmDifferentSource.yes', comment: ['&& denotes a mnemonic'] }, \"&&Yes\"),\n\t\t\tcancelButton: nls.localize('confirmDifferentSource.no', \"No\")\n\t\t});\n\n\t\tif (!result.confirmed) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._undo(strResource, sourceId, true);\n\t}\n\n\tprivate _findClosestRedoElementWithSource(sourceId: number): [StackElement | null, string | null] {\n\t\tif (!sourceId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find an element with sourceId and with the lowest sourceOrder ready to be redone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestFutureElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.sourceId === sourceId) {\n\t\t\t\tif (!matchedElement || candidate.sourceOrder < matchedElement.sourceOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tpublic canRedo(resourceOrSource: URI | UndoRedoSource): boolean {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestRedoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? true : false;\n\t\t}\n\t\tconst strResource = this.getUriComparisonKey(resourceOrSource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.hasFutureElements();\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _tryToSplitAndRedo(strResource: string, element: WorkspaceStackElement, ignoreResources: RemovedResources | null, message: string): WorkspaceVerificationError {\n\t\tif (element.canSplit()) {\n\t\t\tthis._splitFutureWorkspaceElement(element, ignoreResources);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError(this._redo(strResource));\n\t\t} else {\n\t\t\t// Cannot safely split this workspace element => flush all undo/redo stacks\n\t\t\tfor (const strResource of element.strResources) {\n\t\t\t\tthis.removeElements(strResource);\n\t\t\t}\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError();\n\t\t}\n\t}\n\n\tprivate _checkWorkspaceRedo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot, checkInvalidatedResources: boolean): WorkspaceVerificationError | null {\n\t\tif (element.removedResources) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.removedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files. {1}\", element.label, element.removedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (checkInvalidatedResources && element.invalidatedResources) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.invalidatedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files. {1}\", element.label, element.invalidatedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// this must be the last future element in all the impacted resources!\n\t\tconst cannotRedoDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.getClosestFutureElement() !== element) {\n\t\t\t\tcannotRedoDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotRedoDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedoDueToChanges', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files because changes were made to {1}\", element.label, cannotRedoDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconst cannotLockDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.locked) {\n\t\t\t\tcannotLockDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotLockDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}\", element.label, cannotLockDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// check if new stack elements were added in the meantime...\n\t\tif (!editStackSnapshot.isValid()) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedoDueToInMeantimeUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime\", element.label\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _workspaceRedo(strResource: string, element: WorkspaceStackElement): Promise<void> | void {\n\t\tconst affectedEditStacks = this._getAffectedEditStacks(element);\n\t\tconst verificationError = this._checkWorkspaceRedo(strResource, element, affectedEditStacks, /*invalidated resources will be checked after the prepare call*/false);\n\t\tif (verificationError) {\n\t\t\treturn verificationError.returnValue;\n\t\t}\n\t\treturn this._executeWorkspaceRedo(strResource, element, affectedEditStacks);\n\t}\n\n\tprivate async _executeWorkspaceRedo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot): Promise<void> {\n\t\t// prepare\n\t\tlet cleanup: IDisposable;\n\t\ttry {\n\t\t\tcleanup = await this._invokeWorkspacePrepare(element);\n\t\t} catch (err) {\n\t\t\treturn this._onError(err, element);\n\t\t}\n\n\t\t// At this point, it is possible that the element has been made invalid in the meantime (due to the prepare await)\n\t\tconst verificationError = this._checkWorkspaceRedo(strResource, element, editStackSnapshot, /*now also check that there are no more invalidated resources*/true);\n\t\tif (verificationError) {\n\t\t\tcleanup.dispose();\n\t\t\treturn verificationError.returnValue;\n\t\t}\n\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\teditStack.moveForward(element);\n\t\t}\n\t\treturn this._safeInvokeWithLocks(element, () => element.actual.redo(), editStackSnapshot, cleanup, () => this._continueRedoInGroup(element.groupId));\n\t}\n\n\tprivate _resourceRedo(editStack: ResourceEditStack, element: ResourceStackElement): Promise<void> | void {\n\t\tif (!element.isValid) {\n\t\t\t// invalid element => immediately flush edit stack!\n\t\t\teditStack.flushAllElements();\n\t\t\treturn;\n\t\t}\n\t\tif (editStack.locked) {\n\t\t\tconst message = nls.localize(\n\t\t\t\t{ key: 'cannotResourceRedoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation.'] },\n\t\t\t\t\"Could not redo '{0}' because there is already an undo or redo operation running.\", element.label\n\t\t\t);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._invokeResourcePrepare(element, (cleanup) => {\n\t\t\teditStack.moveForward(element);\n\t\t\treturn this._safeInvokeWithLocks(element, () => element.actual.redo(), new EditStackSnapshot([editStack]), cleanup, () => this._continueRedoInGroup(element.groupId));\n\t\t});\n\t}\n\n\tprivate _findClosestRedoElementInGroup(groupId: number): [StackElement | null, string | null] {\n\t\tif (!groupId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find another element with the same groupId and with the lowest groupOrder ready to be redone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestFutureElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.groupId === groupId) {\n\t\t\t\tif (!matchedElement || candidate.groupOrder < matchedElement.groupOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tprivate _continueRedoInGroup(groupId: number): Promise<void> | void {\n\t\tif (!groupId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [, matchedStrResource] = this._findClosestRedoElementInGroup(groupId);\n\t\tif (matchedStrResource) {\n\t\t\treturn this._redo(matchedStrResource);\n\t\t}\n\t}\n\n\tpublic redo(resourceOrSource: URI | UndoRedoSource | string): Promise<void> | void {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestRedoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? this._redo(matchedStrResource) : undefined;\n\t\t}\n\t\tif (typeof resourceOrSource === 'string') {\n\t\t\treturn this._redo(resourceOrSource);\n\t\t}\n\t\treturn this._redo(this.getUriComparisonKey(resourceOrSource));\n\t}\n\n\tprivate _redo(strResource: string): Promise<void> | void {\n\t\tif (!this._editStacks.has(strResource)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\tconst element = editStack.getClosestFutureElement();\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (element.groupId) {\n\t\t\t// this element is a part of a group, we need to make sure redoing in a group is in order\n\t\t\tconst [matchedElement, matchedStrResource] = this._findClosestRedoElementInGroup(element.groupId);\n\t\t\tif (element !== matchedElement && matchedStrResource) {\n\t\t\t\t// there is an element in the same group that should be redone before this one\n\t\t\t\treturn this._redo(matchedStrResource);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\treturn this._workspaceRedo(strResource, element);\n\t\t\t} else {\n\t\t\t\treturn this._resourceRedo(editStack, element);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (DEBUG) {\n\t\t\t\tthis._print('redo');\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass WorkspaceVerificationError {\n\tconstructor(public readonly returnValue: Promise<void> | void) { }\n}\n\nregisterSingleton(IUndoRedoService, UndoRedoService, InstantiationType.Delayed);\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/platform/undoRedo/common/undoRedoService.ts"],"names":[],"mappings":"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","file":"undoRedoService.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 { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Disposable, IDisposable, isDisposable } from '../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport Severity from '../../../base/common/severity.js';\nimport { URI } from '../../../base/common/uri.js';\nimport * as nls from '../../../nls.js';\nimport { IDialogService } from '../../dialogs/common/dialogs.js';\nimport { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { IPastFutureElements, IResourceUndoRedoElement, IUndoRedoElement, IUndoRedoService, IWorkspaceUndoRedoElement, ResourceEditStackSnapshot, UndoRedoElementType, UndoRedoGroup, UndoRedoSource, UriComparisonKeyComputer } from './undoRedo.js';\n\nconst DEBUG = false;\n\nfunction getResourceLabel(resource: URI): string {\n\treturn resource.scheme === Schemas.file ? resource.fsPath : resource.path;\n}\n\nlet stackElementCounter = 0;\n\nclass ResourceStackElement {\n\tpublic readonly id = (++stackElementCounter);\n\tpublic readonly type = UndoRedoElementType.Resource;\n\tpublic readonly actual: IUndoRedoElement;\n\tpublic readonly label: string;\n\tpublic readonly confirmBeforeUndo: boolean;\n\n\tpublic readonly resourceLabel: string;\n\tpublic readonly strResource: string;\n\tpublic readonly resourceLabels: string[];\n\tpublic readonly strResources: string[];\n\tpublic readonly groupId: number;\n\tpublic readonly groupOrder: number;\n\tpublic readonly sourceId: number;\n\tpublic readonly sourceOrder: number;\n\tpublic isValid: boolean;\n\n\tconstructor(actual: IUndoRedoElement, resourceLabel: string, strResource: string, groupId: number, groupOrder: number, sourceId: number, sourceOrder: number) {\n\t\tthis.actual = actual;\n\t\tthis.label = actual.label;\n\t\tthis.confirmBeforeUndo = actual.confirmBeforeUndo || false;\n\t\tthis.resourceLabel = resourceLabel;\n\t\tthis.strResource = strResource;\n\t\tthis.resourceLabels = [this.resourceLabel];\n\t\tthis.strResources = [this.strResource];\n\t\tthis.groupId = groupId;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.sourceId = sourceId;\n\t\tthis.sourceOrder = sourceOrder;\n\t\tthis.isValid = true;\n\t}\n\n\tpublic setValid(isValid: boolean): void {\n\t\tthis.isValid = isValid;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[id:${this.id}] [group:${this.groupId}] [${this.isValid ? ' VALID' : 'INVALID'}] ${this.actual.constructor.name} - ${this.actual}`;\n\t}\n}\n\nconst enum RemovedResourceReason {\n\tExternalRemoval = 0,\n\tNoParallelUniverses = 1\n}\n\nclass ResourceReasonPair {\n\tconstructor(\n\t\tpublic readonly resourceLabel: string,\n\t\tpublic readonly reason: RemovedResourceReason\n\t) { }\n}\n\nclass RemovedResources {\n\tprivate readonly elements = new Map<string, ResourceReasonPair>();\n\n\tpublic createMessage(): string {\n\t\tconst externalRemoval: string[] = [];\n\t\tconst noParallelUniverses: string[] = [];\n\t\tfor (const [, element] of this.elements) {\n\t\t\tconst dest = (\n\t\t\t\telement.reason === RemovedResourceReason.ExternalRemoval\n\t\t\t\t\t? externalRemoval\n\t\t\t\t\t: noParallelUniverses\n\t\t\t);\n\t\t\tdest.push(element.resourceLabel);\n\t\t}\n\n\t\tconst messages: string[] = [];\n\t\tif (externalRemoval.length > 0) {\n\t\t\tmessages.push(\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'externalRemoval', comment: ['{0} is a list of filenames'] },\n\t\t\t\t\t\"The following files have been closed and modified on disk: {0}.\", externalRemoval.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (noParallelUniverses.length > 0) {\n\t\t\tmessages.push(\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'noParallelUniverses', comment: ['{0} is a list of filenames'] },\n\t\t\t\t\t\"The following files have been modified in an incompatible way: {0}.\", noParallelUniverses.join(', ')\n\t\t\t\t));\n\t\t}\n\t\treturn messages.join('\\n');\n\t}\n\n\tpublic get size(): number {\n\t\treturn this.elements.size;\n\t}\n\n\tpublic has(strResource: string): boolean {\n\t\treturn this.elements.has(strResource);\n\t}\n\n\tpublic set(strResource: string, value: ResourceReasonPair): void {\n\t\tthis.elements.set(strResource, value);\n\t}\n\n\tpublic delete(strResource: string): boolean {\n\t\treturn this.elements.delete(strResource);\n\t}\n}\n\nclass WorkspaceStackElement {\n\tpublic readonly id = (++stackElementCounter);\n\tpublic readonly type = UndoRedoElementType.Workspace;\n\tpublic readonly actual: IWorkspaceUndoRedoElement;\n\tpublic readonly label: string;\n\tpublic readonly confirmBeforeUndo: boolean;\n\n\tpublic readonly resourceLabels: string[];\n\tpublic readonly strResources: string[];\n\tpublic readonly groupId: number;\n\tpublic readonly groupOrder: number;\n\tpublic readonly sourceId: number;\n\tpublic readonly sourceOrder: number;\n\tpublic removedResources: RemovedResources | null;\n\tpublic invalidatedResources: RemovedResources | null;\n\n\tconstructor(actual: IWorkspaceUndoRedoElement, resourceLabels: string[], strResources: string[], groupId: number, groupOrder: number, sourceId: number, sourceOrder: number) {\n\t\tthis.actual = actual;\n\t\tthis.label = actual.label;\n\t\tthis.confirmBeforeUndo = actual.confirmBeforeUndo || false;\n\t\tthis.resourceLabels = resourceLabels;\n\t\tthis.strResources = strResources;\n\t\tthis.groupId = groupId;\n\t\tthis.groupOrder = groupOrder;\n\t\tthis.sourceId = sourceId;\n\t\tthis.sourceOrder = sourceOrder;\n\t\tthis.removedResources = null;\n\t\tthis.invalidatedResources = null;\n\t}\n\n\tpublic canSplit(): this is WorkspaceStackElement & { actual: { split(): IResourceUndoRedoElement[] } } {\n\t\treturn (typeof this.actual.split === 'function');\n\t}\n\n\tpublic removeResource(resourceLabel: string, strResource: string, reason: RemovedResourceReason): void {\n\t\tif (!this.removedResources) {\n\t\t\tthis.removedResources = new RemovedResources();\n\t\t}\n\t\tif (!this.removedResources.has(strResource)) {\n\t\t\tthis.removedResources.set(strResource, new ResourceReasonPair(resourceLabel, reason));\n\t\t}\n\t}\n\n\tpublic setValid(resourceLabel: string, strResource: string, isValid: boolean): void {\n\t\tif (isValid) {\n\t\t\tif (this.invalidatedResources) {\n\t\t\t\tthis.invalidatedResources.delete(strResource);\n\t\t\t\tif (this.invalidatedResources.size === 0) {\n\t\t\t\t\tthis.invalidatedResources = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.invalidatedResources) {\n\t\t\t\tthis.invalidatedResources = new RemovedResources();\n\t\t\t}\n\t\t\tif (!this.invalidatedResources.has(strResource)) {\n\t\t\t\tthis.invalidatedResources.set(strResource, new ResourceReasonPair(resourceLabel, RemovedResourceReason.ExternalRemoval));\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources ? 'INVALID' : ' VALID'}] ${this.actual.constructor.name} - ${this.actual}`;\n\t}\n}\n\ntype StackElement = ResourceStackElement | WorkspaceStackElement;\n\nclass ResourceEditStack {\n\tpublic readonly resourceLabel: string;\n\tprivate readonly strResource: string;\n\tprivate _past: StackElement[];\n\tprivate _future: StackElement[];\n\tpublic locked: boolean;\n\tpublic versionId: number;\n\n\tconstructor(resourceLabel: string, strResource: string) {\n\t\tthis.resourceLabel = resourceLabel;\n\t\tthis.strResource = strResource;\n\t\tthis._past = [];\n\t\tthis._future = [];\n\t\tthis.locked = false;\n\t\tthis.versionId = 1;\n\t}\n\n\tpublic dispose(): void {\n\t\tfor (const element of this._past) {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tfor (const element of this._future) {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic toString(): string {\n\t\tconst result: string[] = [];\n\t\tresult.push(`* ${this.strResource}:`);\n\t\tfor (let i = 0; i < this._past.length; i++) {\n\t\t\tresult.push(` * [UNDO] ${this._past[i]}`);\n\t\t}\n\t\tfor (let i = this._future.length - 1; i >= 0; i--) {\n\t\t\tresult.push(` * [REDO] ${this._future[i]}`);\n\t\t}\n\t\treturn result.join('\\n');\n\t}\n\n\tpublic flushAllElements(): void {\n\t\tthis._past = [];\n\t\tthis._future = [];\n\t\tthis.versionId++;\n\t}\n\n\tprivate _setElementValidFlag(element: StackElement, isValid: boolean): void {\n\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\telement.setValid(this.resourceLabel, this.strResource, isValid);\n\t\t} else {\n\t\t\telement.setValid(isValid);\n\t\t}\n\t}\n\n\tpublic setElementsValidFlag(isValid: boolean, filter: (element: IUndoRedoElement) => boolean): void {\n\t\tfor (const element of this._past) {\n\t\t\tif (filter(element.actual)) {\n\t\t\t\tthis._setElementValidFlag(element, isValid);\n\t\t\t}\n\t\t}\n\t\tfor (const element of this._future) {\n\t\t\tif (filter(element.actual)) {\n\t\t\t\tthis._setElementValidFlag(element, isValid);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic pushElement(element: StackElement): void {\n\t\t// remove the future\n\t\tfor (const futureElement of this._future) {\n\t\t\tif (futureElement.type === UndoRedoElementType.Workspace) {\n\t\t\t\tfutureElement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.NoParallelUniverses);\n\t\t\t}\n\t\t}\n\t\tthis._future = [];\n\t\tthis._past.push(element);\n\t\tthis.versionId++;\n\t}\n\n\tpublic createSnapshot(resource: URI): ResourceEditStackSnapshot {\n\t\tconst elements: number[] = [];\n\n\t\tfor (let i = 0, len = this._past.length; i < len; i++) {\n\t\t\telements.push(this._past[i].id);\n\t\t}\n\t\tfor (let i = this._future.length - 1; i >= 0; i--) {\n\t\t\telements.push(this._future[i].id);\n\t\t}\n\n\t\treturn new ResourceEditStackSnapshot(resource, elements);\n\t}\n\n\tpublic restoreSnapshot(snapshot: ResourceEditStackSnapshot): void {\n\t\tconst snapshotLength = snapshot.elements.length;\n\t\tlet isOK = true;\n\t\tlet snapshotIndex = 0;\n\t\tlet removePastAfter = -1;\n\t\tfor (let i = 0, len = this._past.length; i < len; i++, snapshotIndex++) {\n\t\t\tconst element = this._past[i];\n\t\t\tif (isOK && (snapshotIndex >= snapshotLength || element.id !== snapshot.elements[snapshotIndex])) {\n\t\t\t\tisOK = false;\n\t\t\t\tremovePastAfter = i;\n\t\t\t}\n\t\t\tif (!isOK && element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tlet removeFutureBefore = -1;\n\t\tfor (let i = this._future.length - 1; i >= 0; i--, snapshotIndex++) {\n\t\t\tconst element = this._future[i];\n\t\t\tif (isOK && (snapshotIndex >= snapshotLength || element.id !== snapshot.elements[snapshotIndex])) {\n\t\t\t\tisOK = false;\n\t\t\t\tremoveFutureBefore = i;\n\t\t\t}\n\t\t\tif (!isOK && element.type === UndoRedoElementType.Workspace) {\n\t\t\t\telement.removeResource(this.resourceLabel, this.strResource, RemovedResourceReason.ExternalRemoval);\n\t\t\t}\n\t\t}\n\t\tif (removePastAfter !== -1) {\n\t\t\tthis._past = this._past.slice(0, removePastAfter);\n\t\t}\n\t\tif (removeFutureBefore !== -1) {\n\t\t\tthis._future = this._future.slice(removeFutureBefore + 1);\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic getElements(): IPastFutureElements {\n\t\tconst past: IUndoRedoElement[] = [];\n\t\tconst future: IUndoRedoElement[] = [];\n\n\t\tfor (const element of this._past) {\n\t\t\tpast.push(element.actual);\n\t\t}\n\t\tfor (const element of this._future) {\n\t\t\tfuture.push(element.actual);\n\t\t}\n\n\t\treturn { past, future };\n\t}\n\n\tpublic getClosestPastElement(): StackElement | null {\n\t\tif (this._past.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._past[this._past.length - 1];\n\t}\n\n\tpublic getSecondClosestPastElement(): StackElement | null {\n\t\tif (this._past.length < 2) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._past[this._past.length - 2];\n\t}\n\n\tpublic getClosestFutureElement(): StackElement | null {\n\t\tif (this._future.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._future[this._future.length - 1];\n\t}\n\n\tpublic hasPastElements(): boolean {\n\t\treturn (this._past.length > 0);\n\t}\n\n\tpublic hasFutureElements(): boolean {\n\t\treturn (this._future.length > 0);\n\t}\n\n\tpublic splitPastWorkspaceElement(toRemove: WorkspaceStackElement, individualMap: Map<string, ResourceStackElement>): void {\n\t\tfor (let j = this._past.length - 1; j >= 0; j--) {\n\t\t\tif (this._past[j] === toRemove) {\n\t\t\t\tif (individualMap.has(this.strResource)) {\n\t\t\t\t\t// gets replaced\n\t\t\t\t\tthis._past[j] = individualMap.get(this.strResource)!;\n\t\t\t\t} else {\n\t\t\t\t\t// gets deleted\n\t\t\t\t\tthis._past.splice(j, 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic splitFutureWorkspaceElement(toRemove: WorkspaceStackElement, individualMap: Map<string, ResourceStackElement>): void {\n\t\tfor (let j = this._future.length - 1; j >= 0; j--) {\n\t\t\tif (this._future[j] === toRemove) {\n\t\t\t\tif (individualMap.has(this.strResource)) {\n\t\t\t\t\t// gets replaced\n\t\t\t\t\tthis._future[j] = individualMap.get(this.strResource)!;\n\t\t\t\t} else {\n\t\t\t\t\t// gets deleted\n\t\t\t\t\tthis._future.splice(j, 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.versionId++;\n\t}\n\n\tpublic moveBackward(element: StackElement): void {\n\t\tthis._past.pop();\n\t\tthis._future.push(element);\n\t\tthis.versionId++;\n\t}\n\n\tpublic moveForward(element: StackElement): void {\n\t\tthis._future.pop();\n\t\tthis._past.push(element);\n\t\tthis.versionId++;\n\t}\n}\n\nclass EditStackSnapshot {\n\n\tpublic readonly editStacks: ResourceEditStack[];\n\tprivate readonly _versionIds: number[];\n\n\tconstructor(editStacks: ResourceEditStack[]) {\n\t\tthis.editStacks = editStacks;\n\t\tthis._versionIds = [];\n\t\tfor (let i = 0, len = this.editStacks.length; i < len; i++) {\n\t\t\tthis._versionIds[i] = this.editStacks[i].versionId;\n\t\t}\n\t}\n\n\tpublic isValid(): boolean {\n\t\tfor (let i = 0, len = this.editStacks.length; i < len; i++) {\n\t\t\tif (this._versionIds[i] !== this.editStacks[i].versionId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\nconst missingEditStack = new ResourceEditStack('', '');\nmissingEditStack.locked = true;\n\nexport class UndoRedoService implements IUndoRedoService {\n\tdeclare readonly _serviceBrand: undefined;\n\n\tprivate readonly _editStacks: Map<string, ResourceEditStack>;\n\tprivate readonly _uriComparisonKeyComputers: [string, UriComparisonKeyComputer][];\n\n\tconstructor(\n\t\t@IDialogService private readonly _dialogService: IDialogService,\n\t\t@INotificationService private readonly _notificationService: INotificationService,\n\t) {\n\t\tthis._editStacks = new Map<string, ResourceEditStack>();\n\t\tthis._uriComparisonKeyComputers = [];\n\t}\n\n\tpublic getUriComparisonKey(resource: URI): string {\n\t\tfor (const uriComparisonKeyComputer of this._uriComparisonKeyComputers) {\n\t\t\tif (uriComparisonKeyComputer[0] === resource.scheme) {\n\t\t\t\treturn uriComparisonKeyComputer[1].getComparisonKey(resource);\n\t\t\t}\n\t\t}\n\t\treturn resource.toString();\n\t}\n\n\tprivate _print(label: string): void {\n\t\tconsole.log(`------------------------------------`);\n\t\tconsole.log(`AFTER ${label}: `);\n\t\tconst str: string[] = [];\n\t\tfor (const element of this._editStacks) {\n\t\t\tstr.push(element[1].toString());\n\t\t}\n\t\tconsole.log(str.join('\\n'));\n\t}\n\n\tpublic pushElement(element: IUndoRedoElement, group: UndoRedoGroup = UndoRedoGroup.None, source: UndoRedoSource = UndoRedoSource.None): void {\n\t\tif (element.type === UndoRedoElementType.Resource) {\n\t\t\tconst resourceLabel = getResourceLabel(element.resource);\n\t\t\tconst strResource = this.getUriComparisonKey(element.resource);\n\t\t\tthis._pushElement(new ResourceStackElement(element, resourceLabel, strResource, group.id, group.nextOrder(), source.id, source.nextOrder()));\n\t\t} else {\n\t\t\tconst seen = new Set<string>();\n\t\t\tconst resourceLabels: string[] = [];\n\t\t\tconst strResources: string[] = [];\n\t\t\tfor (const resource of element.resources) {\n\t\t\t\tconst resourceLabel = getResourceLabel(resource);\n\t\t\t\tconst strResource = this.getUriComparisonKey(resource);\n\n\t\t\t\tif (seen.has(strResource)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tseen.add(strResource);\n\t\t\t\tresourceLabels.push(resourceLabel);\n\t\t\t\tstrResources.push(strResource);\n\t\t\t}\n\n\t\t\tif (resourceLabels.length === 1) {\n\t\t\t\tthis._pushElement(new ResourceStackElement(element, resourceLabels[0], strResources[0], group.id, group.nextOrder(), source.id, source.nextOrder()));\n\t\t\t} else {\n\t\t\t\tthis._pushElement(new WorkspaceStackElement(element, resourceLabels, strResources, group.id, group.nextOrder(), source.id, source.nextOrder()));\n\t\t\t}\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('pushElement');\n\t\t}\n\t}\n\n\tprivate _pushElement(element: StackElement): void {\n\t\tfor (let i = 0, len = element.strResources.length; i < len; i++) {\n\t\t\tconst resourceLabel = element.resourceLabels[i];\n\t\t\tconst strResource = element.strResources[i];\n\n\t\t\tlet editStack: ResourceEditStack;\n\t\t\tif (this._editStacks.has(strResource)) {\n\t\t\t\teditStack = this._editStacks.get(strResource)!;\n\t\t\t} else {\n\t\t\t\teditStack = new ResourceEditStack(resourceLabel, strResource);\n\t\t\t\tthis._editStacks.set(strResource, editStack);\n\t\t\t}\n\n\t\t\teditStack.pushElement(element);\n\t\t}\n\t}\n\n\tpublic getLastElement(resource: URI): IUndoRedoElement | null {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\tif (editStack.hasFutureElements()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst closestPastElement = editStack.getClosestPastElement();\n\t\t\treturn closestPastElement ? closestPastElement.actual : null;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _splitPastWorkspaceElement(toRemove: WorkspaceStackElement & { actual: { split(): IResourceUndoRedoElement[] } }, ignoreResources: RemovedResources | null): void {\n\t\tconst individualArr = toRemove.actual.split();\n\t\tconst individualMap = new Map<string, ResourceStackElement>();\n\t\tfor (const _element of individualArr) {\n\t\t\tconst resourceLabel = getResourceLabel(_element.resource);\n\t\t\tconst strResource = this.getUriComparisonKey(_element.resource);\n\t\t\tconst element = new ResourceStackElement(_element, resourceLabel, strResource, 0, 0, 0, 0);\n\t\t\tindividualMap.set(element.strResource, element);\n\t\t}\n\n\t\tfor (const strResource of toRemove.strResources) {\n\t\t\tif (ignoreResources && ignoreResources.has(strResource)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.splitPastWorkspaceElement(toRemove, individualMap);\n\t\t}\n\t}\n\n\tprivate _splitFutureWorkspaceElement(toRemove: WorkspaceStackElement & { actual: { split(): IResourceUndoRedoElement[] } }, ignoreResources: RemovedResources | null): void {\n\t\tconst individualArr = toRemove.actual.split();\n\t\tconst individualMap = new Map<string, ResourceStackElement>();\n\t\tfor (const _element of individualArr) {\n\t\t\tconst resourceLabel = getResourceLabel(_element.resource);\n\t\t\tconst strResource = this.getUriComparisonKey(_element.resource);\n\t\t\tconst element = new ResourceStackElement(_element, resourceLabel, strResource, 0, 0, 0, 0);\n\t\t\tindividualMap.set(element.strResource, element);\n\t\t}\n\n\t\tfor (const strResource of toRemove.strResources) {\n\t\t\tif (ignoreResources && ignoreResources.has(strResource)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.splitFutureWorkspaceElement(toRemove, individualMap);\n\t\t}\n\t}\n\n\tpublic removeElements(resource: URI | string): void {\n\t\tconst strResource = typeof resource === 'string' ? resource : this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.dispose();\n\t\t\tthis._editStacks.delete(strResource);\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('removeElements');\n\t\t}\n\t}\n\n\tpublic setElementsValidFlag(resource: URI, isValid: boolean, filter: (element: IUndoRedoElement) => boolean): void {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.setElementsValidFlag(isValid, filter);\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('setElementsValidFlag');\n\t\t}\n\t}\n\n\tpublic createSnapshot(resource: URI): ResourceEditStackSnapshot {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.createSnapshot(resource);\n\t\t}\n\t\treturn new ResourceEditStackSnapshot(resource, []);\n\t}\n\n\tpublic restoreSnapshot(snapshot: ResourceEditStackSnapshot): void {\n\t\tconst strResource = this.getUriComparisonKey(snapshot.resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\teditStack.restoreSnapshot(snapshot);\n\n\t\t\tif (!editStack.hasPastElements() && !editStack.hasFutureElements()) {\n\t\t\t\t// the edit stack is now empty, just remove it entirely\n\t\t\t\teditStack.dispose();\n\t\t\t\tthis._editStacks.delete(strResource);\n\t\t\t}\n\t\t}\n\t\tif (DEBUG) {\n\t\t\tthis._print('restoreSnapshot');\n\t\t}\n\t}\n\n\tpublic getElements(resource: URI): IPastFutureElements {\n\t\tconst strResource = this.getUriComparisonKey(resource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.getElements();\n\t\t}\n\t\treturn { past: [], future: [] };\n\t}\n\n\tprivate _findClosestUndoElementWithSource(sourceId: number): [StackElement | null, string | null] {\n\t\tif (!sourceId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find an element with the sourceId and with the highest sourceOrder ready to be undone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestPastElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.sourceId === sourceId) {\n\t\t\t\tif (!matchedElement || candidate.sourceOrder > matchedElement.sourceOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tpublic canUndo(resourceOrSource: URI | UndoRedoSource): boolean {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestUndoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? true : false;\n\t\t}\n\t\tconst strResource = this.getUriComparisonKey(resourceOrSource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.hasPastElements();\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _onError(err: Error, element: StackElement): void {\n\t\tonUnexpectedError(err);\n\t\t// An error occurred while undoing or redoing => drop the undo/redo stack for all affected resources\n\t\tfor (const strResource of element.strResources) {\n\t\t\tthis.removeElements(strResource);\n\t\t}\n\t\tthis._notificationService.error(err);\n\t}\n\n\tprivate _acquireLocks(editStackSnapshot: EditStackSnapshot): () => void {\n\t\t// first, check if all locks can be acquired\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.locked) {\n\t\t\t\tthrow new Error('Cannot acquire edit stack lock');\n\t\t\t}\n\t\t}\n\n\t\t// can acquire all locks\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\teditStack.locked = true;\n\t\t}\n\n\t\treturn () => {\n\t\t\t// release all locks\n\t\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\t\teditStack.locked = false;\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _safeInvokeWithLocks(element: StackElement, invoke: () => Promise<void> | void, editStackSnapshot: EditStackSnapshot, cleanup: IDisposable, continuation: () => Promise<void> | void): Promise<void> | void {\n\t\tconst releaseLocks = this._acquireLocks(editStackSnapshot);\n\n\t\tlet result: Promise<void> | void;\n\t\ttry {\n\t\t\tresult = invoke();\n\t\t} catch (err) {\n\t\t\treleaseLocks();\n\t\t\tcleanup.dispose();\n\t\t\treturn this._onError(err, element);\n\t\t}\n\n\t\tif (result) {\n\t\t\t// result is Promise<void>\n\t\t\treturn result.then(\n\t\t\t\t() => {\n\t\t\t\t\treleaseLocks();\n\t\t\t\t\tcleanup.dispose();\n\t\t\t\t\treturn continuation();\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\treleaseLocks();\n\t\t\t\t\tcleanup.dispose();\n\t\t\t\t\treturn this._onError(err, element);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\t// result is void\n\t\t\treleaseLocks();\n\t\t\tcleanup.dispose();\n\t\t\treturn continuation();\n\t\t}\n\t}\n\n\tprivate async _invokeWorkspacePrepare(element: WorkspaceStackElement): Promise<IDisposable> {\n\t\tif (typeof element.actual.prepareUndoRedo === 'undefined') {\n\t\t\treturn Disposable.None;\n\t\t}\n\t\tconst result = element.actual.prepareUndoRedo();\n\t\tif (typeof result === 'undefined') {\n\t\t\treturn Disposable.None;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _invokeResourcePrepare(element: ResourceStackElement, callback: (disposable: IDisposable) => Promise<void> | void): void | Promise<void> {\n\t\tif (element.actual.type !== UndoRedoElementType.Workspace || typeof element.actual.prepareUndoRedo === 'undefined') {\n\t\t\t// no preparation needed\n\t\t\treturn callback(Disposable.None);\n\t\t}\n\n\t\tconst r = element.actual.prepareUndoRedo();\n\t\tif (!r) {\n\t\t\t// nothing to clean up\n\t\t\treturn callback(Disposable.None);\n\t\t}\n\n\t\tif (isDisposable(r)) {\n\t\t\treturn callback(r);\n\t\t}\n\n\t\treturn r.then((disposable) => {\n\t\t\treturn callback(disposable);\n\t\t});\n\t}\n\n\tprivate _getAffectedEditStacks(element: WorkspaceStackElement): EditStackSnapshot {\n\t\tconst affectedEditStacks: ResourceEditStack[] = [];\n\t\tfor (const strResource of element.strResources) {\n\t\t\taffectedEditStacks.push(this._editStacks.get(strResource) || missingEditStack);\n\t\t}\n\t\treturn new EditStackSnapshot(affectedEditStacks);\n\t}\n\n\tprivate _tryToSplitAndUndo(strResource: string, element: WorkspaceStackElement, ignoreResources: RemovedResources | null, message: string): WorkspaceVerificationError {\n\t\tif (element.canSplit()) {\n\t\t\tthis._splitPastWorkspaceElement(element, ignoreResources);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError(this._undo(strResource, 0, true));\n\t\t} else {\n\t\t\t// Cannot safely split this workspace element => flush all undo/redo stacks\n\t\t\tfor (const strResource of element.strResources) {\n\t\t\t\tthis.removeElements(strResource);\n\t\t\t}\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError();\n\t\t}\n\t}\n\n\tprivate _checkWorkspaceUndo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot, checkInvalidatedResources: boolean): WorkspaceVerificationError | null {\n\t\tif (element.removedResources) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.removedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files. {1}\", element.label, element.removedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (checkInvalidatedResources && element.invalidatedResources) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.invalidatedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files. {1}\", element.label, element.invalidatedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// this must be the last past element in all the impacted resources!\n\t\tconst cannotUndoDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.getClosestPastElement() !== element) {\n\t\t\t\tcannotUndoDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotUndoDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndoDueToChanges', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files because changes were made to {1}\", element.label, cannotUndoDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconst cannotLockDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.locked) {\n\t\t\t\tcannotLockDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotLockDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}\", element.label, cannotLockDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// check if new stack elements were added in the meantime...\n\t\tif (!editStackSnapshot.isValid()) {\n\t\t\treturn this._tryToSplitAndUndo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceUndoDueToInMeantimeUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime\", element.label\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _workspaceUndo(strResource: string, element: WorkspaceStackElement, undoConfirmed: boolean): Promise<void> | void {\n\t\tconst affectedEditStacks = this._getAffectedEditStacks(element);\n\t\tconst verificationError = this._checkWorkspaceUndo(strResource, element, affectedEditStacks, /*invalidated resources will be checked after the prepare call*/false);\n\t\tif (verificationError) {\n\t\t\treturn verificationError.returnValue;\n\t\t}\n\t\treturn this._confirmAndExecuteWorkspaceUndo(strResource, element, affectedEditStacks, undoConfirmed);\n\t}\n\n\tprivate _isPartOfUndoGroup(element: WorkspaceStackElement): boolean {\n\t\tif (!element.groupId) {\n\t\t\treturn false;\n\t\t}\n\t\t// check that there is at least another element with the same groupId ready to be undone\n\t\tfor (const [, editStack] of this._editStacks) {\n\t\t\tconst pastElement = editStack.getClosestPastElement();\n\t\t\tif (!pastElement) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pastElement === element) {\n\t\t\t\tconst secondPastElement = editStack.getSecondClosestPastElement();\n\t\t\t\tif (secondPastElement && secondPastElement.groupId === element.groupId) {\n\t\t\t\t\t// there is another element with the same group id in the same stack!\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pastElement.groupId === element.groupId) {\n\t\t\t\t// there is another element with the same group id in another stack!\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate async _confirmAndExecuteWorkspaceUndo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot, undoConfirmed: boolean): Promise<void> {\n\n\t\tif (element.canSplit() && !this._isPartOfUndoGroup(element)) {\n\t\t\t// this element can be split\n\n\t\t\tenum UndoChoice {\n\t\t\t\tAll = 0,\n\t\t\t\tThis = 1,\n\t\t\t\tCancel = 2\n\t\t\t}\n\n\t\t\tconst { result } = await this._dialogService.prompt<UndoChoice>({\n\t\t\t\ttype: Severity.Info,\n\t\t\t\tmessage: nls.localize('confirmWorkspace', \"Would you like to undo '{0}' across all files?\", element.label),\n\t\t\t\tbuttons: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: nls.localize({ key: 'ok', comment: ['{0} denotes a number that is > 1, && denotes a mnemonic'] }, \"&&Undo in {0} Files\", editStackSnapshot.editStacks.length),\n\t\t\t\t\t\trun: () => UndoChoice.All\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: nls.localize({ key: 'nok', comment: ['&& denotes a mnemonic'] }, \"Undo this &&File\"),\n\t\t\t\t\t\trun: () => UndoChoice.This\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tcancelButton: {\n\t\t\t\t\trun: () => UndoChoice.Cancel\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (result === UndoChoice.Cancel) {\n\t\t\t\t// choice: cancel\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (result === UndoChoice.This) {\n\t\t\t\t// choice: undo this file\n\t\t\t\tthis._splitPastWorkspaceElement(element, null);\n\t\t\t\treturn this._undo(strResource, 0, true);\n\t\t\t}\n\n\t\t\t// choice: undo in all files\n\n\t\t\t// At this point, it is possible that the element has been made invalid in the meantime (due to the confirmation await)\n\t\t\tconst verificationError1 = this._checkWorkspaceUndo(strResource, element, editStackSnapshot, /*invalidated resources will be checked after the prepare call*/false);\n\t\t\tif (verificationError1) {\n\t\t\t\treturn verificationError1.returnValue;\n\t\t\t}\n\n\t\t\tundoConfirmed = true;\n\t\t}\n\n\t\t// prepare\n\t\tlet cleanup: IDisposable;\n\t\ttry {\n\t\t\tcleanup = await this._invokeWorkspacePrepare(element);\n\t\t} catch (err) {\n\t\t\treturn this._onError(err, element);\n\t\t}\n\n\t\t// At this point, it is possible that the element has been made invalid in the meantime (due to the prepare await)\n\t\tconst verificationError2 = this._checkWorkspaceUndo(strResource, element, editStackSnapshot, /*now also check that there are no more invalidated resources*/true);\n\t\tif (verificationError2) {\n\t\t\tcleanup.dispose();\n\t\t\treturn verificationError2.returnValue;\n\t\t}\n\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\teditStack.moveBackward(element);\n\t\t}\n\t\treturn this._safeInvokeWithLocks(element, () => element.actual.undo(), editStackSnapshot, cleanup, () => this._continueUndoInGroup(element.groupId, undoConfirmed));\n\t}\n\n\tprivate _resourceUndo(editStack: ResourceEditStack, element: ResourceStackElement, undoConfirmed: boolean): Promise<void> | void {\n\t\tif (!element.isValid) {\n\t\t\t// invalid element => immediately flush edit stack!\n\t\t\teditStack.flushAllElements();\n\t\t\treturn;\n\t\t}\n\t\tif (editStack.locked) {\n\t\t\tconst message = nls.localize(\n\t\t\t\t{ key: 'cannotResourceUndoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation.'] },\n\t\t\t\t\"Could not undo '{0}' because there is already an undo or redo operation running.\", element.label\n\t\t\t);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn;\n\t\t}\n\t\treturn this._invokeResourcePrepare(element, (cleanup) => {\n\t\t\teditStack.moveBackward(element);\n\t\t\treturn this._safeInvokeWithLocks(element, () => element.actual.undo(), new EditStackSnapshot([editStack]), cleanup, () => this._continueUndoInGroup(element.groupId, undoConfirmed));\n\t\t});\n\t}\n\n\tprivate _findClosestUndoElementInGroup(groupId: number): [StackElement | null, string | null] {\n\t\tif (!groupId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find another element with the same groupId and with the highest groupOrder ready to be undone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestPastElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.groupId === groupId) {\n\t\t\t\tif (!matchedElement || candidate.groupOrder > matchedElement.groupOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tprivate _continueUndoInGroup(groupId: number, undoConfirmed: boolean): Promise<void> | void {\n\t\tif (!groupId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [, matchedStrResource] = this._findClosestUndoElementInGroup(groupId);\n\t\tif (matchedStrResource) {\n\t\t\treturn this._undo(matchedStrResource, 0, undoConfirmed);\n\t\t}\n\t}\n\n\tpublic undo(resourceOrSource: URI | UndoRedoSource): Promise<void> | void {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestUndoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? this._undo(matchedStrResource, resourceOrSource.id, false) : undefined;\n\t\t}\n\t\tif (typeof resourceOrSource === 'string') {\n\t\t\treturn this._undo(resourceOrSource, 0, false);\n\t\t}\n\t\treturn this._undo(this.getUriComparisonKey(resourceOrSource), 0, false);\n\t}\n\n\tprivate _undo(strResource: string, sourceId: number = 0, undoConfirmed: boolean): Promise<void> | void {\n\t\tif (!this._editStacks.has(strResource)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\tconst element = editStack.getClosestPastElement();\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (element.groupId) {\n\t\t\t// this element is a part of a group, we need to make sure undoing in a group is in order\n\t\t\tconst [matchedElement, matchedStrResource] = this._findClosestUndoElementInGroup(element.groupId);\n\t\t\tif (element !== matchedElement && matchedStrResource) {\n\t\t\t\t// there is an element in the same group that should be undone before this one\n\t\t\t\treturn this._undo(matchedStrResource, sourceId, undoConfirmed);\n\t\t\t}\n\t\t}\n\n\t\tconst shouldPromptForConfirmation = (element.sourceId !== sourceId || element.confirmBeforeUndo);\n\t\tif (shouldPromptForConfirmation && !undoConfirmed) {\n\t\t\t// Hit a different source or the element asks for prompt before undo, prompt for confirmation\n\t\t\treturn this._confirmAndContinueUndo(strResource, sourceId, element);\n\t\t}\n\n\t\ttry {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\treturn this._workspaceUndo(strResource, element, undoConfirmed);\n\t\t\t} else {\n\t\t\t\treturn this._resourceUndo(editStack, element, undoConfirmed);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (DEBUG) {\n\t\t\t\tthis._print('undo');\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async _confirmAndContinueUndo(strResource: string, sourceId: number, element: StackElement): Promise<void> {\n\t\tconst result = await this._dialogService.confirm({\n\t\t\tmessage: nls.localize('confirmDifferentSource', \"Would you like to undo '{0}'?\", element.label),\n\t\t\tprimaryButton: nls.localize({ key: 'confirmDifferentSource.yes', comment: ['&& denotes a mnemonic'] }, \"&&Yes\"),\n\t\t\tcancelButton: nls.localize('confirmDifferentSource.no', \"No\")\n\t\t});\n\n\t\tif (!result.confirmed) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._undo(strResource, sourceId, true);\n\t}\n\n\tprivate _findClosestRedoElementWithSource(sourceId: number): [StackElement | null, string | null] {\n\t\tif (!sourceId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find an element with sourceId and with the lowest sourceOrder ready to be redone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestFutureElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.sourceId === sourceId) {\n\t\t\t\tif (!matchedElement || candidate.sourceOrder < matchedElement.sourceOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tpublic canRedo(resourceOrSource: URI | UndoRedoSource): boolean {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestRedoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? true : false;\n\t\t}\n\t\tconst strResource = this.getUriComparisonKey(resourceOrSource);\n\t\tif (this._editStacks.has(strResource)) {\n\t\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\t\treturn editStack.hasFutureElements();\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _tryToSplitAndRedo(strResource: string, element: WorkspaceStackElement, ignoreResources: RemovedResources | null, message: string): WorkspaceVerificationError {\n\t\tif (element.canSplit()) {\n\t\t\tthis._splitFutureWorkspaceElement(element, ignoreResources);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError(this._redo(strResource));\n\t\t} else {\n\t\t\t// Cannot safely split this workspace element => flush all undo/redo stacks\n\t\t\tfor (const strResource of element.strResources) {\n\t\t\t\tthis.removeElements(strResource);\n\t\t\t}\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn new WorkspaceVerificationError();\n\t\t}\n\t}\n\n\tprivate _checkWorkspaceRedo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot, checkInvalidatedResources: boolean): WorkspaceVerificationError | null {\n\t\tif (element.removedResources) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.removedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files. {1}\", element.label, element.removedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (checkInvalidatedResources && element.invalidatedResources) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\telement.invalidatedResources,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedo', comment: ['{0} is a label for an operation. {1} is another message.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files. {1}\", element.label, element.invalidatedResources.createMessage()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// this must be the last future element in all the impacted resources!\n\t\tconst cannotRedoDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.getClosestFutureElement() !== element) {\n\t\t\t\tcannotRedoDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotRedoDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedoDueToChanges', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files because changes were made to {1}\", element.label, cannotRedoDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconst cannotLockDueToResources: string[] = [];\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\tif (editStack.locked) {\n\t\t\t\tcannotLockDueToResources.push(editStack.resourceLabel);\n\t\t\t}\n\t\t}\n\t\tif (cannotLockDueToResources.length > 0) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}\", element.label, cannotLockDueToResources.join(', ')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// check if new stack elements were added in the meantime...\n\t\tif (!editStackSnapshot.isValid()) {\n\t\t\treturn this._tryToSplitAndRedo(\n\t\t\t\tstrResource,\n\t\t\t\telement,\n\t\t\t\tnull,\n\t\t\t\tnls.localize(\n\t\t\t\t\t{ key: 'cannotWorkspaceRedoDueToInMeantimeUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] },\n\t\t\t\t\t\"Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime\", element.label\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _workspaceRedo(strResource: string, element: WorkspaceStackElement): Promise<void> | void {\n\t\tconst affectedEditStacks = this._getAffectedEditStacks(element);\n\t\tconst verificationError = this._checkWorkspaceRedo(strResource, element, affectedEditStacks, /*invalidated resources will be checked after the prepare call*/false);\n\t\tif (verificationError) {\n\t\t\treturn verificationError.returnValue;\n\t\t}\n\t\treturn this._executeWorkspaceRedo(strResource, element, affectedEditStacks);\n\t}\n\n\tprivate async _executeWorkspaceRedo(strResource: string, element: WorkspaceStackElement, editStackSnapshot: EditStackSnapshot): Promise<void> {\n\t\t// prepare\n\t\tlet cleanup: IDisposable;\n\t\ttry {\n\t\t\tcleanup = await this._invokeWorkspacePrepare(element);\n\t\t} catch (err) {\n\t\t\treturn this._onError(err, element);\n\t\t}\n\n\t\t// At this point, it is possible that the element has been made invalid in the meantime (due to the prepare await)\n\t\tconst verificationError = this._checkWorkspaceRedo(strResource, element, editStackSnapshot, /*now also check that there are no more invalidated resources*/true);\n\t\tif (verificationError) {\n\t\t\tcleanup.dispose();\n\t\t\treturn verificationError.returnValue;\n\t\t}\n\n\t\tfor (const editStack of editStackSnapshot.editStacks) {\n\t\t\teditStack.moveForward(element);\n\t\t}\n\t\treturn this._safeInvokeWithLocks(element, () => element.actual.redo(), editStackSnapshot, cleanup, () => this._continueRedoInGroup(element.groupId));\n\t}\n\n\tprivate _resourceRedo(editStack: ResourceEditStack, element: ResourceStackElement): Promise<void> | void {\n\t\tif (!element.isValid) {\n\t\t\t// invalid element => immediately flush edit stack!\n\t\t\teditStack.flushAllElements();\n\t\t\treturn;\n\t\t}\n\t\tif (editStack.locked) {\n\t\t\tconst message = nls.localize(\n\t\t\t\t{ key: 'cannotResourceRedoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation.'] },\n\t\t\t\t\"Could not redo '{0}' because there is already an undo or redo operation running.\", element.label\n\t\t\t);\n\t\t\tthis._notificationService.warn(message);\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._invokeResourcePrepare(element, (cleanup) => {\n\t\t\teditStack.moveForward(element);\n\t\t\treturn this._safeInvokeWithLocks(element, () => element.actual.redo(), new EditStackSnapshot([editStack]), cleanup, () => this._continueRedoInGroup(element.groupId));\n\t\t});\n\t}\n\n\tprivate _findClosestRedoElementInGroup(groupId: number): [StackElement | null, string | null] {\n\t\tif (!groupId) {\n\t\t\treturn [null, null];\n\t\t}\n\n\t\t// find another element with the same groupId and with the lowest groupOrder ready to be redone\n\t\tlet matchedElement: StackElement | null = null;\n\t\tlet matchedStrResource: string | null = null;\n\n\t\tfor (const [strResource, editStack] of this._editStacks) {\n\t\t\tconst candidate = editStack.getClosestFutureElement();\n\t\t\tif (!candidate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (candidate.groupId === groupId) {\n\t\t\t\tif (!matchedElement || candidate.groupOrder < matchedElement.groupOrder) {\n\t\t\t\t\tmatchedElement = candidate;\n\t\t\t\t\tmatchedStrResource = strResource;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [matchedElement, matchedStrResource];\n\t}\n\n\tprivate _continueRedoInGroup(groupId: number): Promise<void> | void {\n\t\tif (!groupId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [, matchedStrResource] = this._findClosestRedoElementInGroup(groupId);\n\t\tif (matchedStrResource) {\n\t\t\treturn this._redo(matchedStrResource);\n\t\t}\n\t}\n\n\tpublic redo(resourceOrSource: URI | UndoRedoSource | string): Promise<void> | void {\n\t\tif (resourceOrSource instanceof UndoRedoSource) {\n\t\t\tconst [, matchedStrResource] = this._findClosestRedoElementWithSource(resourceOrSource.id);\n\t\t\treturn matchedStrResource ? this._redo(matchedStrResource) : undefined;\n\t\t}\n\t\tif (typeof resourceOrSource === 'string') {\n\t\t\treturn this._redo(resourceOrSource);\n\t\t}\n\t\treturn this._redo(this.getUriComparisonKey(resourceOrSource));\n\t}\n\n\tprivate _redo(strResource: string): Promise<void> | void {\n\t\tif (!this._editStacks.has(strResource)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst editStack = this._editStacks.get(strResource)!;\n\t\tconst element = editStack.getClosestFutureElement();\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (element.groupId) {\n\t\t\t// this element is a part of a group, we need to make sure redoing in a group is in order\n\t\t\tconst [matchedElement, matchedStrResource] = this._findClosestRedoElementInGroup(element.groupId);\n\t\t\tif (element !== matchedElement && matchedStrResource) {\n\t\t\t\t// there is an element in the same group that should be redone before this one\n\t\t\t\treturn this._redo(matchedStrResource);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tif (element.type === UndoRedoElementType.Workspace) {\n\t\t\t\treturn this._workspaceRedo(strResource, element);\n\t\t\t} else {\n\t\t\t\treturn this._resourceRedo(editStack, element);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (DEBUG) {\n\t\t\t\tthis._print('redo');\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass WorkspaceVerificationError {\n\tconstructor(public readonly returnValue: Promise<void> | void) { }\n}\n\nregisterSingleton(IUndoRedoService, UndoRedoService, InstantiationType.Delayed);\n"]}
|
|
@@ -31,7 +31,7 @@ export function getTitleBarStyle(configurationService) {
|
|
|
31
31
|
if (configuration) {
|
|
32
32
|
const useNativeTabs = isMacintosh && configuration.nativeTabs === true;
|
|
33
33
|
if (useNativeTabs) {
|
|
34
|
-
return "native" /* TitlebarStyle.NATIVE */; // native tabs on
|
|
34
|
+
return "native" /* TitlebarStyle.NATIVE */; // native tabs on macOS do not work with custom title style
|
|
35
35
|
}
|
|
36
36
|
const useSimpleFullScreen = isMacintosh && configuration.nativeFullScreen === false;
|
|
37
37
|
if (useSimpleFullScreen) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/platform/window/common/window.ts","vs/platform/window/common/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAStE,MAAM,UAAU,oBAAoB,CAAC,oBAA2C,EAAE,aAA6B;IAC9G,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;IAC3E,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,QAAQ,CAA8B,QAAQ,CAAC,CAAC;IAElG,IAAI,oBAAoB,EAAE,SAAS,iDAAkC,EAAE,CAAC;QACvE,mDAAmD;QACnD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,oBAAoB,EAAE,SAAS,iDAAkC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,CAAC,0CAA0C;AAC/D,CAAC;AAqBD,MAAM,UAAU,iBAAiB,CAAC,oBAA2C,EAAE,aAA6B;IAC3G,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,aAAa,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,aAAa,wCAAyB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,oBAA2C;IAC3E,IAAI,KAAK,EAAE,CAAC;QACX,2CAA4B;IAC7B,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAA8B,QAAQ,CAAC,CAAC;IAC3F,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,aAAa,GAAG,WAAW,IAAI,aAAa,CAAC,UAAU,KAAK,IAAI,CAAC;QACvE,IAAI,aAAa,EAAE,CAAC;YACnB,2CAA4B,CAAC,
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/platform/window/common/window.ts","vs/platform/window/common/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAStE,MAAM,UAAU,oBAAoB,CAAC,oBAA2C,EAAE,aAA6B;IAC9G,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;IAC3E,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,QAAQ,CAA8B,QAAQ,CAAC,CAAC;IAElG,IAAI,oBAAoB,EAAE,SAAS,iDAAkC,EAAE,CAAC;QACvE,mDAAmD;QACnD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,oBAAoB,EAAE,SAAS,iDAAkC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,CAAC,0CAA0C;AAC/D,CAAC;AAqBD,MAAM,UAAU,iBAAiB,CAAC,oBAA2C,EAAE,aAA6B;IAC3G,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,aAAa,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,aAAa,wCAAyB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,oBAA2C;IAC3E,IAAI,KAAK,EAAE,CAAC;QACX,2CAA4B;IAC7B,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAA8B,QAAQ,CAAC,CAAC;IAC3F,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,aAAa,GAAG,WAAW,IAAI,aAAa,CAAC,UAAU,KAAK,IAAI,CAAC;QACvE,IAAI,aAAa,EAAE,CAAC;YACnB,2CAA4B,CAAC,2DAA2D;QACzF,CAAC;QAED,MAAM,mBAAmB,GAAG,WAAW,IAAI,aAAa,CAAC,gBAAgB,KAAK,KAAK,CAAC;QACpF,IAAI,mBAAmB,EAAE,CAAC;YACzB,2CAA4B,CAAC,kHAAkH;QAChJ,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,CAAC;QAC1C,IAAI,KAAK,wCAAyB,IAAI,KAAK,wCAAyB,EAAE,CAAC;YACtE,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,2CAA4B,CAAC,8BAA8B;AAC5D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,oBAA2C;IACjF,IAAI,KAAK,IAAI,WAAW,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,wCAAyB,EAAE,CAAC;QAC7F,iDAAkC,CAAC,+DAA+D;IACnG,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAA8B,QAAQ,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAG,aAAa,EAAE,aAAa,CAAC;IAC3C,IAAI,KAAK,8CAA+B,IAAI,KAAK,8CAA+B,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACd,CAAC;IAED,iDAAkC,CAAC,8BAA8B;AAClE,CAAC","file":"window.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { isMacintosh, isWeb } from '../../../base/common/platform.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\n\nexport const enum MenuStyleConfiguration {\n\tCUSTOM = 'custom',\n\tNATIVE = 'native',\n\tINHERIT = 'inherit',\n}\n\nexport function hasNativeContextMenu(configurationService: IConfigurationService, titleBarStyle?: TitlebarStyle): boolean {\n\tif (isWeb) {\n\t\treturn false;\n\t}\n\n\tconst nativeTitle = hasNativeTitlebar(configurationService, titleBarStyle);\n\tconst windowConfigurations = configurationService.getValue<IWindowSettings | undefined>('window');\n\n\tif (windowConfigurations?.menuStyle === MenuStyleConfiguration.NATIVE) {\n\t\t// Do not support native menu with custom title bar\n\t\tif (!isMacintosh && !nativeTitle) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (windowConfigurations?.menuStyle === MenuStyleConfiguration.CUSTOM) {\n\t\treturn false;\n\t}\n\n\treturn nativeTitle; // Default to inherit from title bar style\n}\n\nexport interface IWindowSettings {\n\treadonly titleBarStyle: TitlebarStyle;\n\treadonly controlsStyle: WindowControlsStyle;\n\treadonly menuStyle: MenuStyleConfiguration;\n\treadonly nativeTabs: boolean;\n\treadonly nativeFullScreen: boolean;\n}\n\nexport const enum TitlebarStyle {\n\tNATIVE = 'native',\n\tCUSTOM = 'custom',\n}\n\nexport const enum WindowControlsStyle {\n\tNATIVE = 'native',\n\tCUSTOM = 'custom',\n\tHIDDEN = 'hidden'\n}\n\nexport function hasNativeTitlebar(configurationService: IConfigurationService, titleBarStyle?: TitlebarStyle): boolean {\n\tif (!titleBarStyle) {\n\t\ttitleBarStyle = getTitleBarStyle(configurationService);\n\t}\n\n\treturn titleBarStyle === TitlebarStyle.NATIVE;\n}\n\nexport function getTitleBarStyle(configurationService: IConfigurationService): TitlebarStyle {\n\tif (isWeb) {\n\t\treturn TitlebarStyle.CUSTOM;\n\t}\n\n\tconst configuration = configurationService.getValue<IWindowSettings | undefined>('window');\n\tif (configuration) {\n\t\tconst useNativeTabs = isMacintosh && configuration.nativeTabs === true;\n\t\tif (useNativeTabs) {\n\t\t\treturn TitlebarStyle.NATIVE; // native tabs on macOS do not work with custom title style\n\t\t}\n\n\t\tconst useSimpleFullScreen = isMacintosh && configuration.nativeFullScreen === false;\n\t\tif (useSimpleFullScreen) {\n\t\t\treturn TitlebarStyle.NATIVE; // simple fullscreen does not work well with custom title style (https://github.com/microsoft/vscode/issues/63291)\n\t\t}\n\n\t\tconst style = configuration.titleBarStyle;\n\t\tif (style === TitlebarStyle.NATIVE || style === TitlebarStyle.CUSTOM) {\n\t\t\treturn style;\n\t\t}\n\t}\n\n\treturn TitlebarStyle.CUSTOM; // default to custom on all OS\n}\n\nexport function getWindowControlsStyle(configurationService: IConfigurationService): WindowControlsStyle {\n\tif (isWeb || isMacintosh || getTitleBarStyle(configurationService) === TitlebarStyle.NATIVE) {\n\t\treturn WindowControlsStyle.NATIVE; // only supported on Windows/Linux desktop with custom titlebar\n\t}\n\n\tconst configuration = configurationService.getValue<IWindowSettings | undefined>('window');\n\tconst style = configuration?.controlsStyle;\n\tif (style === WindowControlsStyle.CUSTOM || style === WindowControlsStyle.HIDDEN) {\n\t\treturn style;\n\t}\n\n\treturn WindowControlsStyle.NATIVE; // default to native on all OS\n}\n","\nimport { isMacintosh, isWeb } from '../../../base/common/platform.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\n\nexport const enum MenuStyleConfiguration {\n\tCUSTOM = 'custom',\n\tNATIVE = 'native',\n\tINHERIT = 'inherit',\n}\n\nexport function hasNativeContextMenu(configurationService: IConfigurationService, titleBarStyle?: TitlebarStyle): boolean {\n\tif (isWeb) {\n\t\treturn false;\n\t}\n\n\tconst nativeTitle = hasNativeTitlebar(configurationService, titleBarStyle);\n\tconst windowConfigurations = configurationService.getValue<IWindowSettings | undefined>('window');\n\n\tif (windowConfigurations?.menuStyle === MenuStyleConfiguration.NATIVE) {\n\t\t// Do not support native menu with custom title bar\n\t\tif (!isMacintosh && !nativeTitle) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (windowConfigurations?.menuStyle === MenuStyleConfiguration.CUSTOM) {\n\t\treturn false;\n\t}\n\n\treturn nativeTitle; // Default to inherit from title bar style\n}\n\nexport interface IWindowSettings {\n\treadonly titleBarStyle: TitlebarStyle;\n\treadonly controlsStyle: WindowControlsStyle;\n\treadonly menuStyle: MenuStyleConfiguration;\n\treadonly nativeTabs: boolean;\n\treadonly nativeFullScreen: boolean;\n}\n\nexport const enum TitlebarStyle {\n\tNATIVE = 'native',\n\tCUSTOM = 'custom',\n}\n\nexport const enum WindowControlsStyle {\n\tNATIVE = 'native',\n\tCUSTOM = 'custom',\n\tHIDDEN = 'hidden'\n}\n\nexport function hasNativeTitlebar(configurationService: IConfigurationService, titleBarStyle?: TitlebarStyle): boolean {\n\tif (!titleBarStyle) {\n\t\ttitleBarStyle = getTitleBarStyle(configurationService);\n\t}\n\n\treturn titleBarStyle === TitlebarStyle.NATIVE;\n}\n\nexport function getTitleBarStyle(configurationService: IConfigurationService): TitlebarStyle {\n\tif (isWeb) {\n\t\treturn TitlebarStyle.CUSTOM;\n\t}\n\n\tconst configuration = configurationService.getValue<IWindowSettings | undefined>('window');\n\tif (configuration) {\n\t\tconst useNativeTabs = isMacintosh && configuration.nativeTabs === true;\n\t\tif (useNativeTabs) {\n\t\t\treturn TitlebarStyle.NATIVE; // native tabs on macOS do not work with custom title style\n\t\t}\n\n\t\tconst useSimpleFullScreen = isMacintosh && configuration.nativeFullScreen === false;\n\t\tif (useSimpleFullScreen) {\n\t\t\treturn TitlebarStyle.NATIVE; // simple fullscreen does not work well with custom title style (https://github.com/microsoft/vscode/issues/63291)\n\t\t}\n\n\t\tconst style = configuration.titleBarStyle;\n\t\tif (style === TitlebarStyle.NATIVE || style === TitlebarStyle.CUSTOM) {\n\t\t\treturn style;\n\t\t}\n\t}\n\n\treturn TitlebarStyle.CUSTOM; // default to custom on all OS\n}\n\nexport function getWindowControlsStyle(configurationService: IConfigurationService): WindowControlsStyle {\n\tif (isWeb || isMacintosh || getTitleBarStyle(configurationService) === TitlebarStyle.NATIVE) {\n\t\treturn WindowControlsStyle.NATIVE; // only supported on Windows/Linux desktop with custom titlebar\n\t}\n\n\tconst configuration = configurationService.getValue<IWindowSettings | undefined>('window');\n\tconst style = configuration?.controlsStyle;\n\tif (style === WindowControlsStyle.CUSTOM || style === WindowControlsStyle.HIDDEN) {\n\t\treturn style;\n\t}\n\n\treturn WindowControlsStyle.NATIVE; // default to native on all OS\n}\n"]}
|
|
@@ -123,7 +123,7 @@ export class WorkspaceFolder {
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
export const WORKSPACE_EXTENSION = 'code-workspace';
|
|
126
|
-
export const WORKSPACE_FILTER = [{ name: localize(
|
|
126
|
+
export const WORKSPACE_FILTER = [{ name: localize(2070, "Code Workspace"), extensions: [WORKSPACE_EXTENSION] }];
|
|
127
127
|
export const STANDALONE_EDITOR_WORKSPACE_ID = '4064f6ec-cb38-4ad0-af64-ee6467e63c82';
|
|
128
128
|
export function isStandaloneEditorWorkspace(workspace) {
|
|
129
129
|
return workspace.id === STANDALONE_EDITOR_WORKSPACE_ID;
|
package/monaco.d.ts
CHANGED
|
@@ -5588,6 +5588,11 @@ declare namespace monaco.editor {
|
|
|
5588
5588
|
* Render this content widget in a location where it could overflow the editor's view dom node.
|
|
5589
5589
|
*/
|
|
5590
5590
|
allowEditorOverflow?: boolean;
|
|
5591
|
+
/**
|
|
5592
|
+
* If true, this widget doesn't have a visual representation.
|
|
5593
|
+
* The element will have display set to 'none'.
|
|
5594
|
+
*/
|
|
5595
|
+
useDisplayNone?: boolean;
|
|
5591
5596
|
/**
|
|
5592
5597
|
* Call preventDefault() on mousedown events that target the content widget.
|
|
5593
5598
|
*/
|
|
@@ -6376,6 +6381,7 @@ declare namespace monaco.editor {
|
|
|
6376
6381
|
* Use this method with caution.
|
|
6377
6382
|
*/
|
|
6378
6383
|
getOffsetForColumn(lineNumber: number, column: number): number;
|
|
6384
|
+
getWidthOfLine(lineNumber: number): number;
|
|
6379
6385
|
/**
|
|
6380
6386
|
* Force an editor render now.
|
|
6381
6387
|
*/
|
|
@@ -7497,6 +7503,16 @@ declare namespace monaco.languages {
|
|
|
7497
7503
|
readonly earliestShownDateTime: number;
|
|
7498
7504
|
}
|
|
7499
7505
|
|
|
7506
|
+
export interface IInlineCompletionModelInfo {
|
|
7507
|
+
models: IInlineCompletionModel[];
|
|
7508
|
+
currentModelId: string;
|
|
7509
|
+
}
|
|
7510
|
+
|
|
7511
|
+
export interface IInlineCompletionModel {
|
|
7512
|
+
name: string;
|
|
7513
|
+
id: string;
|
|
7514
|
+
}
|
|
7515
|
+
|
|
7500
7516
|
export class SelectedSuggestionInfo {
|
|
7501
7517
|
readonly range: IRange;
|
|
7502
7518
|
readonly text: string;
|
|
@@ -7561,6 +7577,8 @@ declare namespace monaco.languages {
|
|
|
7561
7577
|
* Used for telemetry.
|
|
7562
7578
|
*/
|
|
7563
7579
|
readonly correlationId?: string | undefined;
|
|
7580
|
+
readonly jumpToPosition?: IPosition;
|
|
7581
|
+
readonly doNotLog?: boolean;
|
|
7564
7582
|
}
|
|
7565
7583
|
|
|
7566
7584
|
export interface InlineCompletionWarning {
|
|
@@ -7641,6 +7659,9 @@ declare namespace monaco.languages {
|
|
|
7641
7659
|
excludesGroupIds?: InlineCompletionProviderGroupId[];
|
|
7642
7660
|
displayName?: string;
|
|
7643
7661
|
debounceDelayMs?: number;
|
|
7662
|
+
modelInfo?: IInlineCompletionModelInfo;
|
|
7663
|
+
onDidModelInfoChange?: IEvent<void>;
|
|
7664
|
+
setModelId?(modelId: string): Promise<void>;
|
|
7644
7665
|
toString?(): string;
|
|
7645
7666
|
}
|
|
7646
7667
|
|
|
@@ -7656,6 +7677,7 @@ declare namespace monaco.languages {
|
|
|
7656
7677
|
|
|
7657
7678
|
export type InlineCompletionEndOfLifeReason<TInlineCompletion = InlineCompletion> = {
|
|
7658
7679
|
kind: InlineCompletionEndOfLifeReasonKind.Accepted;
|
|
7680
|
+
alternativeAction: boolean;
|
|
7659
7681
|
} | {
|
|
7660
7682
|
kind: InlineCompletionEndOfLifeReasonKind.Rejected;
|
|
7661
7683
|
} | {
|
|
@@ -7675,6 +7697,7 @@ declare namespace monaco.languages {
|
|
|
7675
7697
|
shownDuration: number;
|
|
7676
7698
|
shownDurationUncollapsed: number;
|
|
7677
7699
|
timeUntilShown: number | undefined;
|
|
7700
|
+
timeUntilActuallyShown: number | undefined;
|
|
7678
7701
|
timeUntilProviderRequest: number;
|
|
7679
7702
|
timeUntilProviderResponse: number;
|
|
7680
7703
|
notShownReason: string | undefined;
|
|
@@ -7683,6 +7706,7 @@ declare namespace monaco.languages {
|
|
|
7683
7706
|
preceeded: boolean;
|
|
7684
7707
|
languageId: string;
|
|
7685
7708
|
requestReason: string;
|
|
7709
|
+
performanceMarkers?: string;
|
|
7686
7710
|
cursorColumnDistance?: number;
|
|
7687
7711
|
cursorLineDistance?: number;
|
|
7688
7712
|
lineCountOriginal?: number;
|
|
@@ -7695,9 +7719,16 @@ declare namespace monaco.languages {
|
|
|
7695
7719
|
typingIntervalCharacterCount: number;
|
|
7696
7720
|
selectedSuggestionInfo: boolean;
|
|
7697
7721
|
availableProviders: string;
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7722
|
+
skuPlan: string | undefined;
|
|
7723
|
+
skuType: string | undefined;
|
|
7724
|
+
renameCreated: boolean | undefined;
|
|
7725
|
+
renameDuration: number | undefined;
|
|
7726
|
+
renameTimedOut: boolean | undefined;
|
|
7727
|
+
renameDroppedOtherEdits: number | undefined;
|
|
7728
|
+
renameDroppedRenameEdits: number | undefined;
|
|
7729
|
+
editKind: string | undefined;
|
|
7730
|
+
longDistanceHintVisible?: boolean;
|
|
7731
|
+
longDistanceHintDistance?: number;
|
|
7701
7732
|
};
|
|
7702
7733
|
|
|
7703
7734
|
export interface CodeAction {
|