monaco-editor-core 0.56.0-dev-20251124 → 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 +34 -2
- 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/async.js +11 -0
- package/esm/vs/base/common/async.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.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 +2 -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 -65
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +69 -13
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +159 -94
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +124 -50
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +393 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -0
- 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 -11
- 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 +37 -2
- 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 -4
- 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 +37 -2
- 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":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.ts"],"names":[],"mappings":"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","file":"longDistancePreviewEditor.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 { n } from '../../../../../../../../base/browser/dom.js';\nimport { Disposable } from '../../../../../../../../base/common/lifecycle.js';\nimport { IObservable, derived, constObservable, IReader, autorun, observableValue } from '../../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../../browser/observableCodeEditor.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { IDimension } from '../../../../../../../common/core/2d/dimension.js';\nimport { Position } from '../../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../../common/core/range.js';\nimport { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';\nimport { DetailedLineRangeMapping } from '../../../../../../../common/diff/rangeMapping.js';\nimport { IModelDeltaDecoration, ITextModel } from '../../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../../common/model/textModel.js';\nimport { InlineCompletionContextKeys } from '../../../../controller/inlineCompletionContextKeys.js';\nimport { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from '../../components/gutterIndicatorView.js';\nimport { InlineEditTabAction } from '../../inlineEditsViewInterface.js';\nimport { classNames, maxContentWidthInRange } from '../../utils/utils.js';\n\nexport interface ILongDistancePreviewProps {\n\tdiff: DetailedLineRangeMapping[];\n\tmodel: SimpleInlineSuggestModel;\n\tsuggestInfo: InlineSuggestionGutterMenuData;\n}\n\nexport class LongDistancePreviewEditor extends Disposable {\n\tpublic readonly previewEditor;\n\tprivate readonly _previewEditorObs;\n\n\tprivate readonly _previewRef = n.ref<HTMLDivElement>();\n\tpublic readonly element = n.div({ class: 'preview', style: { /*pointerEvents: 'none'*/ }, ref: this._previewRef });\n\n\tprivate _parentEditorObs: ObservableCodeEditor;\n\n\tconstructor(\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _properties: IObservable<ILongDistancePreviewProps | undefined>,\n\t\tprivate readonly _parentEditor: ICodeEditor,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis.previewEditor = this._register(this._createPreviewEditor());\n\t\tthis._parentEditorObs = observableCodeEditor(this._parentEditor);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis.previewEditor.setModel(this._state.read(reader)?.textModel || null);\n\t\t}));\n\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._register(this._previewEditorObs.setDecorations(derived(reader => {\n\t\t\tconst state = this._state.read(reader);\n\t\t\tconst decorations = this._editorDecorations.read(reader);\n\t\t\treturn (state?.mode === 'original' ? decorations?.originalDecorations : decorations?.modifiedDecorations) ?? [];\n\t\t})));\n\n\t\t// Mirror the cursor position. Allows the gutter arrow to point in the correct direction.\n\t\tthis._register(autorun((reader) => {\n\t\t\tif (!this._properties.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cursorPosition = this._parentEditorObs.cursorPosition.read(reader);\n\t\t\tif (cursorPosition) {\n\t\t\t\tthis.previewEditor.setPosition(this._previewTextModel.validatePosition(cursorPosition), 'longDistanceHintPreview');\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst state = this._properties.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Ensure there is enough space to the left of the line number for the gutter indicator to fits.\n\t\t\tconst lineNumberDigets = state.diff[0].modified.startLineNumber.toString().length;\n\t\t\tthis.previewEditor.updateOptions({ lineNumbersMinChars: lineNumberDigets + 1 });\n\t\t}));\n\n\t\tthis._register(this._instantiationService.createInstance(\n\t\t\tInlineEditsGutterIndicator,\n\t\t\tthis._previewEditorObs,\n\t\t\tderived(reader => {\n\t\t\t\tconst state = this._properties.read(reader);\n\t\t\t\tif (!state) { return undefined; }\n\t\t\t\treturn new InlineEditsGutterIndicatorData(\n\t\t\t\t\tstate.suggestInfo,\n\t\t\t\t\tLineRange.ofLength(state.diff[0].original.startLineNumber, 1),\n\t\t\t\t\tstate.model,\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis._tabAction,\n\t\t\tconstObservable(0),\n\t\t\tconstObservable(false),\n\t\t\tobservableValue(this, false),\n\t\t));\n\n\t\tthis.updatePreviewEditorEffect.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _state = derived(this, reader => {\n\t\tconst props = this._properties.read(reader);\n\t\tif (!props) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (props.diff[0].innerChanges?.every(c => c.modifiedRange.isEmpty())) {\n\t\t\treturn {\n\t\t\t\tdiff: props.diff,\n\t\t\t\tvisibleLineRange: LineRange.ofLength(props.diff[0].original.startLineNumber, 1),\n\t\t\t\ttextModel: this._parentEditorObs.model.read(reader),\n\t\t\t\tmode: 'original' as const,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdiff: props.diff,\n\t\t\t\tvisibleLineRange: LineRange.ofLength(props.diff[0].modified.startLineNumber, 1),\n\t\t\t\ttextModel: this._previewTextModel,\n\t\t\t\tmode: 'modified' as const,\n\t\t\t};\n\t\t}\n\t});\n\n\tprivate _createPreviewEditor() {\n\t\treturn this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis._previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'on',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\t//folding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\t//lineDecorationsWidth: 0,\n\t\t\t\t//lineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._parentEditor\n\t\t);\n\t}\n\n\tpublic readonly updatePreviewEditorEffect = derived(this, reader => {\n\t\t// this._widgetContent.readEffect(reader);\n\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\tconst range = this._state.read(reader)?.visibleLineRange;\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tconst hiddenAreas: Range[] = [];\n\t\tif (range.startLineNumber > 1) {\n\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t}\n\t\tif (range.endLineNumberExclusive < this._previewTextModel.getLineCount() + 1) {\n\t\t\thiddenAreas.push(new Range(range.endLineNumberExclusive, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t}\n\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\t});\n\n\tpublic readonly horizontalContentRangeInPreviewEditorToShow = derived(this, reader => {\n\t\treturn this._getHorizontalContentRangeInPreviewEditorToShow(this.previewEditor, this._properties.read(reader)?.diff ?? [], reader);\n\t});\n\n\tpublic readonly contentHeight = derived(this, (reader) => {\n\t\tconst viewState = this._properties.read(reader);\n\t\tif (!viewState) {\n\t\t\treturn constObservable(null);\n\t\t}\n\n\t\tconst previewEditorHeight = this._previewEditorObs.observeLineHeightForLine(viewState.diff[0].modified.startLineNumber);\n\t\treturn previewEditorHeight;\n\t}).flatten();\n\n\tprivate _getHorizontalContentRangeInPreviewEditorToShow(editor: ICodeEditor, diff: DetailedLineRangeMapping[], reader: IReader) {\n\n\t\tconst r = LineRange.ofLength(diff[0].modified.startLineNumber, 1);\n\t\tconst l = this._previewEditorObs.layoutInfo.read(reader);\n\t\tconst trueContentWidth = maxContentWidthInRange(this._previewEditorObs, r, reader);\n\n\t\tconst state = this._state.read(reader);\n\t\tif (!state || !diff[0].innerChanges) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstCharacterChange = state.mode === 'modified' ? diff[0].innerChanges[0].modifiedRange : diff[0].innerChanges[0].originalRange;\n\n\t\t// find the horizontal range we want to show.\n\t\tconst preferredRange = growUntilVariableBoundaries(editor.getModel()!, firstCharacterChange, 5);\n\t\tconst left = this._previewEditorObs.getLeftOfPosition(preferredRange.getStartPosition(), reader);\n\t\tconst right = this._previewEditorObs.getLeftOfPosition(preferredRange.getEndPosition(), reader);\n\n\t\tconst indentCol = editor.getModel()!.getLineFirstNonWhitespaceColumn(preferredRange.startLineNumber);\n\t\tconst indentationEnd = this._previewEditorObs.getLeftOfPosition(new Position(preferredRange.startLineNumber, indentCol), reader);\n\n\t\tconst preferredRangeToReveal = new OffsetRange(left, right);\n\n\t\treturn {\n\t\t\tindentationEnd,\n\t\t\tpreferredRangeToReveal,\n\t\t\tmaxEditorWidth: trueContentWidth + l.contentLeft,\n\t\t\tcontentWidth: trueContentWidth,\n\t\t\tnonContentWidth: l.contentLeft, // Width of area that is not content\n\t\t};\n\t}\n\n\tpublic layout(dimension: IDimension, desiredPreviewEditorScrollLeft: number): void {\n\t\tthis.previewEditor.layout(dimension);\n\t\tthis._previewEditorObs.editor.setScrollLeft(desiredPreviewEditorScrollLeft);\n\t}\n\n\tprivate readonly _editorDecorations = derived(this, reader => {\n\t\tconst diff2 = this._state.read(reader);\n\t\tif (!diff2) { return undefined; }\n\n\t\tconst diff = {\n\t\t\tmode: 'insertionInline' as const,\n\t\t\tdiff: diff2.diff,\n\t\t};\n\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\tdescription: 'char-delete',\n\t\t\tisWholeLine: false,\n\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t});\n\n\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tisWholeLine: true,\n\t\t});\n\n\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tshouldFillLineOnLineBreak: true,\n\t\t});\n\n\t\tconst hideEmptyInnerDecorations = true; // diff.mode === 'lineReplacement';\n\t\tfor (const m of diff.diff) {\n\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t}\n\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t// i.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\toptions: diffAddDecoration\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { originalDecorations, modifiedDecorations };\n\t});\n}\n\n/*\n * Grows the range on each ends until it includes a none-variable-name character\n * or the next character would be a whitespace character\n * or the maxGrow limit is reached\n */\nfunction growUntilVariableBoundaries(textModel: ITextModel, range: Range, maxGrow: number): Range {\n\tconst startPosition = range.getStartPosition();\n\tconst endPosition = range.getEndPosition();\n\tconst line = textModel.getLineContent(startPosition.lineNumber);\n\n\tfunction isVariableNameCharacter(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn (/[a-zA-Z0-9_]/).test(char);\n\t}\n\n\tfunction isWhitespace(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn char === ' ' || char === '\\t';\n\t}\n\n\tlet startColumn = startPosition.column;\n\twhile (startColumn > 1 && isVariableNameCharacter(startColumn) && !isWhitespace(startColumn - 1) && startPosition.column - startColumn < maxGrow) {\n\t\tstartColumn--;\n\t}\n\n\tlet endColumn = endPosition.column - 1;\n\twhile (endColumn <= line.length && isVariableNameCharacter(endColumn) && !isWhitespace(endColumn + 1) && endColumn - endPosition.column < maxGrow) {\n\t\tendColumn++;\n\t}\n\n\treturn new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endColumn + 1);\n}\n","/*---------------------------------------------------------------------------------------------\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 { n } from '../../../../../../../../base/browser/dom.js';\nimport { Disposable } from '../../../../../../../../base/common/lifecycle.js';\nimport { IObservable, derived, constObservable, IReader, autorun, observableValue } from '../../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../../browser/observableCodeEditor.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { IDimension } from '../../../../../../../common/core/2d/dimension.js';\nimport { Position } from '../../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../../common/core/range.js';\nimport { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';\nimport { DetailedLineRangeMapping } from '../../../../../../../common/diff/rangeMapping.js';\nimport { IModelDeltaDecoration, ITextModel } from '../../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../../common/model/textModel.js';\nimport { InlineCompletionContextKeys } from '../../../../controller/inlineCompletionContextKeys.js';\nimport { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from '../../components/gutterIndicatorView.js';\nimport { InlineEditTabAction } from '../../inlineEditsViewInterface.js';\nimport { classNames, maxContentWidthInRange } from '../../utils/utils.js';\n\nexport interface ILongDistancePreviewProps {\n\tdiff: DetailedLineRangeMapping[];\n\tmodel: SimpleInlineSuggestModel;\n\tsuggestInfo: InlineSuggestionGutterMenuData;\n}\n\nexport class LongDistancePreviewEditor extends Disposable {\n\tpublic readonly previewEditor;\n\tprivate readonly _previewEditorObs;\n\n\tprivate readonly _previewRef = n.ref<HTMLDivElement>();\n\tpublic readonly element = n.div({ class: 'preview', style: { /*pointerEvents: 'none'*/ }, ref: this._previewRef });\n\n\tprivate _parentEditorObs: ObservableCodeEditor;\n\n\tconstructor(\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _properties: IObservable<ILongDistancePreviewProps | undefined>,\n\t\tprivate readonly _parentEditor: ICodeEditor,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis.previewEditor = this._register(this._createPreviewEditor());\n\t\tthis._parentEditorObs = observableCodeEditor(this._parentEditor);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis.previewEditor.setModel(this._state.read(reader)?.textModel || null);\n\t\t}));\n\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._register(this._previewEditorObs.setDecorations(derived(reader => {\n\t\t\tconst state = this._state.read(reader);\n\t\t\tconst decorations = this._editorDecorations.read(reader);\n\t\t\treturn (state?.mode === 'original' ? decorations?.originalDecorations : decorations?.modifiedDecorations) ?? [];\n\t\t})));\n\n\t\t// Mirror the cursor position. Allows the gutter arrow to point in the correct direction.\n\t\tthis._register(autorun((reader) => {\n\t\t\tif (!this._properties.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cursorPosition = this._parentEditorObs.cursorPosition.read(reader);\n\t\t\tif (cursorPosition) {\n\t\t\t\tthis.previewEditor.setPosition(this._previewTextModel.validatePosition(cursorPosition), 'longDistanceHintPreview');\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst state = this._properties.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Ensure there is enough space to the left of the line number for the gutter indicator to fits.\n\t\t\tconst lineNumberDigets = state.diff[0].modified.startLineNumber.toString().length;\n\t\t\tthis.previewEditor.updateOptions({ lineNumbersMinChars: lineNumberDigets + 1 });\n\t\t}));\n\n\t\tthis._register(this._instantiationService.createInstance(\n\t\t\tInlineEditsGutterIndicator,\n\t\t\tthis._previewEditorObs,\n\t\t\tderived(reader => {\n\t\t\t\tconst state = this._properties.read(reader);\n\t\t\t\tif (!state) { return undefined; }\n\t\t\t\treturn new InlineEditsGutterIndicatorData(\n\t\t\t\t\tstate.suggestInfo,\n\t\t\t\t\tLineRange.ofLength(state.diff[0].original.startLineNumber, 1),\n\t\t\t\t\tstate.model,\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis._tabAction,\n\t\t\tconstObservable(0),\n\t\t\tconstObservable(false),\n\t\t\tobservableValue(this, false),\n\t\t));\n\n\t\tthis.updatePreviewEditorEffect.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _state = derived(this, reader => {\n\t\tconst props = this._properties.read(reader);\n\t\tif (!props) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (props.diff[0].innerChanges?.every(c => c.modifiedRange.isEmpty())) {\n\t\t\treturn {\n\t\t\t\tdiff: props.diff,\n\t\t\t\tvisibleLineRange: LineRange.ofLength(props.diff[0].original.startLineNumber, 1),\n\t\t\t\ttextModel: this._parentEditorObs.model.read(reader),\n\t\t\t\tmode: 'original' as const,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdiff: props.diff,\n\t\t\t\tvisibleLineRange: LineRange.ofLength(props.diff[0].modified.startLineNumber, 1),\n\t\t\t\ttextModel: this._previewTextModel,\n\t\t\t\tmode: 'modified' as const,\n\t\t\t};\n\t\t}\n\t});\n\n\tprivate _createPreviewEditor() {\n\t\treturn this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis._previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'on',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\t//folding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\t//lineDecorationsWidth: 0,\n\t\t\t\t//lineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._parentEditor\n\t\t);\n\t}\n\n\tpublic readonly updatePreviewEditorEffect = derived(this, reader => {\n\t\t// this._widgetContent.readEffect(reader);\n\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\tconst range = this._state.read(reader)?.visibleLineRange;\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tconst hiddenAreas: Range[] = [];\n\t\tif (range.startLineNumber > 1) {\n\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t}\n\t\tif (range.endLineNumberExclusive < this._previewTextModel.getLineCount() + 1) {\n\t\t\thiddenAreas.push(new Range(range.endLineNumberExclusive, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t}\n\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\t});\n\n\tpublic readonly horizontalContentRangeInPreviewEditorToShow = derived(this, reader => {\n\t\treturn this._getHorizontalContentRangeInPreviewEditorToShow(this.previewEditor, this._properties.read(reader)?.diff ?? [], reader);\n\t});\n\n\tpublic readonly contentHeight = derived(this, (reader) => {\n\t\tconst viewState = this._properties.read(reader);\n\t\tif (!viewState) {\n\t\t\treturn constObservable(null);\n\t\t}\n\n\t\tconst previewEditorHeight = this._previewEditorObs.observeLineHeightForLine(viewState.diff[0].modified.startLineNumber);\n\t\treturn previewEditorHeight;\n\t}).flatten();\n\n\tprivate _getHorizontalContentRangeInPreviewEditorToShow(editor: ICodeEditor, diff: DetailedLineRangeMapping[], reader: IReader) {\n\n\t\tconst r = LineRange.ofLength(diff[0].modified.startLineNumber, 1);\n\t\tconst l = this._previewEditorObs.layoutInfo.read(reader);\n\t\tconst trueContentWidth = maxContentWidthInRange(this._previewEditorObs, r, reader);\n\n\t\tconst state = this._state.read(reader);\n\t\tif (!state || !diff[0].innerChanges) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstCharacterChange = state.mode === 'modified' ? diff[0].innerChanges[0].modifiedRange : diff[0].innerChanges[0].originalRange;\n\n\t\t// find the horizontal range we want to show.\n\t\tconst preferredRange = growUntilVariableBoundaries(editor.getModel()!, firstCharacterChange, 5);\n\t\tconst left = this._previewEditorObs.getLeftOfPosition(preferredRange.getStartPosition(), reader);\n\t\tconst right = this._previewEditorObs.getLeftOfPosition(preferredRange.getEndPosition(), reader);\n\n\t\tconst indentCol = editor.getModel()!.getLineFirstNonWhitespaceColumn(preferredRange.startLineNumber);\n\t\tconst indentationEnd = this._previewEditorObs.getLeftOfPosition(new Position(preferredRange.startLineNumber, indentCol), reader);\n\n\t\tconst preferredRangeToReveal = new OffsetRange(left, right);\n\n\t\treturn {\n\t\t\tindentationEnd,\n\t\t\tpreferredRangeToReveal,\n\t\t\tmaxEditorWidth: trueContentWidth + l.contentLeft,\n\t\t\tcontentWidth: trueContentWidth,\n\t\t\tnonContentWidth: l.contentLeft, // Width of area that is not content\n\t\t};\n\t}\n\n\tpublic layout(dimension: IDimension, desiredPreviewEditorScrollLeft: number): void {\n\t\tthis.previewEditor.layout(dimension);\n\t\tthis._previewEditorObs.editor.setScrollLeft(desiredPreviewEditorScrollLeft);\n\t}\n\n\tprivate readonly _editorDecorations = derived(this, reader => {\n\t\tconst diff2 = this._state.read(reader);\n\t\tif (!diff2) { return undefined; }\n\n\t\tconst diff = {\n\t\t\tmode: 'insertionInline' as const,\n\t\t\tdiff: diff2.diff,\n\t\t};\n\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\tdescription: 'char-delete',\n\t\t\tisWholeLine: false,\n\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t});\n\n\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tisWholeLine: true,\n\t\t});\n\n\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tshouldFillLineOnLineBreak: true,\n\t\t});\n\n\t\tconst hideEmptyInnerDecorations = true; // diff.mode === 'lineReplacement';\n\t\tfor (const m of diff.diff) {\n\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t}\n\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t// i.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\toptions: diffAddDecoration\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { originalDecorations, modifiedDecorations };\n\t});\n}\n\n/*\n * Grows the range on each ends until it includes a none-variable-name character\n * or the next character would be a whitespace character\n * or the maxGrow limit is reached\n */\nfunction growUntilVariableBoundaries(textModel: ITextModel, range: Range, maxGrow: number): Range {\n\tconst startPosition = range.getStartPosition();\n\tconst endPosition = range.getEndPosition();\n\tconst line = textModel.getLineContent(startPosition.lineNumber);\n\n\tfunction isVariableNameCharacter(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn (/[a-zA-Z0-9_]/).test(char);\n\t}\n\n\tfunction isWhitespace(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn char === ' ' || char === '\\t';\n\t}\n\n\tlet startColumn = startPosition.column;\n\twhile (startColumn > 1 && isVariableNameCharacter(startColumn) && !isWhitespace(startColumn - 1) && startPosition.column - startColumn < maxGrow) {\n\t\tstartColumn--;\n\t}\n\n\tlet endColumn = endPosition.column - 1;\n\twhile (endColumn <= line.length && isVariableNameCharacter(endColumn) && !isWhitespace(endColumn + 1) && endColumn - endPosition.column < maxGrow) {\n\t\tendColumn++;\n\t}\n\n\treturn new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endColumn + 1);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.ts"],"names":[],"mappings":"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","file":"longDistancePreviewEditor.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 { n } from '../../../../../../../../base/browser/dom.js';\nimport { Disposable } from '../../../../../../../../base/common/lifecycle.js';\nimport { clamp } from '../../../../../../../../base/common/numbers.js';\nimport { IObservable, derived, constObservable, IReader, autorun, observableValue } from '../../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../../browser/observableCodeEditor.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { IDimension } from '../../../../../../../common/core/2d/dimension.js';\nimport { Position } from '../../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../../common/core/range.js';\nimport { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';\nimport { DetailedLineRangeMapping } from '../../../../../../../common/diff/rangeMapping.js';\nimport { IModelDeltaDecoration, ITextModel } from '../../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../../common/model/textModel.js';\nimport { InlineCompletionContextKeys } from '../../../../controller/inlineCompletionContextKeys.js';\nimport { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from '../../components/gutterIndicatorView.js';\nimport { InlineEditTabAction } from '../../inlineEditsViewInterface.js';\nimport { classNames, maxContentWidthInRange } from '../../utils/utils.js';\nimport { JumpToView } from '../jumpToView.js';\n\nexport interface ILongDistancePreviewProps {\n\tnextCursorPosition: Position | null; // assert: nextCursorPosition !== null xor diff.length > 0\n\tdiff: DetailedLineRangeMapping[];\n\tmodel: SimpleInlineSuggestModel;\n\tinlineSuggestInfo: InlineSuggestionGutterMenuData;\n}\n\nexport class LongDistancePreviewEditor extends Disposable {\n\tpublic readonly previewEditor;\n\tprivate readonly _previewEditorObs;\n\n\tprivate readonly _previewRef = n.ref<HTMLDivElement>();\n\tpublic readonly element = n.div({ class: 'preview', style: { /*pointerEvents: 'none'*/ }, ref: this._previewRef });\n\n\tprivate _parentEditorObs: ObservableCodeEditor;\n\n\tconstructor(\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _properties: IObservable<ILongDistancePreviewProps | undefined>,\n\t\tprivate readonly _parentEditor: ICodeEditor,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis.previewEditor = this._register(this._createPreviewEditor());\n\t\tthis._parentEditorObs = observableCodeEditor(this._parentEditor);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst tm = this._state.read(reader)?.textModel || null;\n\n\t\t\tif (tm) {\n\t\t\t\t// Avoid transitions from tm -> null -> tm, where tm -> tm would be a no-op.\n\t\t\t\tthis.previewEditor.setModel(tm);\n\t\t\t}\n\t\t}));\n\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._register(this._previewEditorObs.setDecorations(derived(reader => {\n\t\t\tconst state = this._state.read(reader);\n\t\t\tconst decorations = this._editorDecorations.read(reader);\n\t\t\treturn (state?.mode === 'original' ? decorations?.originalDecorations : decorations?.modifiedDecorations) ?? [];\n\t\t})));\n\n\t\tconst showJumpToDecoration = false;\n\n\t\tif (showJumpToDecoration) {\n\t\t\tthis._register(this._instantiationService.createInstance(JumpToView, this._previewEditorObs, { style: 'cursor' }, derived(reader => {\n\t\t\t\tconst p = this._properties.read(reader);\n\t\t\t\tif (!p || !p.nextCursorPosition) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tjumpToPosition: p.nextCursorPosition,\n\n\t\t\t\t};\n\t\t\t})));\n\t\t}\n\n\t\t// Mirror the cursor position. Allows the gutter arrow to point in the correct direction.\n\t\tthis._register(autorun((reader) => {\n\t\t\tif (!this._properties.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cursorPosition = this._parentEditorObs.cursorPosition.read(reader);\n\t\t\tif (cursorPosition) {\n\t\t\t\tthis.previewEditor.setPosition(this._previewTextModel.validatePosition(cursorPosition), 'longDistanceHintPreview');\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst state = this._state.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Ensure there is enough space to the left of the line number for the gutter indicator to fits.\n\t\t\tconst lineNumberDigets = state.visibleLineRange.startLineNumber.toString().length;\n\t\t\tthis.previewEditor.updateOptions({ lineNumbersMinChars: lineNumberDigets + 1 });\n\t\t}));\n\n\t\tthis._register(this._instantiationService.createInstance(\n\t\t\tInlineEditsGutterIndicator,\n\t\t\tthis._previewEditorObs,\n\t\t\tderived(reader => {\n\t\t\t\tconst state = this._state.read(reader);\n\t\t\t\tif (!state) { return undefined; }\n\t\t\t\tconst props = this._properties.read(reader);\n\t\t\t\tif (!props) { return undefined; }\n\t\t\t\treturn new InlineEditsGutterIndicatorData(\n\t\t\t\t\tprops.inlineSuggestInfo,\n\t\t\t\t\tLineRange.ofLength(state.visibleLineRange.startLineNumber, 1),\n\t\t\t\t\tprops.model,\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis._tabAction,\n\t\t\tconstObservable(0),\n\t\t\tconstObservable(false),\n\t\t\tobservableValue(this, false),\n\t\t));\n\n\t\tthis.updatePreviewEditorEffect.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _state = derived(this, reader => {\n\t\tconst props = this._properties.read(reader);\n\t\tif (!props) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet mode: 'original' | 'modified';\n\t\tlet visibleRange: LineRange;\n\n\t\tif (props.nextCursorPosition !== null) {\n\t\t\tmode = 'original';\n\t\t\tvisibleRange = LineRange.ofLength(props.nextCursorPosition.lineNumber, 1);\n\t\t} else {\n\t\t\tif (props.diff[0].innerChanges?.every(c => c.modifiedRange.isEmpty())) {\n\t\t\t\tmode = 'original';\n\t\t\t\tvisibleRange = LineRange.ofLength(props.diff[0].original.startLineNumber, 1);\n\t\t\t} else {\n\t\t\t\tmode = 'modified';\n\t\t\t\tvisibleRange = LineRange.ofLength(props.diff[0].modified.startLineNumber, 1);\n\t\t\t}\n\t\t}\n\n\t\tconst textModel = mode === 'original' ? this._parentEditorObs.model.read(reader) : this._previewTextModel;\n\t\treturn {\n\t\t\tmode,\n\t\t\tvisibleLineRange: visibleRange,\n\t\t\ttextModel,\n\t\t\tdiff: props.diff,\n\t\t};\n\t});\n\n\tprivate _createPreviewEditor() {\n\t\treturn this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis._previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'on',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\t\t\t\teditContext: false, // is a bit faster\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\t//folding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\t//lineDecorationsWidth: 0,\n\t\t\t\t//lineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._parentEditor\n\t\t);\n\t}\n\n\tpublic readonly updatePreviewEditorEffect = derived(this, reader => {\n\t\t// this._widgetContent.readEffect(reader);\n\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\tconst range = this._state.read(reader)?.visibleLineRange;\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tconst hiddenAreas: Range[] = [];\n\t\tif (range.startLineNumber > 1) {\n\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t}\n\t\tif (range.endLineNumberExclusive < this._previewTextModel.getLineCount() + 1) {\n\t\t\thiddenAreas.push(new Range(range.endLineNumberExclusive, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t}\n\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\t});\n\n\tpublic readonly horizontalContentRangeInPreviewEditorToShow = derived(this, reader => {\n\t\treturn this._getHorizontalContentRangeInPreviewEditorToShow(this.previewEditor, reader);\n\t});\n\n\tpublic readonly contentHeight = derived(this, (reader) => {\n\t\tconst viewState = this._state.read(reader);\n\t\tif (!viewState) {\n\t\t\treturn constObservable(null);\n\t\t}\n\n\t\tconst previewEditorHeight = this._previewEditorObs.observeLineHeightForLine(viewState.visibleLineRange.startLineNumber);\n\t\treturn previewEditorHeight;\n\t}).flatten();\n\n\tprivate _getHorizontalContentRangeInPreviewEditorToShow(editor: ICodeEditor, reader: IReader) {\n\t\tconst state = this._state.read(reader);\n\t\tif (!state) { return undefined; }\n\n\t\tconst diff = state.diff;\n\t\tconst jumpToPos = this._properties.read(reader)?.nextCursorPosition;\n\n\t\tconst visibleRange = state.visibleLineRange;\n\t\tconst l = this._previewEditorObs.layoutInfo.read(reader);\n\t\tconst trueContentWidth = maxContentWidthInRange(this._previewEditorObs, visibleRange, reader);\n\n\t\tlet firstCharacterChange: Range;\n\t\tif (jumpToPos) {\n\t\t\tfirstCharacterChange = Range.fromPositions(jumpToPos);\n\t\t} else if (diff[0].innerChanges) {\n\t\t\tfirstCharacterChange = state.mode === 'modified' ? diff[0].innerChanges[0].modifiedRange : diff[0].innerChanges[0].originalRange;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\n\n\t\t// find the horizontal range we want to show.\n\t\tconst preferredRange = growUntilVariableBoundaries(editor.getModel()!, firstCharacterChange, 5);\n\t\tconst leftOffset = this._previewEditorObs.getLeftOfPosition(preferredRange.getStartPosition(), reader);\n\t\tconst rightOffset = this._previewEditorObs.getLeftOfPosition(preferredRange.getEndPosition(), reader);\n\n\t\tconst left = clamp(leftOffset, 0, trueContentWidth);\n\t\tconst right = clamp(rightOffset, left, trueContentWidth);\n\n\t\tconst indentCol = editor.getModel()!.getLineFirstNonWhitespaceColumn(preferredRange.startLineNumber);\n\t\tconst indentationEnd = this._previewEditorObs.getLeftOfPosition(new Position(preferredRange.startLineNumber, indentCol), reader);\n\n\t\tconst preferredRangeToReveal = new OffsetRange(left, right);\n\n\t\treturn {\n\t\t\tindentationEnd,\n\t\t\tpreferredRangeToReveal,\n\t\t\tmaxEditorWidth: trueContentWidth + l.contentLeft,\n\t\t\tcontentWidth: trueContentWidth,\n\t\t\tnonContentWidth: l.contentLeft, // Width of area that is not content\n\t\t};\n\t}\n\n\tpublic layout(dimension: IDimension, desiredPreviewEditorScrollLeft: number): void {\n\t\tthis.previewEditor.layout(dimension);\n\t\tthis._previewEditorObs.editor.setScrollLeft(desiredPreviewEditorScrollLeft);\n\t}\n\n\tprivate readonly _editorDecorations = derived(this, reader => {\n\t\tconst state = this._state.read(reader);\n\t\tif (!state) { return undefined; }\n\n\t\tconst diff = {\n\t\t\tmode: 'insertionInline' as const,\n\t\t\tdiff: state.diff,\n\t\t};\n\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\tdescription: 'char-delete',\n\t\t\tisWholeLine: false,\n\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t});\n\n\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tisWholeLine: true,\n\t\t});\n\n\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tshouldFillLineOnLineBreak: true,\n\t\t});\n\n\t\tconst hideEmptyInnerDecorations = true; // diff.mode === 'lineReplacement';\n\t\tfor (const m of diff.diff) {\n\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t}\n\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t// i.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\toptions: diffAddDecoration\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { originalDecorations, modifiedDecorations };\n\t});\n}\n\n/*\n * Grows the range on each ends until it includes a none-variable-name character\n * or the next character would be a whitespace character\n * or the maxGrow limit is reached\n */\nfunction growUntilVariableBoundaries(textModel: ITextModel, range: Range, maxGrow: number): Range {\n\tconst startPosition = range.getStartPosition();\n\tconst endPosition = range.getEndPosition();\n\tconst line = textModel.getLineContent(startPosition.lineNumber);\n\n\tfunction isVariableNameCharacter(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn (/[a-zA-Z0-9_]/).test(char);\n\t}\n\n\tfunction isWhitespace(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn char === ' ' || char === '\\t';\n\t}\n\n\tlet startColumn = startPosition.column;\n\twhile (startColumn > 1 && isVariableNameCharacter(startColumn) && !isWhitespace(startColumn - 1) && startPosition.column - startColumn < maxGrow) {\n\t\tstartColumn--;\n\t}\n\n\tlet endColumn = endPosition.column - 1;\n\twhile (endColumn <= line.length && isVariableNameCharacter(endColumn) && !isWhitespace(endColumn + 1) && endColumn - endPosition.column < maxGrow) {\n\t\tendColumn++;\n\t}\n\n\treturn new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endColumn + 1);\n}\n","/*---------------------------------------------------------------------------------------------\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 { n } from '../../../../../../../../base/browser/dom.js';\nimport { Disposable } from '../../../../../../../../base/common/lifecycle.js';\nimport { clamp } from '../../../../../../../../base/common/numbers.js';\nimport { IObservable, derived, constObservable, IReader, autorun, observableValue } from '../../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../../browser/observableCodeEditor.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { IDimension } from '../../../../../../../common/core/2d/dimension.js';\nimport { Position } from '../../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../../common/core/range.js';\nimport { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';\nimport { DetailedLineRangeMapping } from '../../../../../../../common/diff/rangeMapping.js';\nimport { IModelDeltaDecoration, ITextModel } from '../../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../../common/model/textModel.js';\nimport { InlineCompletionContextKeys } from '../../../../controller/inlineCompletionContextKeys.js';\nimport { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from '../../components/gutterIndicatorView.js';\nimport { InlineEditTabAction } from '../../inlineEditsViewInterface.js';\nimport { classNames, maxContentWidthInRange } from '../../utils/utils.js';\nimport { JumpToView } from '../jumpToView.js';\n\nexport interface ILongDistancePreviewProps {\n\tnextCursorPosition: Position | null; // assert: nextCursorPosition !== null xor diff.length > 0\n\tdiff: DetailedLineRangeMapping[];\n\tmodel: SimpleInlineSuggestModel;\n\tinlineSuggestInfo: InlineSuggestionGutterMenuData;\n}\n\nexport class LongDistancePreviewEditor extends Disposable {\n\tpublic readonly previewEditor;\n\tprivate readonly _previewEditorObs;\n\n\tprivate readonly _previewRef = n.ref<HTMLDivElement>();\n\tpublic readonly element = n.div({ class: 'preview', style: { /*pointerEvents: 'none'*/ }, ref: this._previewRef });\n\n\tprivate _parentEditorObs: ObservableCodeEditor;\n\n\tconstructor(\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _properties: IObservable<ILongDistancePreviewProps | undefined>,\n\t\tprivate readonly _parentEditor: ICodeEditor,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis.previewEditor = this._register(this._createPreviewEditor());\n\t\tthis._parentEditorObs = observableCodeEditor(this._parentEditor);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst tm = this._state.read(reader)?.textModel || null;\n\n\t\t\tif (tm) {\n\t\t\t\t// Avoid transitions from tm -> null -> tm, where tm -> tm would be a no-op.\n\t\t\t\tthis.previewEditor.setModel(tm);\n\t\t\t}\n\t\t}));\n\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._register(this._previewEditorObs.setDecorations(derived(reader => {\n\t\t\tconst state = this._state.read(reader);\n\t\t\tconst decorations = this._editorDecorations.read(reader);\n\t\t\treturn (state?.mode === 'original' ? decorations?.originalDecorations : decorations?.modifiedDecorations) ?? [];\n\t\t})));\n\n\t\tconst showJumpToDecoration = false;\n\n\t\tif (showJumpToDecoration) {\n\t\t\tthis._register(this._instantiationService.createInstance(JumpToView, this._previewEditorObs, { style: 'cursor' }, derived(reader => {\n\t\t\t\tconst p = this._properties.read(reader);\n\t\t\t\tif (!p || !p.nextCursorPosition) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tjumpToPosition: p.nextCursorPosition,\n\n\t\t\t\t};\n\t\t\t})));\n\t\t}\n\n\t\t// Mirror the cursor position. Allows the gutter arrow to point in the correct direction.\n\t\tthis._register(autorun((reader) => {\n\t\t\tif (!this._properties.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cursorPosition = this._parentEditorObs.cursorPosition.read(reader);\n\t\t\tif (cursorPosition) {\n\t\t\t\tthis.previewEditor.setPosition(this._previewTextModel.validatePosition(cursorPosition), 'longDistanceHintPreview');\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst state = this._state.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Ensure there is enough space to the left of the line number for the gutter indicator to fits.\n\t\t\tconst lineNumberDigets = state.visibleLineRange.startLineNumber.toString().length;\n\t\t\tthis.previewEditor.updateOptions({ lineNumbersMinChars: lineNumberDigets + 1 });\n\t\t}));\n\n\t\tthis._register(this._instantiationService.createInstance(\n\t\t\tInlineEditsGutterIndicator,\n\t\t\tthis._previewEditorObs,\n\t\t\tderived(reader => {\n\t\t\t\tconst state = this._state.read(reader);\n\t\t\t\tif (!state) { return undefined; }\n\t\t\t\tconst props = this._properties.read(reader);\n\t\t\t\tif (!props) { return undefined; }\n\t\t\t\treturn new InlineEditsGutterIndicatorData(\n\t\t\t\t\tprops.inlineSuggestInfo,\n\t\t\t\t\tLineRange.ofLength(state.visibleLineRange.startLineNumber, 1),\n\t\t\t\t\tprops.model,\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis._tabAction,\n\t\t\tconstObservable(0),\n\t\t\tconstObservable(false),\n\t\t\tobservableValue(this, false),\n\t\t));\n\n\t\tthis.updatePreviewEditorEffect.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _state = derived(this, reader => {\n\t\tconst props = this._properties.read(reader);\n\t\tif (!props) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet mode: 'original' | 'modified';\n\t\tlet visibleRange: LineRange;\n\n\t\tif (props.nextCursorPosition !== null) {\n\t\t\tmode = 'original';\n\t\t\tvisibleRange = LineRange.ofLength(props.nextCursorPosition.lineNumber, 1);\n\t\t} else {\n\t\t\tif (props.diff[0].innerChanges?.every(c => c.modifiedRange.isEmpty())) {\n\t\t\t\tmode = 'original';\n\t\t\t\tvisibleRange = LineRange.ofLength(props.diff[0].original.startLineNumber, 1);\n\t\t\t} else {\n\t\t\t\tmode = 'modified';\n\t\t\t\tvisibleRange = LineRange.ofLength(props.diff[0].modified.startLineNumber, 1);\n\t\t\t}\n\t\t}\n\n\t\tconst textModel = mode === 'original' ? this._parentEditorObs.model.read(reader) : this._previewTextModel;\n\t\treturn {\n\t\t\tmode,\n\t\t\tvisibleLineRange: visibleRange,\n\t\t\ttextModel,\n\t\t\tdiff: props.diff,\n\t\t};\n\t});\n\n\tprivate _createPreviewEditor() {\n\t\treturn this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis._previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'on',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\t\t\t\teditContext: false, // is a bit faster\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\t//folding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\t//lineDecorationsWidth: 0,\n\t\t\t\t//lineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._parentEditor\n\t\t);\n\t}\n\n\tpublic readonly updatePreviewEditorEffect = derived(this, reader => {\n\t\t// this._widgetContent.readEffect(reader);\n\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\tconst range = this._state.read(reader)?.visibleLineRange;\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tconst hiddenAreas: Range[] = [];\n\t\tif (range.startLineNumber > 1) {\n\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t}\n\t\tif (range.endLineNumberExclusive < this._previewTextModel.getLineCount() + 1) {\n\t\t\thiddenAreas.push(new Range(range.endLineNumberExclusive, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t}\n\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\t});\n\n\tpublic readonly horizontalContentRangeInPreviewEditorToShow = derived(this, reader => {\n\t\treturn this._getHorizontalContentRangeInPreviewEditorToShow(this.previewEditor, reader);\n\t});\n\n\tpublic readonly contentHeight = derived(this, (reader) => {\n\t\tconst viewState = this._state.read(reader);\n\t\tif (!viewState) {\n\t\t\treturn constObservable(null);\n\t\t}\n\n\t\tconst previewEditorHeight = this._previewEditorObs.observeLineHeightForLine(viewState.visibleLineRange.startLineNumber);\n\t\treturn previewEditorHeight;\n\t}).flatten();\n\n\tprivate _getHorizontalContentRangeInPreviewEditorToShow(editor: ICodeEditor, reader: IReader) {\n\t\tconst state = this._state.read(reader);\n\t\tif (!state) { return undefined; }\n\n\t\tconst diff = state.diff;\n\t\tconst jumpToPos = this._properties.read(reader)?.nextCursorPosition;\n\n\t\tconst visibleRange = state.visibleLineRange;\n\t\tconst l = this._previewEditorObs.layoutInfo.read(reader);\n\t\tconst trueContentWidth = maxContentWidthInRange(this._previewEditorObs, visibleRange, reader);\n\n\t\tlet firstCharacterChange: Range;\n\t\tif (jumpToPos) {\n\t\t\tfirstCharacterChange = Range.fromPositions(jumpToPos);\n\t\t} else if (diff[0].innerChanges) {\n\t\t\tfirstCharacterChange = state.mode === 'modified' ? diff[0].innerChanges[0].modifiedRange : diff[0].innerChanges[0].originalRange;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\n\n\t\t// find the horizontal range we want to show.\n\t\tconst preferredRange = growUntilVariableBoundaries(editor.getModel()!, firstCharacterChange, 5);\n\t\tconst leftOffset = this._previewEditorObs.getLeftOfPosition(preferredRange.getStartPosition(), reader);\n\t\tconst rightOffset = this._previewEditorObs.getLeftOfPosition(preferredRange.getEndPosition(), reader);\n\n\t\tconst left = clamp(leftOffset, 0, trueContentWidth);\n\t\tconst right = clamp(rightOffset, left, trueContentWidth);\n\n\t\tconst indentCol = editor.getModel()!.getLineFirstNonWhitespaceColumn(preferredRange.startLineNumber);\n\t\tconst indentationEnd = this._previewEditorObs.getLeftOfPosition(new Position(preferredRange.startLineNumber, indentCol), reader);\n\n\t\tconst preferredRangeToReveal = new OffsetRange(left, right);\n\n\t\treturn {\n\t\t\tindentationEnd,\n\t\t\tpreferredRangeToReveal,\n\t\t\tmaxEditorWidth: trueContentWidth + l.contentLeft,\n\t\t\tcontentWidth: trueContentWidth,\n\t\t\tnonContentWidth: l.contentLeft, // Width of area that is not content\n\t\t};\n\t}\n\n\tpublic layout(dimension: IDimension, desiredPreviewEditorScrollLeft: number): void {\n\t\tthis.previewEditor.layout(dimension);\n\t\tthis._previewEditorObs.editor.setScrollLeft(desiredPreviewEditorScrollLeft);\n\t}\n\n\tprivate readonly _editorDecorations = derived(this, reader => {\n\t\tconst state = this._state.read(reader);\n\t\tif (!state) { return undefined; }\n\n\t\tconst diff = {\n\t\t\tmode: 'insertionInline' as const,\n\t\t\tdiff: state.diff,\n\t\t};\n\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\tdescription: 'char-delete',\n\t\t\tisWholeLine: false,\n\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t});\n\n\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tisWholeLine: true,\n\t\t});\n\n\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\tdescription: 'char-insert',\n\t\t\tshouldFillLineOnLineBreak: true,\n\t\t});\n\n\t\tconst hideEmptyInnerDecorations = true; // diff.mode === 'lineReplacement';\n\t\tfor (const m of diff.diff) {\n\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t}\n\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t// i.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\toptions: diffAddDecoration\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { originalDecorations, modifiedDecorations };\n\t});\n}\n\n/*\n * Grows the range on each ends until it includes a none-variable-name character\n * or the next character would be a whitespace character\n * or the maxGrow limit is reached\n */\nfunction growUntilVariableBoundaries(textModel: ITextModel, range: Range, maxGrow: number): Range {\n\tconst startPosition = range.getStartPosition();\n\tconst endPosition = range.getEndPosition();\n\tconst line = textModel.getLineContent(startPosition.lineNumber);\n\n\tfunction isVariableNameCharacter(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn (/[a-zA-Z0-9_]/).test(char);\n\t}\n\n\tfunction isWhitespace(col: number): boolean {\n\t\tconst char = line.charAt(col - 1);\n\t\treturn char === ' ' || char === '\\t';\n\t}\n\n\tlet startColumn = startPosition.column;\n\twhile (startColumn > 1 && isVariableNameCharacter(startColumn) && !isWhitespace(startColumn - 1) && startPosition.column - startColumn < maxGrow) {\n\t\tstartColumn--;\n\t}\n\n\tlet endColumn = endPosition.column - 1;\n\twhile (endColumn <= line.length && isVariableNameCharacter(endColumn) && !isWhitespace(endColumn + 1) && endColumn - endPosition.column < maxGrow) {\n\t\tendColumn++;\n\t}\n\n\treturn new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endColumn + 1);\n}\n"]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { derived } from '../../../../../../../../base/common/observable.js';
|
|
6
|
+
import { Size2D } from '../../../../../../../common/core/2d/size.js';
|
|
7
|
+
import { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';
|
|
8
|
+
import { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';
|
|
9
|
+
import { getMaxTowerHeightInAvailableArea } from '../../utils/towersLayout.js';
|
|
10
|
+
/**
|
|
11
|
+
* Context for computing widget placement within a continuous line range.
|
|
12
|
+
*/
|
|
13
|
+
export class WidgetPlacementContext {
|
|
14
|
+
constructor(_lineRangeInfo, editorTrueContentWidth, endOfLinePadding) {
|
|
15
|
+
this._lineRangeInfo = _lineRangeInfo;
|
|
16
|
+
this.availableSpaceSizes = _lineRangeInfo.sizes.map((s, idx) => {
|
|
17
|
+
const lineNumber = _lineRangeInfo.lineRange.startLineNumber + idx;
|
|
18
|
+
const linePaddingLeft = endOfLinePadding(lineNumber);
|
|
19
|
+
return new Size2D(Math.max(0, editorTrueContentWidth - s.width - linePaddingLeft), s.height);
|
|
20
|
+
});
|
|
21
|
+
this.availableSpaceHeightPrefixSums = getSums(this.availableSpaceSizes, s => s.height);
|
|
22
|
+
this.availableSpaceSizesTransposed = this.availableSpaceSizes.map(s => s.transpose());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Computes the vertical outline for a widget placed at the given line number.
|
|
26
|
+
*/
|
|
27
|
+
getWidgetVerticalOutline(lineNumber, previewEditorHeight, layoutConstants) {
|
|
28
|
+
const sizeIdx = lineNumber - this._lineRangeInfo.lineRange.startLineNumber;
|
|
29
|
+
const top = this._lineRangeInfo.top + this.availableSpaceHeightPrefixSums[sizeIdx];
|
|
30
|
+
const editorRange = OffsetRange.ofStartAndLength(top, previewEditorHeight);
|
|
31
|
+
const { previewEditorMargin, widgetPadding, widgetBorder, lowerBarHeight } = layoutConstants;
|
|
32
|
+
const verticalWidgetRange = editorRange.withMargin(previewEditorMargin + widgetPadding + widgetBorder).withMargin(0, lowerBarHeight);
|
|
33
|
+
return verticalWidgetRange;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Tries to find a valid widget outline within this line range context.
|
|
37
|
+
*/
|
|
38
|
+
tryFindWidgetOutline(targetLineNumber, previewEditorHeight, editorTrueContentRight, layoutConstants) {
|
|
39
|
+
if (this._lineRangeInfo.lineRange.length < 3) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
return findFirstMinimzeDistance(this._lineRangeInfo.lineRange.addMargin(-1, -1), targetLineNumber, lineNumber => {
|
|
43
|
+
const verticalWidgetRange = this.getWidgetVerticalOutline(lineNumber, previewEditorHeight, layoutConstants);
|
|
44
|
+
const maxWidth = getMaxTowerHeightInAvailableArea(verticalWidgetRange.delta(-this._lineRangeInfo.top), this.availableSpaceSizesTransposed);
|
|
45
|
+
if (maxWidth < layoutConstants.minWidgetWidth) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const horizontalWidgetRange = OffsetRange.ofStartAndLength(editorTrueContentRight - maxWidth, maxWidth);
|
|
49
|
+
return { horizontalWidgetRange, verticalWidgetRange };
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Splits line size information into continuous ranges, breaking at positions where
|
|
55
|
+
* the expected vertical position differs from the actual position (e.g., due to folded regions).
|
|
56
|
+
*/
|
|
57
|
+
export function splitIntoContinuousLineRanges(lineRange, sizes, top, editorObs, reader) {
|
|
58
|
+
const result = [];
|
|
59
|
+
let currentRangeStart = lineRange.startLineNumber;
|
|
60
|
+
let currentRangeTop = top;
|
|
61
|
+
let currentSizes = [];
|
|
62
|
+
for (let i = 0; i < sizes.length; i++) {
|
|
63
|
+
const lineNumber = lineRange.startLineNumber + i;
|
|
64
|
+
const expectedTop = currentRangeTop + currentSizes.reduce((p, c) => p + c.height, 0);
|
|
65
|
+
const actualTop = editorObs.editor.getTopForLineNumber(lineNumber);
|
|
66
|
+
if (i > 0 && actualTop !== expectedTop) {
|
|
67
|
+
// Discontinuity detected - push the current range and start a new one
|
|
68
|
+
result.push({
|
|
69
|
+
lineRange: LineRange.ofLength(currentRangeStart, lineNumber - currentRangeStart),
|
|
70
|
+
top: currentRangeTop,
|
|
71
|
+
sizes: currentSizes,
|
|
72
|
+
});
|
|
73
|
+
currentRangeStart = lineNumber;
|
|
74
|
+
currentRangeTop = actualTop;
|
|
75
|
+
currentSizes = [];
|
|
76
|
+
}
|
|
77
|
+
currentSizes.push(sizes[i]);
|
|
78
|
+
}
|
|
79
|
+
// Push the final range
|
|
80
|
+
result.push({
|
|
81
|
+
lineRange: LineRange.ofLength(currentRangeStart, lineRange.endLineNumberExclusive - currentRangeStart),
|
|
82
|
+
top: currentRangeTop,
|
|
83
|
+
sizes: currentSizes,
|
|
84
|
+
});
|
|
85
|
+
// Don't observe each line individually for performance reasons
|
|
86
|
+
derived({ owner: 'splitIntoContinuousLineRanges' }, r => {
|
|
87
|
+
return editorObs.observeTopForLineNumber(lineRange.endLineNumberExclusive - 1).read(r);
|
|
88
|
+
}).read(reader);
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
function findFirstMinimzeDistance(range, targetLine, predicate) {
|
|
92
|
+
for (let offset = 0;; offset++) {
|
|
93
|
+
const down = targetLine + offset;
|
|
94
|
+
if (down <= range.endLineNumberExclusive) {
|
|
95
|
+
const result = predicate(down);
|
|
96
|
+
if (result !== undefined) {
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const up = targetLine - offset;
|
|
101
|
+
if (up >= range.startLineNumber) {
|
|
102
|
+
const result = predicate(up);
|
|
103
|
+
if (result !== undefined) {
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (up < range.startLineNumber && down > range.endLineNumberExclusive) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function getSums(array, fn) {
|
|
113
|
+
const result = [0];
|
|
114
|
+
let sum = 0;
|
|
115
|
+
for (const item of array) {
|
|
116
|
+
sum += fn(item);
|
|
117
|
+
result.push(sum);
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=longDistnaceWidgetPlacement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.ts"],"names":[],"mappings":"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","file":"longDistnaceWidgetPlacement.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 { derived, IReader } from '../../../../../../../../base/common/observable.js';\nimport { ObservableCodeEditor } from '../../../../../../../browser/observableCodeEditor.js';\nimport { Size2D } from '../../../../../../../common/core/2d/size.js';\nimport { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';\nimport { getMaxTowerHeightInAvailableArea } from '../../utils/towersLayout.js';\n\n/**\n * Layout constants used for the long-distance hint widget.\n */\nexport interface WidgetLayoutConstants {\n\treadonly previewEditorMargin: number;\n\treadonly widgetPadding: number;\n\treadonly widgetBorder: number;\n\treadonly lowerBarHeight: number;\n\treadonly minWidgetWidth: number;\n}\n/**\n * Represents a widget placement outline with horizontal and vertical ranges.\n */\nexport interface WidgetOutline {\n\treadonly horizontalWidgetRange: OffsetRange;\n\treadonly verticalWidgetRange: OffsetRange;\n}\n/**\n * Represents a continuous range of lines with their sizes and positioning.\n * Used to compute available space for widget placement.\n */\nexport interface ContinuousLineSizes {\n\treadonly lineRange: LineRange;\n\treadonly top: number;\n\treadonly sizes: Size2D[];\n}\n/**\n * Context for computing widget placement within a continuous line range.\n */\nexport class WidgetPlacementContext {\n\tpublic readonly availableSpaceSizes: Size2D[];\n\tpublic readonly availableSpaceHeightPrefixSums: number[];\n\tpublic readonly availableSpaceSizesTransposed: Size2D[];\n\n\tconstructor(\n\t\tprivate readonly _lineRangeInfo: ContinuousLineSizes,\n\t\teditorTrueContentWidth: number,\n\t\tendOfLinePadding: (lineNumber: number) => number,\n\t) {\n\t\tthis.availableSpaceSizes = _lineRangeInfo.sizes.map((s, idx) => {\n\t\t\tconst lineNumber = _lineRangeInfo.lineRange.startLineNumber + idx;\n\t\t\tconst linePaddingLeft = endOfLinePadding(lineNumber);\n\t\t\treturn new Size2D(Math.max(0, editorTrueContentWidth - s.width - linePaddingLeft), s.height);\n\t\t});\n\n\t\tthis.availableSpaceHeightPrefixSums = getSums(this.availableSpaceSizes, s => s.height);\n\t\tthis.availableSpaceSizesTransposed = this.availableSpaceSizes.map(s => s.transpose());\n\t}\n\n\t/**\n\t * Computes the vertical outline for a widget placed at the given line number.\n\t */\n\tpublic getWidgetVerticalOutline(\n\t\tlineNumber: number,\n\t\tpreviewEditorHeight: number,\n\t\tlayoutConstants: WidgetLayoutConstants\n\t): OffsetRange {\n\t\tconst sizeIdx = lineNumber - this._lineRangeInfo.lineRange.startLineNumber;\n\t\tconst top = this._lineRangeInfo.top + this.availableSpaceHeightPrefixSums[sizeIdx];\n\t\tconst editorRange = OffsetRange.ofStartAndLength(top, previewEditorHeight);\n\t\tconst { previewEditorMargin, widgetPadding, widgetBorder, lowerBarHeight } = layoutConstants;\n\t\tconst verticalWidgetRange = editorRange.withMargin(previewEditorMargin + widgetPadding + widgetBorder).withMargin(0, lowerBarHeight);\n\t\treturn verticalWidgetRange;\n\t}\n\n\t/**\n\t * Tries to find a valid widget outline within this line range context.\n\t */\n\tpublic tryFindWidgetOutline(\n\t\ttargetLineNumber: number,\n\t\tpreviewEditorHeight: number,\n\t\teditorTrueContentRight: number,\n\t\tlayoutConstants: WidgetLayoutConstants\n\t): WidgetOutline | undefined {\n\t\tif (this._lineRangeInfo.lineRange.length < 3) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn findFirstMinimzeDistance(\n\t\t\tthis._lineRangeInfo.lineRange.addMargin(-1, -1),\n\t\t\ttargetLineNumber,\n\t\t\tlineNumber => {\n\t\t\t\tconst verticalWidgetRange = this.getWidgetVerticalOutline(lineNumber, previewEditorHeight, layoutConstants);\n\t\t\t\tconst maxWidth = getMaxTowerHeightInAvailableArea(\n\t\t\t\t\tverticalWidgetRange.delta(-this._lineRangeInfo.top),\n\t\t\t\t\tthis.availableSpaceSizesTransposed\n\t\t\t\t);\n\t\t\t\tif (maxWidth < layoutConstants.minWidgetWidth) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst horizontalWidgetRange = OffsetRange.ofStartAndLength(editorTrueContentRight - maxWidth, maxWidth);\n\t\t\t\treturn { horizontalWidgetRange, verticalWidgetRange };\n\t\t\t}\n\t\t);\n\t}\n}\n/**\n * Splits line size information into continuous ranges, breaking at positions where\n * the expected vertical position differs from the actual position (e.g., due to folded regions).\n */\nexport function splitIntoContinuousLineRanges(\n\tlineRange: LineRange,\n\tsizes: Size2D[],\n\ttop: number,\n\teditorObs: ObservableCodeEditor,\n\treader: IReader,\n): ContinuousLineSizes[] {\n\tconst result: ContinuousLineSizes[] = [];\n\tlet currentRangeStart = lineRange.startLineNumber;\n\tlet currentRangeTop = top;\n\tlet currentSizes: Size2D[] = [];\n\n\tfor (let i = 0; i < sizes.length; i++) {\n\t\tconst lineNumber = lineRange.startLineNumber + i;\n\t\tconst expectedTop = currentRangeTop + currentSizes.reduce((p, c) => p + c.height, 0);\n\t\tconst actualTop = editorObs.editor.getTopForLineNumber(lineNumber);\n\n\t\tif (i > 0 && actualTop !== expectedTop) {\n\t\t\t// Discontinuity detected - push the current range and start a new one\n\t\t\tresult.push({\n\t\t\t\tlineRange: LineRange.ofLength(currentRangeStart, lineNumber - currentRangeStart),\n\t\t\t\ttop: currentRangeTop,\n\t\t\t\tsizes: currentSizes,\n\t\t\t});\n\t\t\tcurrentRangeStart = lineNumber;\n\t\t\tcurrentRangeTop = actualTop;\n\t\t\tcurrentSizes = [];\n\t\t}\n\t\tcurrentSizes.push(sizes[i]);\n\t}\n\n\t// Push the final range\n\tresult.push({\n\t\tlineRange: LineRange.ofLength(currentRangeStart, lineRange.endLineNumberExclusive - currentRangeStart),\n\t\ttop: currentRangeTop,\n\t\tsizes: currentSizes,\n\t});\n\n\t// Don't observe each line individually for performance reasons\n\tderived({ owner: 'splitIntoContinuousLineRanges' }, r => {\n\t\treturn editorObs.observeTopForLineNumber(lineRange.endLineNumberExclusive - 1).read(r);\n\t}).read(reader);\n\n\treturn result;\n}\n\nfunction findFirstMinimzeDistance<T>(range: LineRange, targetLine: number, predicate: (lineNumber: number) => T | undefined): T | undefined {\n\tfor (let offset = 0; ; offset++) {\n\t\tconst down = targetLine + offset;\n\t\tif (down <= range.endLineNumberExclusive) {\n\t\t\tconst result = predicate(down);\n\t\t\tif (result !== undefined) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tconst up = targetLine - offset;\n\t\tif (up >= range.startLineNumber) {\n\t\t\tconst result = predicate(up);\n\t\t\tif (result !== undefined) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tif (up < range.startLineNumber && down > range.endLineNumberExclusive) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nfunction getSums<T>(array: T[], fn: (item: T) => number): number[] {\n\tconst result: number[] = [0];\n\tlet sum = 0;\n\tfor (const item of array) {\n\t\tsum += fn(item);\n\t\tresult.push(sum);\n\t}\n\treturn result;\n}\n","/*---------------------------------------------------------------------------------------------\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 { derived, IReader } from '../../../../../../../../base/common/observable.js';\nimport { ObservableCodeEditor } from '../../../../../../../browser/observableCodeEditor.js';\nimport { Size2D } from '../../../../../../../common/core/2d/size.js';\nimport { LineRange } from '../../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../../common/core/ranges/offsetRange.js';\nimport { getMaxTowerHeightInAvailableArea } from '../../utils/towersLayout.js';\n\n/**\n * Layout constants used for the long-distance hint widget.\n */\nexport interface WidgetLayoutConstants {\n\treadonly previewEditorMargin: number;\n\treadonly widgetPadding: number;\n\treadonly widgetBorder: number;\n\treadonly lowerBarHeight: number;\n\treadonly minWidgetWidth: number;\n}\n/**\n * Represents a widget placement outline with horizontal and vertical ranges.\n */\nexport interface WidgetOutline {\n\treadonly horizontalWidgetRange: OffsetRange;\n\treadonly verticalWidgetRange: OffsetRange;\n}\n/**\n * Represents a continuous range of lines with their sizes and positioning.\n * Used to compute available space for widget placement.\n */\nexport interface ContinuousLineSizes {\n\treadonly lineRange: LineRange;\n\treadonly top: number;\n\treadonly sizes: Size2D[];\n}\n/**\n * Context for computing widget placement within a continuous line range.\n */\nexport class WidgetPlacementContext {\n\tpublic readonly availableSpaceSizes: Size2D[];\n\tpublic readonly availableSpaceHeightPrefixSums: number[];\n\tpublic readonly availableSpaceSizesTransposed: Size2D[];\n\n\tconstructor(\n\t\tprivate readonly _lineRangeInfo: ContinuousLineSizes,\n\t\teditorTrueContentWidth: number,\n\t\tendOfLinePadding: (lineNumber: number) => number,\n\t) {\n\t\tthis.availableSpaceSizes = _lineRangeInfo.sizes.map((s, idx) => {\n\t\t\tconst lineNumber = _lineRangeInfo.lineRange.startLineNumber + idx;\n\t\t\tconst linePaddingLeft = endOfLinePadding(lineNumber);\n\t\t\treturn new Size2D(Math.max(0, editorTrueContentWidth - s.width - linePaddingLeft), s.height);\n\t\t});\n\n\t\tthis.availableSpaceHeightPrefixSums = getSums(this.availableSpaceSizes, s => s.height);\n\t\tthis.availableSpaceSizesTransposed = this.availableSpaceSizes.map(s => s.transpose());\n\t}\n\n\t/**\n\t * Computes the vertical outline for a widget placed at the given line number.\n\t */\n\tpublic getWidgetVerticalOutline(\n\t\tlineNumber: number,\n\t\tpreviewEditorHeight: number,\n\t\tlayoutConstants: WidgetLayoutConstants\n\t): OffsetRange {\n\t\tconst sizeIdx = lineNumber - this._lineRangeInfo.lineRange.startLineNumber;\n\t\tconst top = this._lineRangeInfo.top + this.availableSpaceHeightPrefixSums[sizeIdx];\n\t\tconst editorRange = OffsetRange.ofStartAndLength(top, previewEditorHeight);\n\t\tconst { previewEditorMargin, widgetPadding, widgetBorder, lowerBarHeight } = layoutConstants;\n\t\tconst verticalWidgetRange = editorRange.withMargin(previewEditorMargin + widgetPadding + widgetBorder).withMargin(0, lowerBarHeight);\n\t\treturn verticalWidgetRange;\n\t}\n\n\t/**\n\t * Tries to find a valid widget outline within this line range context.\n\t */\n\tpublic tryFindWidgetOutline(\n\t\ttargetLineNumber: number,\n\t\tpreviewEditorHeight: number,\n\t\teditorTrueContentRight: number,\n\t\tlayoutConstants: WidgetLayoutConstants\n\t): WidgetOutline | undefined {\n\t\tif (this._lineRangeInfo.lineRange.length < 3) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn findFirstMinimzeDistance(\n\t\t\tthis._lineRangeInfo.lineRange.addMargin(-1, -1),\n\t\t\ttargetLineNumber,\n\t\t\tlineNumber => {\n\t\t\t\tconst verticalWidgetRange = this.getWidgetVerticalOutline(lineNumber, previewEditorHeight, layoutConstants);\n\t\t\t\tconst maxWidth = getMaxTowerHeightInAvailableArea(\n\t\t\t\t\tverticalWidgetRange.delta(-this._lineRangeInfo.top),\n\t\t\t\t\tthis.availableSpaceSizesTransposed\n\t\t\t\t);\n\t\t\t\tif (maxWidth < layoutConstants.minWidgetWidth) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst horizontalWidgetRange = OffsetRange.ofStartAndLength(editorTrueContentRight - maxWidth, maxWidth);\n\t\t\t\treturn { horizontalWidgetRange, verticalWidgetRange };\n\t\t\t}\n\t\t);\n\t}\n}\n/**\n * Splits line size information into continuous ranges, breaking at positions where\n * the expected vertical position differs from the actual position (e.g., due to folded regions).\n */\nexport function splitIntoContinuousLineRanges(\n\tlineRange: LineRange,\n\tsizes: Size2D[],\n\ttop: number,\n\teditorObs: ObservableCodeEditor,\n\treader: IReader,\n): ContinuousLineSizes[] {\n\tconst result: ContinuousLineSizes[] = [];\n\tlet currentRangeStart = lineRange.startLineNumber;\n\tlet currentRangeTop = top;\n\tlet currentSizes: Size2D[] = [];\n\n\tfor (let i = 0; i < sizes.length; i++) {\n\t\tconst lineNumber = lineRange.startLineNumber + i;\n\t\tconst expectedTop = currentRangeTop + currentSizes.reduce((p, c) => p + c.height, 0);\n\t\tconst actualTop = editorObs.editor.getTopForLineNumber(lineNumber);\n\n\t\tif (i > 0 && actualTop !== expectedTop) {\n\t\t\t// Discontinuity detected - push the current range and start a new one\n\t\t\tresult.push({\n\t\t\t\tlineRange: LineRange.ofLength(currentRangeStart, lineNumber - currentRangeStart),\n\t\t\t\ttop: currentRangeTop,\n\t\t\t\tsizes: currentSizes,\n\t\t\t});\n\t\t\tcurrentRangeStart = lineNumber;\n\t\t\tcurrentRangeTop = actualTop;\n\t\t\tcurrentSizes = [];\n\t\t}\n\t\tcurrentSizes.push(sizes[i]);\n\t}\n\n\t// Push the final range\n\tresult.push({\n\t\tlineRange: LineRange.ofLength(currentRangeStart, lineRange.endLineNumberExclusive - currentRangeStart),\n\t\ttop: currentRangeTop,\n\t\tsizes: currentSizes,\n\t});\n\n\t// Don't observe each line individually for performance reasons\n\tderived({ owner: 'splitIntoContinuousLineRanges' }, r => {\n\t\treturn editorObs.observeTopForLineNumber(lineRange.endLineNumberExclusive - 1).read(r);\n\t}).read(reader);\n\n\treturn result;\n}\n\nfunction findFirstMinimzeDistance<T>(range: LineRange, targetLine: number, predicate: (lineNumber: number) => T | undefined): T | undefined {\n\tfor (let offset = 0; ; offset++) {\n\t\tconst down = targetLine + offset;\n\t\tif (down <= range.endLineNumberExclusive) {\n\t\t\tconst result = predicate(down);\n\t\t\tif (result !== undefined) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tconst up = targetLine - offset;\n\t\tif (up >= range.startLineNumber) {\n\t\t\tconst result = predicate(up);\n\t\t\tif (result !== undefined) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tif (up < range.startLineNumber && down > range.endLineNumberExclusive) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nfunction getSums<T>(array: T[], fn: (item: T) => number): number[] {\n\tconst result: number[] = [0];\n\tlet sum = 0;\n\tfor (const item of array) {\n\t\tsum += fn(item);\n\t\tresult.push(sum);\n\t}\n\treturn result;\n}\n"]}
|
|
@@ -11,6 +11,7 @@ import { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js
|
|
|
11
11
|
import { Range } from '../../../../../../common/core/range.js';
|
|
12
12
|
import { InjectedTextCursorStops } from '../../../../../../common/model.js';
|
|
13
13
|
import { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';
|
|
14
|
+
import { InlineEditClickEvent } from '../inlineEditsViewInterface.js';
|
|
14
15
|
import { classNames } from '../utils/utils.js';
|
|
15
16
|
export class OriginalEditorInlineDiffView extends Disposable {
|
|
16
17
|
constructor(_originalEditor, _state, _modifiedTextModel) {
|
|
@@ -187,7 +188,7 @@ export class OriginalEditorInlineDiffView extends Disposable {
|
|
|
187
188
|
}
|
|
188
189
|
const a = e.target.detail.injectedText?.options.attachedData;
|
|
189
190
|
if (a instanceof InlineEditAttachedData && a.owner === this) {
|
|
190
|
-
this._onDidClick.fire(e.event);
|
|
191
|
+
this._onDidClick.fire(new InlineEditClickEvent(e.event));
|
|
191
192
|
}
|
|
192
193
|
}));
|
|
193
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts"],"names":[],"mappings":"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","file":"originalEditorInlineDiffView.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 { IMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick;\n\treadonly onDidClick;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange(),\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\n}\n","/*---------------------------------------------------------------------------------------------\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 { IMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick;\n\treadonly onDidClick;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange(),\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts"],"names":[],"mappings":"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","file":"originalEditorInlineDiffView.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 { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView, InlineEditClickEvent } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick = this._register(new Emitter<InlineEditClickEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange(),\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(new InlineEditClickEvent(e.event));\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\n}\n","/*---------------------------------------------------------------------------------------------\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 { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView, InlineEditClickEvent } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick = this._register(new Emitter<InlineEditClickEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange(),\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(new InlineEditClickEvent(e.event));\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\n}\n"]}
|