monaco-editor-core 0.55.0 → 0.56.0-dev-20251121
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 +27 -8
- package/esm/vs/base/browser/dom.js +31 -34
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/dompurify/dompurify.js +0 -1
- package/esm/vs/base/browser/keyboardEvent.js +3 -3
- package/esm/vs/base/browser/keyboardEvent.js.map +1 -1
- package/esm/vs/base/browser/markdownRenderer.js +5 -2
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/pixelRatio.js +5 -5
- package/esm/vs/base/browser/pixelRatio.js.map +1 -1
- package/esm/vs/base/browser/trustedTypes.js +1 -1
- package/esm/vs/base/browser/trustedTypes.js.map +1 -1
- package/esm/vs/base/browser/ui/actionbar/actionbar.js +3 -0
- package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +7 -0
- package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js.map +1 -1
- package/esm/vs/base/browser/ui/hover/hoverWidget.css +0 -13
- package/esm/vs/base/browser/ui/inputbox/inputBox.js +7 -0
- package/esm/vs/base/browser/ui/inputbox/inputBox.js.map +1 -1
- package/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.css +4 -2
- package/esm/vs/base/browser/ui/list/listView.js +7 -2
- package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
- package/esm/vs/base/browser/ui/selectBox/selectBox.js +4 -0
- package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.css +12 -32
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +8 -18
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +41 -14
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/abstractTree.js +11 -0
- package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js +1 -0
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/dataTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/objectTreeModel.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
- package/esm/vs/base/common/arrays.js +10 -0
- package/esm/vs/base/common/arrays.js.map +1 -1
- package/esm/vs/base/common/async.js +34 -0
- package/esm/vs/base/common/async.js.map +1 -1
- package/esm/vs/base/common/buffer.js +1 -1
- package/esm/vs/base/common/buffer.js.map +1 -1
- package/esm/vs/base/common/cancellation.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +3 -0
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/collections.js.map +1 -1
- package/esm/vs/base/common/equals.js.map +1 -1
- package/esm/vs/base/common/event.js +32 -15
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/filters.js +22 -3
- package/esm/vs/base/common/filters.js.map +1 -1
- package/esm/vs/base/common/hotReload.js +2 -2
- package/esm/vs/base/common/hotReload.js.map +1 -1
- package/esm/vs/base/common/iterator.js +1 -1
- package/esm/vs/base/common/iterator.js.map +1 -1
- package/esm/vs/base/common/keyCodes.js +7 -6
- package/esm/vs/base/common/keyCodes.js.map +1 -1
- package/esm/vs/base/common/linkedList.js.map +1 -1
- package/esm/vs/base/common/map.js.map +1 -1
- package/esm/vs/base/common/marked/marked.js +0 -1
- package/esm/vs/base/common/network.js +26 -1
- package/esm/vs/base/common/network.js.map +1 -1
- package/esm/vs/base/common/normalization.js +19 -6
- package/esm/vs/base/common/normalization.js.map +1 -1
- package/esm/vs/base/common/observableInternal/debugLocation.js +1 -2
- package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
- package/esm/vs/base/common/observableInternal/debugName.js +0 -1
- package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
- package/esm/vs/base/common/observableInternal/index.js +4 -4
- package/esm/vs/base/common/observableInternal/index.js.map +1 -1
- package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js +38 -10
- package/esm/vs/base/common/observableInternal/logging/debugGetDependencyGraph.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/baseObservable.js +3 -3
- package/esm/vs/base/common/observableInternal/observables/baseObservable.js.map +1 -1
- package/esm/vs/base/common/observableInternal/utils/utils.js +46 -5
- package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
- package/esm/vs/base/common/path.js +1 -0
- package/esm/vs/base/common/path.js.map +1 -1
- package/esm/vs/base/common/strings.js +27 -19
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/editor/browser/config/elementSizeObserver.js +5 -5
- package/esm/vs/editor/browser/config/elementSizeObserver.js.map +1 -1
- package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
- package/esm/vs/editor/browser/config/migrateOptions.js +6 -0
- package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
- package/esm/vs/editor/browser/config/tabFocus.js +4 -2
- package/esm/vs/editor/browser/config/tabFocus.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -0
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/coreCommands.js +1 -2
- package/esm/vs/editor/browser/coreCommands.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +32 -1
- package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
- package/esm/vs/editor/browser/services/contribution.js +9 -0
- package/esm/vs/editor/browser/services/contribution.js.map +1 -0
- package/esm/vs/editor/browser/services/editorWorkerService.js +27 -14
- package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
- package/esm/vs/editor/browser/services/openerService.js +5 -1
- package/esm/vs/editor/browser/services/openerService.js.map +1 -1
- package/esm/vs/editor/browser/view/domLineBreaksComputer.js +1 -1
- package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
- package/esm/vs/editor/browser/view/renderingContext.js +1 -1
- package/esm/vs/editor/browser/view/renderingContext.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +10 -3
- package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +3 -4
- package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/minimap/minimap.js +1 -1
- package/esm/vs/editor/browser/viewParts/minimap/minimap.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +1 -1
- package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +4 -2
- package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/rulers/rulers.js +1 -3
- package/esm/vs/editor/browser/viewParts/rulers/rulers.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +1 -1
- package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js +2 -1
- package/esm/vs/editor/browser/viewParts/viewLines/domReadingContext.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +6 -18
- package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +0 -7
- package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +7 -2
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +1 -0
- package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js.map +1 -1
- package/esm/vs/editor/common/commands/replaceCommand.js +2 -2
- package/esm/vs/editor/common/commands/replaceCommand.js.map +1 -1
- package/esm/vs/editor/common/config/editorOptions.js +374 -360
- package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
- package/esm/vs/editor/common/core/2d/rect.js +7 -0
- package/esm/vs/editor/common/core/2d/rect.js.map +1 -1
- package/esm/vs/editor/common/core/2d/size.js +20 -0
- package/esm/vs/editor/common/core/2d/size.js.map +1 -0
- package/esm/vs/editor/common/core/editorColorRegistry.js +69 -68
- package/esm/vs/editor/common/core/editorColorRegistry.js.map +1 -1
- package/esm/vs/editor/common/core/ranges/offsetRange.js +9 -0
- package/esm/vs/editor/common/core/ranges/offsetRange.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/editorContextKeys.js +47 -47
- package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
- package/esm/vs/editor/common/languages.js +56 -56
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/editStack.js +1 -1
- package/esm/vs/editor/common/services/languagesAssociations.js +6 -8
- package/esm/vs/editor/common/services/languagesAssociations.js.map +1 -1
- package/esm/vs/editor/common/standaloneStrings.js +11 -10
- package/esm/vs/editor/common/standaloneStrings.js.map +1 -1
- package/esm/vs/editor/common/textModelEditSource.js +1 -1
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
- package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
- package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
- package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
- package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
- package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
- package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
- package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
- package/esm/vs/editor/contrib/codelens/browser/codelens.js.map +1 -1
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
- package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
- package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
- package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js +14 -0
- package/esm/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
- package/esm/vs/editor/contrib/find/browser/findController.js +17 -17
- package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
- package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
- package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
- package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
- package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
- package/esm/vs/editor/contrib/format/browser/format.js +21 -6
- package/esm/vs/editor/contrib/format/browser/format.js.map +1 -1
- package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
- package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
- package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
- package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
- package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
- package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
- package/esm/vs/editor/contrib/hover/browser/contentHoverController.js +5 -10
- package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +11 -6
- package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
- package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/hoverUtils.js +24 -0
- package/esm/vs/editor/contrib/hover/browser/hoverUtils.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +9 -9
- package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +20 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +12 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +18 -16
- 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/model/inlineCompletionsModel.js +42 -37
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +3 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +54 -43
- 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 +12 -12
- 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 +74 -48
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +8 -36
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js +10 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsNewUsers.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +105 -119
- 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.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +8 -36
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js +95 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +17 -9
- 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/longDistanceHint/inlineEditsLongDistanceHint.js +415 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +253 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js +103 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/flexBoxLayout.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js +32 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/towersLayout.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +44 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +181 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -0
- 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 -31
- 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/editorNavigationQuickAccess.js +2 -2
- package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js.map +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +18 -13
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js.map +1 -1
- 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 +12 -12
- 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/smartSelect/browser/smartSelect.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +8 -8
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +10 -10
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +29 -29
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
- 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 +4 -4
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +1 -1
- package/esm/vs/editor/editor.all.js +1 -0
- package/esm/vs/editor/editor.all.js.map +1 -1
- package/esm/vs/editor/editor.api.d.ts +9 -5
- package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js +22 -2
- package/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js.map +1 -1
- package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +39 -0
- package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -0
- package/esm/vs/editor/standalone/browser/standaloneEditor.js +2 -1
- package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js +3 -21
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneWebWorker.js +4 -4
- package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +7 -9
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
- package/esm/vs/platform/actions/browser/toolbar.js +2 -2
- package/esm/vs/platform/actions/common/actions.js +2 -0
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +2 -2
- package/esm/vs/platform/configuration/common/configuration.js +5 -4
- package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurationModels.js +21 -10
- package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
- package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +3 -3
- package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +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/contextview/browser/contextViewService.js.map +1 -1
- 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/keybinding/common/abstractKeybindingService.js +4 -4
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/list/browser/listService.js.map +1 -1
- package/esm/vs/platform/markers/common/markerService.js +2 -2
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +11 -32
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +9 -3
- package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +35 -14
- package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputList.js +4 -1
- package/esm/vs/platform/quickinput/browser/quickInputList.js.map +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/quickinput/browser/tree/quickInputTreeController.js +71 -40
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +21 -8
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
- package/esm/vs/platform/telemetry/common/gdprTypings.js.map +1 -1
- package/esm/vs/platform/telemetry/common/telemetry.js.map +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +17 -17
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/editorColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/miscColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
- package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js +12 -0
- package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js.map +1 -0
- package/esm/vs/platform/webWorker/browser/webWorkerService.js +7 -0
- package/esm/vs/platform/webWorker/browser/webWorkerService.js.map +1 -0
- package/esm/vs/{base/browser/webWorkerFactory.js → platform/webWorker/browser/webWorkerServiceImpl.js} +47 -66
- package/esm/vs/platform/webWorker/browser/webWorkerServiceImpl.js.map +1 -0
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +9 -5
- package/package.json +2 -2
- package/version.txt +1 -1
- package/esm/vs/base/browser/webWorkerFactory.js.map +0 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.js +0 -82
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { numberComparator } from '../../../../../../../base/common/arrays.js';
|
|
2
2
|
import { findFirstMin } from '../../../../../../../base/common/arraysFind.js';
|
|
3
|
-
import { DebugLocation, derived, derivedObservableWithCache, derivedOpts } from '../../../../../../../base/common/observable.js';
|
|
3
|
+
import { DebugLocation, derived, derivedObservableWithCache, derivedOpts, observableSignalFromEvent } from '../../../../../../../base/common/observable.js';
|
|
4
4
|
import { splitLines } from '../../../../../../../base/common/strings.js';
|
|
5
5
|
import { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';
|
|
6
6
|
import { Rect } from '../../../../../../common/core/2d/rect.js';
|
|
@@ -11,6 +11,7 @@ import { TextReplacement, TextEdit } from '../../../../../../common/core/edits/t
|
|
|
11
11
|
import { RangeMapping } from '../../../../../../common/diff/rangeMapping.js';
|
|
12
12
|
import { indentOfLine } from '../../../../../../common/model/textModel.js';
|
|
13
13
|
import { BugIndicatingError } from '../../../../../../../base/common/errors.js';
|
|
14
|
+
import { Size2D } from '../../../../../../common/core/2d/size.js';
|
|
14
15
|
export function maxContentWidthInRange(editor, range, reader) {
|
|
15
16
|
editor.layoutInfo.read(reader);
|
|
16
17
|
editor.value.read(reader);
|
|
@@ -20,6 +21,27 @@ export function maxContentWidthInRange(editor, range, reader) {
|
|
|
20
21
|
}
|
|
21
22
|
let maxContentWidth = 0;
|
|
22
23
|
editor.scrollTop.read(reader);
|
|
24
|
+
for (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {
|
|
25
|
+
const column = model.getLineMaxColumn(i);
|
|
26
|
+
const lineContentWidth = editor.getLeftOfPosition(new Position(i, column), reader);
|
|
27
|
+
maxContentWidth = Math.max(maxContentWidth, lineContentWidth);
|
|
28
|
+
}
|
|
29
|
+
const lines = range.mapToLineArray(l => model.getLineContent(l));
|
|
30
|
+
if (maxContentWidth < 5 && lines.some(l => l.length > 0) && model.uri.scheme !== 'file') {
|
|
31
|
+
console.error('unexpected width');
|
|
32
|
+
}
|
|
33
|
+
return maxContentWidth;
|
|
34
|
+
}
|
|
35
|
+
export function getContentSizeOfLines(editor, range, reader) {
|
|
36
|
+
editor.layoutInfo.read(reader);
|
|
37
|
+
editor.value.read(reader);
|
|
38
|
+
observableSignalFromEvent(editor, editor.editor.onDidChangeLineHeight).read(reader);
|
|
39
|
+
const model = editor.model.read(reader);
|
|
40
|
+
if (!model) {
|
|
41
|
+
throw new BugIndicatingError('Model is required');
|
|
42
|
+
}
|
|
43
|
+
const sizes = [];
|
|
44
|
+
editor.scrollTop.read(reader);
|
|
23
45
|
for (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {
|
|
24
46
|
const column = model.getLineMaxColumn(i);
|
|
25
47
|
let lineContentWidth = editor.editor.getOffsetForColumn(i, column);
|
|
@@ -29,13 +51,10 @@ export function maxContentWidthInRange(editor, range, reader) {
|
|
|
29
51
|
const approximation = column * typicalHalfwidthCharacterWidth;
|
|
30
52
|
lineContentWidth = approximation;
|
|
31
53
|
}
|
|
32
|
-
|
|
54
|
+
const height = editor.editor.getLineHeightForPosition(new Position(i, 1));
|
|
55
|
+
sizes.push(new Size2D(lineContentWidth, height));
|
|
33
56
|
}
|
|
34
|
-
|
|
35
|
-
if (maxContentWidth < 5 && lines.some(l => l.length > 0) && model.uri.scheme !== 'file') {
|
|
36
|
-
console.error('unexpected width');
|
|
37
|
-
}
|
|
38
|
-
return maxContentWidth;
|
|
57
|
+
return sizes;
|
|
39
58
|
}
|
|
40
59
|
export function getOffsetForPos(editor, pos, reader) {
|
|
41
60
|
editor.layoutInfo.read(reader);
|
|
@@ -195,10 +214,24 @@ export function mapOutFalsy(obs) {
|
|
|
195
214
|
}
|
|
196
215
|
export function rectToProps(fn, debugLocation = DebugLocation.ofCaller()) {
|
|
197
216
|
return {
|
|
198
|
-
left: derived({ name: 'editor.validOverlay.left' }, reader => /** @description left */ fn(reader)
|
|
199
|
-
top: derived({ name: 'editor.validOverlay.top' }, reader => /** @description top */ fn(reader)
|
|
200
|
-
width: derived({ name: 'editor.validOverlay.width' }, reader =>
|
|
201
|
-
|
|
217
|
+
left: derived({ name: 'editor.validOverlay.left' }, reader => /** @description left */ fn(reader)?.left, debugLocation),
|
|
218
|
+
top: derived({ name: 'editor.validOverlay.top' }, reader => /** @description top */ fn(reader)?.top, debugLocation),
|
|
219
|
+
width: derived({ name: 'editor.validOverlay.width' }, reader => {
|
|
220
|
+
/** @description width */
|
|
221
|
+
const val = fn(reader);
|
|
222
|
+
if (!val) {
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
return val.width;
|
|
226
|
+
}, debugLocation),
|
|
227
|
+
height: derived({ name: 'editor.validOverlay.height' }, reader => {
|
|
228
|
+
/** @description height */
|
|
229
|
+
const val = fn(reader);
|
|
230
|
+
if (!val) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
return val.height;
|
|
234
|
+
}, debugLocation),
|
|
202
235
|
};
|
|
203
236
|
}
|
|
204
237
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { numberComparator } from '../../../../../../../base/common/arrays.js';\nimport { findFirstMin } from '../../../../../../../base/common/arraysFind.js';\nimport { DebugLocation, derived, derivedObservableWithCache, derivedOpts, IObservable, IReader } from '../../../../../../../base/common/observable.js';\nimport { splitLines } from '../../../../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor, ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../../common/core/edits/textEdit.js';\nimport { RangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { indentOfLine } from '../../../../../../common/model/textModel.js';\nimport { CharCode } from '../../../../../../../base/common/charCode.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\n\nexport function maxContentWidthInRange(editor: ObservableCodeEditor, range: LineRange, reader: IReader | undefined): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\tlet maxContentWidth = 0;\n\n\teditor.scrollTop.read(reader);\n\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\tconst column = model.getLineMaxColumn(i);\n\t\tlet lineContentWidth = editor.editor.getOffsetForColumn(i, column);\n\t\tif (lineContentWidth === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = editor.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = column * typicalHalfwidthCharacterWidth;\n\t\t\tlineContentWidth = approximation;\n\t\t}\n\t\tmaxContentWidth = Math.max(maxContentWidth, lineContentWidth);\n\t}\n\tconst lines = range.mapToLineArray(l => model.getLineContent(l));\n\n\tif (maxContentWidth < 5 && lines.some(l => l.length > 0) && model.uri.scheme !== 'file') {\n\t\tconsole.error('unexpected width');\n\t}\n\treturn maxContentWidth;\n}\n\nexport function getOffsetForPos(editor: ObservableCodeEditor, pos: Position, reader: IReader): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\n\teditor.scrollTop.read(reader);\n\tconst lineContentWidth = editor.editor.getOffsetForColumn(pos.lineNumber, pos.column);\n\n\treturn lineContentWidth;\n}\n\nexport function getPrefixTrim(diffRanges: Range[], originalLinesRange: LineRange, modifiedLines: string[], editor: ICodeEditor, reader: IReader | undefined = undefined): { prefixTrim: number; prefixLeftOffset: number } {\n\tconst textModel = editor.getModel();\n\tif (!textModel) {\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\tconst replacementStart = diffRanges.map(r => r.isSingleLine() ? r.startColumn - 1 : 0);\n\tconst originalIndents = originalLinesRange.mapToLineArray(line => indentOfLine(textModel.getLineContent(line)));\n\tconst modifiedIndents = modifiedLines.filter(line => line !== '').map(line => indentOfLine(line));\n\tconst prefixTrim = Math.min(...replacementStart, ...originalIndents, ...modifiedIndents);\n\n\tlet prefixLeftOffset;\n\tconst startLineIndent = textModel.getLineIndentColumn(originalLinesRange.startLineNumber);\n\tif (startLineIndent >= prefixTrim + 1) {\n\t\t// We can use the editor to get the offset\n\t\t// TODO go through other usages of getOffsetForColumn and come up with a robust reactive solution to read it\n\t\tobservableCodeEditor(editor).scrollTop.read(reader); // getOffsetForColumn requires the line number to be visible. This might change on scroll top.\n\t\tprefixLeftOffset = editor.getOffsetForColumn(originalLinesRange.startLineNumber, prefixTrim + 1);\n\t} else if (modifiedLines.length > 0) {\n\t\t// Content is not in the editor, we can use the content width to calculate the offset\n\t\tprefixLeftOffset = getContentRenderWidth(modifiedLines[0].slice(0, prefixTrim), editor, textModel);\n\t} else {\n\t\t// unable to approximate the offset\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\treturn { prefixTrim, prefixLeftOffset };\n}\n\nexport function getContentRenderWidth(content: string, editor: ICodeEditor, textModel: ITextModel) {\n\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\tconst tabSize = textModel.getOptions().tabSize * w;\n\n\tconst numTabs = content.split('\\t').length - 1;\n\tconst numNoneTabs = content.length - numTabs;\n\treturn numNoneTabs * w + numTabs * tabSize;\n}\n\nexport function getEditorValidOverlayRect(editor: ObservableCodeEditor): IObservable<Rect> {\n\tconst contentLeft = editor.layoutInfoContentLeft;\n\n\tconst width = derived({ name: 'editor.validOverlay.width' }, r => {\n\t\tconst hasMinimapOnTheRight = editor.layoutInfoMinimap.read(r).minimapLeft !== 0;\n\t\tconst editorWidth = editor.layoutInfoWidth.read(r) - contentLeft.read(r);\n\n\t\tif (hasMinimapOnTheRight) {\n\t\t\tconst minimapAndScrollbarWidth = editor.layoutInfoMinimap.read(r).minimapWidth + editor.layoutInfoVerticalScrollbarWidth.read(r);\n\t\t\treturn editorWidth - minimapAndScrollbarWidth;\n\t\t}\n\n\t\treturn editorWidth;\n\t});\n\n\tconst height = derived({ name: 'editor.validOverlay.height' }, r => editor.layoutInfoHeight.read(r) + editor.contentHeight.read(r));\n\n\treturn derived({ name: 'editor.validOverlay' }, r => Rect.fromLeftTopWidthHeight(contentLeft.read(r), 0, width.read(r), height.read(r)));\n}\nexport function applyEditToModifiedRangeMappings(rangeMapping: RangeMapping[], edit: TextEdit): RangeMapping[] {\n\tconst updatedMappings: RangeMapping[] = [];\n\tfor (const m of rangeMapping) {\n\t\tconst updatedRange = edit.mapRange(m.modifiedRange);\n\t\tupdatedMappings.push(new RangeMapping(m.originalRange, updatedRange));\n\t}\n\treturn updatedMappings;\n}\n\n\nexport function classNames(...classes: (string | false | undefined | null)[]) {\n\treturn classes.filter(c => typeof c === 'string').join(' ');\n}\n\nfunction offsetRangeToRange(columnOffsetRange: OffsetRange, startPos: Position): Range {\n\treturn new Range(\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.start,\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.endExclusive,\n\t);\n}\n\n/**\n * Calculates the indentation size (in spaces) of a given line,\n * interpreting tabs as the specified tab size.\n */\nfunction getIndentationSize(line: string, tabSize: number): number {\n\tlet currentSize = 0;\n\tloop: for (let i = 0, len = line.length; i < len; i++) {\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: currentSize += tabSize; break;\n\t\t\tcase CharCode.Space: currentSize++; break;\n\t\t\tdefault: break loop;\n\t\t}\n\t}\n\t// if currentSize % tabSize !== 0,\n\t// then there are spaces which are not part of the indentation\n\treturn currentSize - (currentSize % tabSize);\n}\n\n/**\n * Calculates the number of characters at the start of a line that correspond to a given indentation size,\n * taking into account both tabs and spaces.\n */\nfunction indentSizeToIndentLength(line: string, indentSize: number, tabSize: number): number {\n\tlet remainingSize = indentSize - (indentSize % tabSize);\n\tlet i = 0;\n\tfor (; i < line.length; i++) {\n\t\tif (remainingSize === 0) {\n\t\t\tbreak;\n\t\t}\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: remainingSize -= tabSize; break;\n\t\t\tcase CharCode.Space: remainingSize--; break;\n\t\t\tdefault: throw new BugIndicatingError('Unexpected character found while calculating indent length');\n\t\t}\n\t}\n\treturn i;\n}\n\nexport function createReindentEdit(text: string, range: LineRange, tabSize: number): TextEdit {\n\tconst newLines = splitLines(text);\n\tconst edits: TextReplacement[] = [];\n\tconst minIndentSize = findFirstMin(range.mapToLineArray(l => getIndentationSize(newLines[l - 1], tabSize)), numberComparator)!;\n\trange.forEach(lineNumber => {\n\t\tconst indentLength = indentSizeToIndentLength(newLines[lineNumber - 1], minIndentSize, tabSize);\n\t\tedits.push(new TextReplacement(offsetRangeToRange(new OffsetRange(0, indentLength), new Position(lineNumber, 1)), ''));\n\t});\n\treturn new TextEdit(edits);\n}\n\nexport class PathBuilder {\n\tprivate _data: string = '';\n\n\tpublic moveTo(point: Point): this {\n\t\tthis._data += `M ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic lineTo(point: Point): this {\n\t\tthis._data += `L ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic build(): string {\n\t\treturn this._data;\n\t}\n}\n\ntype RemoveFalsy<T> = T extends false | undefined | null ? never : T;\ntype Falsy<T> = T extends false | undefined | null ? T : never;\n\nexport function mapOutFalsy<T>(obs: IObservable<T>): IObservable<IObservable<RemoveFalsy<T>> | Falsy<T>> {\n\tconst nonUndefinedObs = derivedObservableWithCache<T | undefined | null | false>(undefined, (reader, lastValue) => obs.read(reader) || lastValue);\n\n\treturn derivedOpts({\n\t\tdebugName: () => `${obs.debugName}.mapOutFalsy`\n\t}, reader => {\n\t\tnonUndefinedObs.read(reader);\n\t\tconst val = obs.read(reader);\n\t\tif (!val) {\n\t\t\treturn undefined as Falsy<T>;\n\t\t}\n\n\t\treturn nonUndefinedObs as IObservable<RemoveFalsy<T>>;\n\t});\n}\n\nexport function rectToProps(fn: (reader: IReader) => Rect, debugLocation: DebugLocation = DebugLocation.ofCaller()) {\n\treturn {\n\t\tleft: derived({ name: 'editor.validOverlay.left' }, reader => /** @description left */ fn(reader).left, debugLocation),\n\t\ttop: derived({ name: 'editor.validOverlay.top' }, reader => /** @description top */ fn(reader).top, debugLocation),\n\t\twidth: derived({ name: 'editor.validOverlay.width' }, reader => /** @description width */ fn(reader).right - fn(reader).left, debugLocation),\n\t\theight: derived({ name: 'editor.validOverlay.height' }, reader => /** @description height */ fn(reader).bottom - fn(reader).top, debugLocation),\n\t};\n}\n\nexport type FirstFnArg<T> = T extends (arg: infer U) => any ? U : never;\n","\nimport { numberComparator } from '../../../../../../../base/common/arrays.js';\nimport { findFirstMin } from '../../../../../../../base/common/arraysFind.js';\nimport { DebugLocation, derived, derivedObservableWithCache, derivedOpts, IObservable, IReader } from '../../../../../../../base/common/observable.js';\nimport { splitLines } from '../../../../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor, ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../../common/core/edits/textEdit.js';\nimport { RangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { indentOfLine } from '../../../../../../common/model/textModel.js';\nimport { CharCode } from '../../../../../../../base/common/charCode.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\n\nexport function maxContentWidthInRange(editor: ObservableCodeEditor, range: LineRange, reader: IReader | undefined): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\tlet maxContentWidth = 0;\n\n\teditor.scrollTop.read(reader);\n\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\tconst column = model.getLineMaxColumn(i);\n\t\tlet lineContentWidth = editor.editor.getOffsetForColumn(i, column);\n\t\tif (lineContentWidth === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = editor.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = column * typicalHalfwidthCharacterWidth;\n\t\t\tlineContentWidth = approximation;\n\t\t}\n\t\tmaxContentWidth = Math.max(maxContentWidth, lineContentWidth);\n\t}\n\tconst lines = range.mapToLineArray(l => model.getLineContent(l));\n\n\tif (maxContentWidth < 5 && lines.some(l => l.length > 0) && model.uri.scheme !== 'file') {\n\t\tconsole.error('unexpected width');\n\t}\n\treturn maxContentWidth;\n}\n\nexport function getOffsetForPos(editor: ObservableCodeEditor, pos: Position, reader: IReader): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\n\teditor.scrollTop.read(reader);\n\tconst lineContentWidth = editor.editor.getOffsetForColumn(pos.lineNumber, pos.column);\n\n\treturn lineContentWidth;\n}\n\nexport function getPrefixTrim(diffRanges: Range[], originalLinesRange: LineRange, modifiedLines: string[], editor: ICodeEditor, reader: IReader | undefined = undefined): { prefixTrim: number; prefixLeftOffset: number } {\n\tconst textModel = editor.getModel();\n\tif (!textModel) {\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\tconst replacementStart = diffRanges.map(r => r.isSingleLine() ? r.startColumn - 1 : 0);\n\tconst originalIndents = originalLinesRange.mapToLineArray(line => indentOfLine(textModel.getLineContent(line)));\n\tconst modifiedIndents = modifiedLines.filter(line => line !== '').map(line => indentOfLine(line));\n\tconst prefixTrim = Math.min(...replacementStart, ...originalIndents, ...modifiedIndents);\n\n\tlet prefixLeftOffset;\n\tconst startLineIndent = textModel.getLineIndentColumn(originalLinesRange.startLineNumber);\n\tif (startLineIndent >= prefixTrim + 1) {\n\t\t// We can use the editor to get the offset\n\t\t// TODO go through other usages of getOffsetForColumn and come up with a robust reactive solution to read it\n\t\tobservableCodeEditor(editor).scrollTop.read(reader); // getOffsetForColumn requires the line number to be visible. This might change on scroll top.\n\t\tprefixLeftOffset = editor.getOffsetForColumn(originalLinesRange.startLineNumber, prefixTrim + 1);\n\t} else if (modifiedLines.length > 0) {\n\t\t// Content is not in the editor, we can use the content width to calculate the offset\n\t\tprefixLeftOffset = getContentRenderWidth(modifiedLines[0].slice(0, prefixTrim), editor, textModel);\n\t} else {\n\t\t// unable to approximate the offset\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\treturn { prefixTrim, prefixLeftOffset };\n}\n\nexport function getContentRenderWidth(content: string, editor: ICodeEditor, textModel: ITextModel) {\n\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\tconst tabSize = textModel.getOptions().tabSize * w;\n\n\tconst numTabs = content.split('\\t').length - 1;\n\tconst numNoneTabs = content.length - numTabs;\n\treturn numNoneTabs * w + numTabs * tabSize;\n}\n\nexport function getEditorValidOverlayRect(editor: ObservableCodeEditor): IObservable<Rect> {\n\tconst contentLeft = editor.layoutInfoContentLeft;\n\n\tconst width = derived({ name: 'editor.validOverlay.width' }, r => {\n\t\tconst hasMinimapOnTheRight = editor.layoutInfoMinimap.read(r).minimapLeft !== 0;\n\t\tconst editorWidth = editor.layoutInfoWidth.read(r) - contentLeft.read(r);\n\n\t\tif (hasMinimapOnTheRight) {\n\t\t\tconst minimapAndScrollbarWidth = editor.layoutInfoMinimap.read(r).minimapWidth + editor.layoutInfoVerticalScrollbarWidth.read(r);\n\t\t\treturn editorWidth - minimapAndScrollbarWidth;\n\t\t}\n\n\t\treturn editorWidth;\n\t});\n\n\tconst height = derived({ name: 'editor.validOverlay.height' }, r => editor.layoutInfoHeight.read(r) + editor.contentHeight.read(r));\n\n\treturn derived({ name: 'editor.validOverlay' }, r => Rect.fromLeftTopWidthHeight(contentLeft.read(r), 0, width.read(r), height.read(r)));\n}\nexport function applyEditToModifiedRangeMappings(rangeMapping: RangeMapping[], edit: TextEdit): RangeMapping[] {\n\tconst updatedMappings: RangeMapping[] = [];\n\tfor (const m of rangeMapping) {\n\t\tconst updatedRange = edit.mapRange(m.modifiedRange);\n\t\tupdatedMappings.push(new RangeMapping(m.originalRange, updatedRange));\n\t}\n\treturn updatedMappings;\n}\n\n\nexport function classNames(...classes: (string | false | undefined | null)[]) {\n\treturn classes.filter(c => typeof c === 'string').join(' ');\n}\n\nfunction offsetRangeToRange(columnOffsetRange: OffsetRange, startPos: Position): Range {\n\treturn new Range(\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.start,\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.endExclusive,\n\t);\n}\n\n/**\n * Calculates the indentation size (in spaces) of a given line,\n * interpreting tabs as the specified tab size.\n */\nfunction getIndentationSize(line: string, tabSize: number): number {\n\tlet currentSize = 0;\n\tloop: for (let i = 0, len = line.length; i < len; i++) {\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: currentSize += tabSize; break;\n\t\t\tcase CharCode.Space: currentSize++; break;\n\t\t\tdefault: break loop;\n\t\t}\n\t}\n\t// if currentSize % tabSize !== 0,\n\t// then there are spaces which are not part of the indentation\n\treturn currentSize - (currentSize % tabSize);\n}\n\n/**\n * Calculates the number of characters at the start of a line that correspond to a given indentation size,\n * taking into account both tabs and spaces.\n */\nfunction indentSizeToIndentLength(line: string, indentSize: number, tabSize: number): number {\n\tlet remainingSize = indentSize - (indentSize % tabSize);\n\tlet i = 0;\n\tfor (; i < line.length; i++) {\n\t\tif (remainingSize === 0) {\n\t\t\tbreak;\n\t\t}\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: remainingSize -= tabSize; break;\n\t\t\tcase CharCode.Space: remainingSize--; break;\n\t\t\tdefault: throw new BugIndicatingError('Unexpected character found while calculating indent length');\n\t\t}\n\t}\n\treturn i;\n}\n\nexport function createReindentEdit(text: string, range: LineRange, tabSize: number): TextEdit {\n\tconst newLines = splitLines(text);\n\tconst edits: TextReplacement[] = [];\n\tconst minIndentSize = findFirstMin(range.mapToLineArray(l => getIndentationSize(newLines[l - 1], tabSize)), numberComparator)!;\n\trange.forEach(lineNumber => {\n\t\tconst indentLength = indentSizeToIndentLength(newLines[lineNumber - 1], minIndentSize, tabSize);\n\t\tedits.push(new TextReplacement(offsetRangeToRange(new OffsetRange(0, indentLength), new Position(lineNumber, 1)), ''));\n\t});\n\treturn new TextEdit(edits);\n}\n\nexport class PathBuilder {\n\tprivate _data: string = '';\n\n\tpublic moveTo(point: Point): this {\n\t\tthis._data += `M ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic lineTo(point: Point): this {\n\t\tthis._data += `L ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic build(): string {\n\t\treturn this._data;\n\t}\n}\n\ntype RemoveFalsy<T> = T extends false | undefined | null ? never : T;\ntype Falsy<T> = T extends false | undefined | null ? T : never;\n\nexport function mapOutFalsy<T>(obs: IObservable<T>): IObservable<IObservable<RemoveFalsy<T>> | Falsy<T>> {\n\tconst nonUndefinedObs = derivedObservableWithCache<T | undefined | null | false>(undefined, (reader, lastValue) => obs.read(reader) || lastValue);\n\n\treturn derivedOpts({\n\t\tdebugName: () => `${obs.debugName}.mapOutFalsy`\n\t}, reader => {\n\t\tnonUndefinedObs.read(reader);\n\t\tconst val = obs.read(reader);\n\t\tif (!val) {\n\t\t\treturn undefined as Falsy<T>;\n\t\t}\n\n\t\treturn nonUndefinedObs as IObservable<RemoveFalsy<T>>;\n\t});\n}\n\nexport function rectToProps(fn: (reader: IReader) => Rect, debugLocation: DebugLocation = DebugLocation.ofCaller()) {\n\treturn {\n\t\tleft: derived({ name: 'editor.validOverlay.left' }, reader => /** @description left */ fn(reader).left, debugLocation),\n\t\ttop: derived({ name: 'editor.validOverlay.top' }, reader => /** @description top */ fn(reader).top, debugLocation),\n\t\twidth: derived({ name: 'editor.validOverlay.width' }, reader => /** @description width */ fn(reader).right - fn(reader).left, debugLocation),\n\t\theight: derived({ name: 'editor.validOverlay.height' }, reader => /** @description height */ fn(reader).bottom - fn(reader).top, debugLocation),\n\t};\n}\n\nexport type FirstFnArg<T> = T extends (arg: infer U) => any ? U : never;\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { numberComparator } from '../../../../../../../base/common/arrays.js';\nimport { findFirstMin } from '../../../../../../../base/common/arraysFind.js';\nimport { DebugLocation, derived, derivedObservableWithCache, derivedOpts, IObservable, IReader, observableSignalFromEvent } from '../../../../../../../base/common/observable.js';\nimport { splitLines } from '../../../../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor, ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../../common/core/edits/textEdit.js';\nimport { RangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { indentOfLine } from '../../../../../../common/model/textModel.js';\nimport { CharCode } from '../../../../../../../base/common/charCode.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\nimport { Size2D } from '../../../../../../common/core/2d/size.js';\n\nexport function maxContentWidthInRange(editor: ObservableCodeEditor, range: LineRange, reader: IReader | undefined): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\tlet maxContentWidth = 0;\n\n\teditor.scrollTop.read(reader);\n\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\tconst column = model.getLineMaxColumn(i);\n\t\tconst lineContentWidth = editor.getLeftOfPosition(new Position(i, column), reader);\n\t\tmaxContentWidth = Math.max(maxContentWidth, lineContentWidth);\n\t}\n\tconst lines = range.mapToLineArray(l => model.getLineContent(l));\n\n\tif (maxContentWidth < 5 && lines.some(l => l.length > 0) && model.uri.scheme !== 'file') {\n\t\tconsole.error('unexpected width');\n\t}\n\treturn maxContentWidth;\n}\n\nexport function getContentSizeOfLines(editor: ObservableCodeEditor, range: LineRange, reader: IReader | undefined): Size2D[] {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\tobservableSignalFromEvent(editor, editor.editor.onDidChangeLineHeight).read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { throw new BugIndicatingError('Model is required'); }\n\n\tconst sizes: Size2D[] = [];\n\n\teditor.scrollTop.read(reader);\n\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\tconst column = model.getLineMaxColumn(i);\n\t\tlet lineContentWidth = editor.editor.getOffsetForColumn(i, column);\n\t\tif (lineContentWidth === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = editor.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = column * typicalHalfwidthCharacterWidth;\n\t\t\tlineContentWidth = approximation;\n\t\t}\n\n\t\tconst height = editor.editor.getLineHeightForPosition(new Position(i, 1));\n\t\tsizes.push(new Size2D(lineContentWidth, height));\n\t}\n\n\treturn sizes;\n}\n\nexport function getOffsetForPos(editor: ObservableCodeEditor, pos: Position, reader: IReader): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\n\teditor.scrollTop.read(reader);\n\tconst lineContentWidth = editor.editor.getOffsetForColumn(pos.lineNumber, pos.column);\n\n\treturn lineContentWidth;\n}\n\nexport function getPrefixTrim(diffRanges: Range[], originalLinesRange: LineRange, modifiedLines: string[], editor: ICodeEditor, reader: IReader | undefined = undefined): { prefixTrim: number; prefixLeftOffset: number } {\n\tconst textModel = editor.getModel();\n\tif (!textModel) {\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\tconst replacementStart = diffRanges.map(r => r.isSingleLine() ? r.startColumn - 1 : 0);\n\tconst originalIndents = originalLinesRange.mapToLineArray(line => indentOfLine(textModel.getLineContent(line)));\n\tconst modifiedIndents = modifiedLines.filter(line => line !== '').map(line => indentOfLine(line));\n\tconst prefixTrim = Math.min(...replacementStart, ...originalIndents, ...modifiedIndents);\n\n\tlet prefixLeftOffset;\n\tconst startLineIndent = textModel.getLineIndentColumn(originalLinesRange.startLineNumber);\n\tif (startLineIndent >= prefixTrim + 1) {\n\t\t// We can use the editor to get the offset\n\t\t// TODO go through other usages of getOffsetForColumn and come up with a robust reactive solution to read it\n\t\tobservableCodeEditor(editor).scrollTop.read(reader); // getOffsetForColumn requires the line number to be visible. This might change on scroll top.\n\t\tprefixLeftOffset = editor.getOffsetForColumn(originalLinesRange.startLineNumber, prefixTrim + 1);\n\t} else if (modifiedLines.length > 0) {\n\t\t// Content is not in the editor, we can use the content width to calculate the offset\n\t\tprefixLeftOffset = getContentRenderWidth(modifiedLines[0].slice(0, prefixTrim), editor, textModel);\n\t} else {\n\t\t// unable to approximate the offset\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\treturn { prefixTrim, prefixLeftOffset };\n}\n\nexport function getContentRenderWidth(content: string, editor: ICodeEditor, textModel: ITextModel) {\n\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\tconst tabSize = textModel.getOptions().tabSize * w;\n\n\tconst numTabs = content.split('\\t').length - 1;\n\tconst numNoneTabs = content.length - numTabs;\n\treturn numNoneTabs * w + numTabs * tabSize;\n}\n\nexport function getEditorValidOverlayRect(editor: ObservableCodeEditor): IObservable<Rect> {\n\tconst contentLeft = editor.layoutInfoContentLeft;\n\n\tconst width = derived({ name: 'editor.validOverlay.width' }, r => {\n\t\tconst hasMinimapOnTheRight = editor.layoutInfoMinimap.read(r).minimapLeft !== 0;\n\t\tconst editorWidth = editor.layoutInfoWidth.read(r) - contentLeft.read(r);\n\n\t\tif (hasMinimapOnTheRight) {\n\t\t\tconst minimapAndScrollbarWidth = editor.layoutInfoMinimap.read(r).minimapWidth + editor.layoutInfoVerticalScrollbarWidth.read(r);\n\t\t\treturn editorWidth - minimapAndScrollbarWidth;\n\t\t}\n\n\t\treturn editorWidth;\n\t});\n\n\tconst height = derived({ name: 'editor.validOverlay.height' }, r => editor.layoutInfoHeight.read(r) + editor.contentHeight.read(r));\n\n\treturn derived({ name: 'editor.validOverlay' }, r => Rect.fromLeftTopWidthHeight(contentLeft.read(r), 0, width.read(r), height.read(r)));\n}\nexport function applyEditToModifiedRangeMappings(rangeMapping: RangeMapping[], edit: TextEdit): RangeMapping[] {\n\tconst updatedMappings: RangeMapping[] = [];\n\tfor (const m of rangeMapping) {\n\t\tconst updatedRange = edit.mapRange(m.modifiedRange);\n\t\tupdatedMappings.push(new RangeMapping(m.originalRange, updatedRange));\n\t}\n\treturn updatedMappings;\n}\n\n\nexport function classNames(...classes: (string | false | undefined | null)[]) {\n\treturn classes.filter(c => typeof c === 'string').join(' ');\n}\n\nfunction offsetRangeToRange(columnOffsetRange: OffsetRange, startPos: Position): Range {\n\treturn new Range(\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.start,\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.endExclusive,\n\t);\n}\n\n/**\n * Calculates the indentation size (in spaces) of a given line,\n * interpreting tabs as the specified tab size.\n */\nfunction getIndentationSize(line: string, tabSize: number): number {\n\tlet currentSize = 0;\n\tloop: for (let i = 0, len = line.length; i < len; i++) {\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: currentSize += tabSize; break;\n\t\t\tcase CharCode.Space: currentSize++; break;\n\t\t\tdefault: break loop;\n\t\t}\n\t}\n\t// if currentSize % tabSize !== 0,\n\t// then there are spaces which are not part of the indentation\n\treturn currentSize - (currentSize % tabSize);\n}\n\n/**\n * Calculates the number of characters at the start of a line that correspond to a given indentation size,\n * taking into account both tabs and spaces.\n */\nfunction indentSizeToIndentLength(line: string, indentSize: number, tabSize: number): number {\n\tlet remainingSize = indentSize - (indentSize % tabSize);\n\tlet i = 0;\n\tfor (; i < line.length; i++) {\n\t\tif (remainingSize === 0) {\n\t\t\tbreak;\n\t\t}\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: remainingSize -= tabSize; break;\n\t\t\tcase CharCode.Space: remainingSize--; break;\n\t\t\tdefault: throw new BugIndicatingError('Unexpected character found while calculating indent length');\n\t\t}\n\t}\n\treturn i;\n}\n\nexport function createReindentEdit(text: string, range: LineRange, tabSize: number): TextEdit {\n\tconst newLines = splitLines(text);\n\tconst edits: TextReplacement[] = [];\n\tconst minIndentSize = findFirstMin(range.mapToLineArray(l => getIndentationSize(newLines[l - 1], tabSize)), numberComparator)!;\n\trange.forEach(lineNumber => {\n\t\tconst indentLength = indentSizeToIndentLength(newLines[lineNumber - 1], minIndentSize, tabSize);\n\t\tedits.push(new TextReplacement(offsetRangeToRange(new OffsetRange(0, indentLength), new Position(lineNumber, 1)), ''));\n\t});\n\treturn new TextEdit(edits);\n}\n\nexport class PathBuilder {\n\tprivate _data: string = '';\n\n\tpublic moveTo(point: Point): this {\n\t\tthis._data += `M ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic lineTo(point: Point): this {\n\t\tthis._data += `L ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic build(): string {\n\t\treturn this._data;\n\t}\n}\n\ntype RemoveFalsy<T> = T extends false | undefined | null ? never : T;\ntype Falsy<T> = T extends false | undefined | null ? T : never;\n\nexport function mapOutFalsy<T>(obs: IObservable<T>): IObservable<IObservable<RemoveFalsy<T>> | Falsy<T>> {\n\tconst nonUndefinedObs = derivedObservableWithCache<T | undefined | null | false>(undefined, (reader, lastValue) => obs.read(reader) || lastValue);\n\n\treturn derivedOpts({\n\t\tdebugName: () => `${obs.debugName}.mapOutFalsy`\n\t}, reader => {\n\t\tnonUndefinedObs.read(reader);\n\t\tconst val = obs.read(reader);\n\t\tif (!val) {\n\t\t\treturn undefined as Falsy<T>;\n\t\t}\n\n\t\treturn nonUndefinedObs as IObservable<RemoveFalsy<T>>;\n\t});\n}\n\nexport function rectToProps(fn: (reader: IReader) => Rect | undefined, debugLocation: DebugLocation = DebugLocation.ofCaller()) {\n\treturn {\n\t\tleft: derived({ name: 'editor.validOverlay.left' }, reader => /** @description left */ fn(reader)?.left, debugLocation),\n\t\ttop: derived({ name: 'editor.validOverlay.top' }, reader => /** @description top */ fn(reader)?.top, debugLocation),\n\t\twidth: derived({ name: 'editor.validOverlay.width' }, reader => {\n\t\t\t/** @description width */\n\t\t\tconst val = fn(reader);\n\t\t\tif (!val) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn val.width;\n\t\t}, debugLocation),\n\t\theight: derived({ name: 'editor.validOverlay.height' }, reader => {\n\t\t\t/** @description height */\n\t\t\tconst val = fn(reader);\n\t\t\tif (!val) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn val.height;\n\t\t}, debugLocation),\n\t};\n}\n\nexport type FirstFnArg<T> = T extends (arg: infer U) => any ? U : never;\n","\nimport { numberComparator } from '../../../../../../../base/common/arrays.js';\nimport { findFirstMin } from '../../../../../../../base/common/arraysFind.js';\nimport { DebugLocation, derived, derivedObservableWithCache, derivedOpts, IObservable, IReader, observableSignalFromEvent } from '../../../../../../../base/common/observable.js';\nimport { splitLines } from '../../../../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor, ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../../common/core/edits/textEdit.js';\nimport { RangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { indentOfLine } from '../../../../../../common/model/textModel.js';\nimport { CharCode } from '../../../../../../../base/common/charCode.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\nimport { Size2D } from '../../../../../../common/core/2d/size.js';\n\nexport function maxContentWidthInRange(editor: ObservableCodeEditor, range: LineRange, reader: IReader | undefined): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\tlet maxContentWidth = 0;\n\n\teditor.scrollTop.read(reader);\n\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\tconst column = model.getLineMaxColumn(i);\n\t\tconst lineContentWidth = editor.getLeftOfPosition(new Position(i, column), reader);\n\t\tmaxContentWidth = Math.max(maxContentWidth, lineContentWidth);\n\t}\n\tconst lines = range.mapToLineArray(l => model.getLineContent(l));\n\n\tif (maxContentWidth < 5 && lines.some(l => l.length > 0) && model.uri.scheme !== 'file') {\n\t\tconsole.error('unexpected width');\n\t}\n\treturn maxContentWidth;\n}\n\nexport function getContentSizeOfLines(editor: ObservableCodeEditor, range: LineRange, reader: IReader | undefined): Size2D[] {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\tobservableSignalFromEvent(editor, editor.editor.onDidChangeLineHeight).read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { throw new BugIndicatingError('Model is required'); }\n\n\tconst sizes: Size2D[] = [];\n\n\teditor.scrollTop.read(reader);\n\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\tconst column = model.getLineMaxColumn(i);\n\t\tlet lineContentWidth = editor.editor.getOffsetForColumn(i, column);\n\t\tif (lineContentWidth === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = editor.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = column * typicalHalfwidthCharacterWidth;\n\t\t\tlineContentWidth = approximation;\n\t\t}\n\n\t\tconst height = editor.editor.getLineHeightForPosition(new Position(i, 1));\n\t\tsizes.push(new Size2D(lineContentWidth, height));\n\t}\n\n\treturn sizes;\n}\n\nexport function getOffsetForPos(editor: ObservableCodeEditor, pos: Position, reader: IReader): number {\n\teditor.layoutInfo.read(reader);\n\teditor.value.read(reader);\n\n\tconst model = editor.model.read(reader);\n\tif (!model) { return 0; }\n\n\teditor.scrollTop.read(reader);\n\tconst lineContentWidth = editor.editor.getOffsetForColumn(pos.lineNumber, pos.column);\n\n\treturn lineContentWidth;\n}\n\nexport function getPrefixTrim(diffRanges: Range[], originalLinesRange: LineRange, modifiedLines: string[], editor: ICodeEditor, reader: IReader | undefined = undefined): { prefixTrim: number; prefixLeftOffset: number } {\n\tconst textModel = editor.getModel();\n\tif (!textModel) {\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\tconst replacementStart = diffRanges.map(r => r.isSingleLine() ? r.startColumn - 1 : 0);\n\tconst originalIndents = originalLinesRange.mapToLineArray(line => indentOfLine(textModel.getLineContent(line)));\n\tconst modifiedIndents = modifiedLines.filter(line => line !== '').map(line => indentOfLine(line));\n\tconst prefixTrim = Math.min(...replacementStart, ...originalIndents, ...modifiedIndents);\n\n\tlet prefixLeftOffset;\n\tconst startLineIndent = textModel.getLineIndentColumn(originalLinesRange.startLineNumber);\n\tif (startLineIndent >= prefixTrim + 1) {\n\t\t// We can use the editor to get the offset\n\t\t// TODO go through other usages of getOffsetForColumn and come up with a robust reactive solution to read it\n\t\tobservableCodeEditor(editor).scrollTop.read(reader); // getOffsetForColumn requires the line number to be visible. This might change on scroll top.\n\t\tprefixLeftOffset = editor.getOffsetForColumn(originalLinesRange.startLineNumber, prefixTrim + 1);\n\t} else if (modifiedLines.length > 0) {\n\t\t// Content is not in the editor, we can use the content width to calculate the offset\n\t\tprefixLeftOffset = getContentRenderWidth(modifiedLines[0].slice(0, prefixTrim), editor, textModel);\n\t} else {\n\t\t// unable to approximate the offset\n\t\treturn { prefixTrim: 0, prefixLeftOffset: 0 };\n\t}\n\n\treturn { prefixTrim, prefixLeftOffset };\n}\n\nexport function getContentRenderWidth(content: string, editor: ICodeEditor, textModel: ITextModel) {\n\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\tconst tabSize = textModel.getOptions().tabSize * w;\n\n\tconst numTabs = content.split('\\t').length - 1;\n\tconst numNoneTabs = content.length - numTabs;\n\treturn numNoneTabs * w + numTabs * tabSize;\n}\n\nexport function getEditorValidOverlayRect(editor: ObservableCodeEditor): IObservable<Rect> {\n\tconst contentLeft = editor.layoutInfoContentLeft;\n\n\tconst width = derived({ name: 'editor.validOverlay.width' }, r => {\n\t\tconst hasMinimapOnTheRight = editor.layoutInfoMinimap.read(r).minimapLeft !== 0;\n\t\tconst editorWidth = editor.layoutInfoWidth.read(r) - contentLeft.read(r);\n\n\t\tif (hasMinimapOnTheRight) {\n\t\t\tconst minimapAndScrollbarWidth = editor.layoutInfoMinimap.read(r).minimapWidth + editor.layoutInfoVerticalScrollbarWidth.read(r);\n\t\t\treturn editorWidth - minimapAndScrollbarWidth;\n\t\t}\n\n\t\treturn editorWidth;\n\t});\n\n\tconst height = derived({ name: 'editor.validOverlay.height' }, r => editor.layoutInfoHeight.read(r) + editor.contentHeight.read(r));\n\n\treturn derived({ name: 'editor.validOverlay' }, r => Rect.fromLeftTopWidthHeight(contentLeft.read(r), 0, width.read(r), height.read(r)));\n}\nexport function applyEditToModifiedRangeMappings(rangeMapping: RangeMapping[], edit: TextEdit): RangeMapping[] {\n\tconst updatedMappings: RangeMapping[] = [];\n\tfor (const m of rangeMapping) {\n\t\tconst updatedRange = edit.mapRange(m.modifiedRange);\n\t\tupdatedMappings.push(new RangeMapping(m.originalRange, updatedRange));\n\t}\n\treturn updatedMappings;\n}\n\n\nexport function classNames(...classes: (string | false | undefined | null)[]) {\n\treturn classes.filter(c => typeof c === 'string').join(' ');\n}\n\nfunction offsetRangeToRange(columnOffsetRange: OffsetRange, startPos: Position): Range {\n\treturn new Range(\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.start,\n\t\tstartPos.lineNumber,\n\t\tstartPos.column + columnOffsetRange.endExclusive,\n\t);\n}\n\n/**\n * Calculates the indentation size (in spaces) of a given line,\n * interpreting tabs as the specified tab size.\n */\nfunction getIndentationSize(line: string, tabSize: number): number {\n\tlet currentSize = 0;\n\tloop: for (let i = 0, len = line.length; i < len; i++) {\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: currentSize += tabSize; break;\n\t\t\tcase CharCode.Space: currentSize++; break;\n\t\t\tdefault: break loop;\n\t\t}\n\t}\n\t// if currentSize % tabSize !== 0,\n\t// then there are spaces which are not part of the indentation\n\treturn currentSize - (currentSize % tabSize);\n}\n\n/**\n * Calculates the number of characters at the start of a line that correspond to a given indentation size,\n * taking into account both tabs and spaces.\n */\nfunction indentSizeToIndentLength(line: string, indentSize: number, tabSize: number): number {\n\tlet remainingSize = indentSize - (indentSize % tabSize);\n\tlet i = 0;\n\tfor (; i < line.length; i++) {\n\t\tif (remainingSize === 0) {\n\t\t\tbreak;\n\t\t}\n\t\tswitch (line.charCodeAt(i)) {\n\t\t\tcase CharCode.Tab: remainingSize -= tabSize; break;\n\t\t\tcase CharCode.Space: remainingSize--; break;\n\t\t\tdefault: throw new BugIndicatingError('Unexpected character found while calculating indent length');\n\t\t}\n\t}\n\treturn i;\n}\n\nexport function createReindentEdit(text: string, range: LineRange, tabSize: number): TextEdit {\n\tconst newLines = splitLines(text);\n\tconst edits: TextReplacement[] = [];\n\tconst minIndentSize = findFirstMin(range.mapToLineArray(l => getIndentationSize(newLines[l - 1], tabSize)), numberComparator)!;\n\trange.forEach(lineNumber => {\n\t\tconst indentLength = indentSizeToIndentLength(newLines[lineNumber - 1], minIndentSize, tabSize);\n\t\tedits.push(new TextReplacement(offsetRangeToRange(new OffsetRange(0, indentLength), new Position(lineNumber, 1)), ''));\n\t});\n\treturn new TextEdit(edits);\n}\n\nexport class PathBuilder {\n\tprivate _data: string = '';\n\n\tpublic moveTo(point: Point): this {\n\t\tthis._data += `M ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic lineTo(point: Point): this {\n\t\tthis._data += `L ${point.x} ${point.y} `;\n\t\treturn this;\n\t}\n\n\tpublic build(): string {\n\t\treturn this._data;\n\t}\n}\n\ntype RemoveFalsy<T> = T extends false | undefined | null ? never : T;\ntype Falsy<T> = T extends false | undefined | null ? T : never;\n\nexport function mapOutFalsy<T>(obs: IObservable<T>): IObservable<IObservable<RemoveFalsy<T>> | Falsy<T>> {\n\tconst nonUndefinedObs = derivedObservableWithCache<T | undefined | null | false>(undefined, (reader, lastValue) => obs.read(reader) || lastValue);\n\n\treturn derivedOpts({\n\t\tdebugName: () => `${obs.debugName}.mapOutFalsy`\n\t}, reader => {\n\t\tnonUndefinedObs.read(reader);\n\t\tconst val = obs.read(reader);\n\t\tif (!val) {\n\t\t\treturn undefined as Falsy<T>;\n\t\t}\n\n\t\treturn nonUndefinedObs as IObservable<RemoveFalsy<T>>;\n\t});\n}\n\nexport function rectToProps(fn: (reader: IReader) => Rect | undefined, debugLocation: DebugLocation = DebugLocation.ofCaller()) {\n\treturn {\n\t\tleft: derived({ name: 'editor.validOverlay.left' }, reader => /** @description left */ fn(reader)?.left, debugLocation),\n\t\ttop: derived({ name: 'editor.validOverlay.top' }, reader => /** @description top */ fn(reader)?.top, debugLocation),\n\t\twidth: derived({ name: 'editor.validOverlay.width' }, reader => {\n\t\t\t/** @description width */\n\t\t\tconst val = fn(reader);\n\t\t\tif (!val) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn val.width;\n\t\t}, debugLocation),\n\t\theight: derived({ name: 'editor.validOverlay.height' }, reader => {\n\t\t\t/** @description height */\n\t\t\tconst val = fn(reader);\n\t\t\tif (!val) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn val.height;\n\t\t}, debugLocation),\n\t};\n}\n\nexport type FirstFnArg<T> = T extends (arg: infer U) => any ? U : never;\n"]}
|
|
@@ -0,0 +1,181 @@
|
|
|
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
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
import { createStyleSheetFromObservable } from '../../../../../base/browser/domStylesheets.js';
|
|
15
|
+
import { createHotClass } from '../../../../../base/common/hotReloadHelpers.js';
|
|
16
|
+
import { Disposable } from '../../../../../base/common/lifecycle.js';
|
|
17
|
+
import { derived, mapObservableArrayCached, derivedDisposable, derivedObservableWithCache, constObservable, observableValue } from '../../../../../base/common/observable.js';
|
|
18
|
+
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
|
|
19
|
+
import { observableCodeEditor } from '../../../../browser/observableCodeEditor.js';
|
|
20
|
+
import { LineRange } from '../../../../common/core/ranges/lineRange.js';
|
|
21
|
+
import { InlineCompletionsHintsWidget } from '../hintsWidget/inlineCompletionsHintsWidget.js';
|
|
22
|
+
import { convertItemsToStableObservables } from '../utils.js';
|
|
23
|
+
import { GhostTextView, GhostTextWidgetWarning } from './ghostText/ghostTextView.js';
|
|
24
|
+
import { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from './inlineEdits/components/gutterIndicatorView.js';
|
|
25
|
+
import { InlineEditsOnboardingExperience } from './inlineEdits/inlineEditsNewUsers.js';
|
|
26
|
+
import { InlineCompletionViewKind, InlineEditTabAction } from './inlineEdits/inlineEditsViewInterface.js';
|
|
27
|
+
import { InlineEditsViewAndDiffProducer } from './inlineEdits/inlineEditsViewProducer.js';
|
|
28
|
+
let InlineSuggestionsView = class InlineSuggestionsView extends Disposable {
|
|
29
|
+
static { this.hot = createHotClass(this); }
|
|
30
|
+
constructor(_editor, _model, _focusIsInMenu, _instantiationService) {
|
|
31
|
+
super();
|
|
32
|
+
this._editor = _editor;
|
|
33
|
+
this._model = _model;
|
|
34
|
+
this._focusIsInMenu = _focusIsInMenu;
|
|
35
|
+
this._instantiationService = _instantiationService;
|
|
36
|
+
this._ghostTexts = derived(this, (reader) => {
|
|
37
|
+
const model = this._model.read(reader);
|
|
38
|
+
return model?.ghostTexts.read(reader) ?? [];
|
|
39
|
+
});
|
|
40
|
+
this._inlineEdit = derived(this, reader => this._model.read(reader)?.inlineEditState.read(reader)?.inlineEdit);
|
|
41
|
+
this._everHadInlineEdit = derivedObservableWithCache(this, (reader, last) => last || !!this._inlineEdit.read(reader)
|
|
42
|
+
|| !!this._model.read(reader)?.inlineCompletionState.read(reader)?.inlineSuggestion?.showInlineEditMenu);
|
|
43
|
+
// To break a cyclic dependency
|
|
44
|
+
this._indicatorIsHoverVisible = observableValue(this, undefined);
|
|
45
|
+
this._showInlineEditCollapsed = derived(this, reader => {
|
|
46
|
+
const s = this._model.read(reader)?.showCollapsed.read(reader) ?? false;
|
|
47
|
+
return s && !this._indicatorIsHoverVisible.read(reader)?.read(reader);
|
|
48
|
+
});
|
|
49
|
+
this._inlineEditWidget = derivedDisposable(reader => {
|
|
50
|
+
if (!this._everHadInlineEdit.read(reader)) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return this._instantiationService.createInstance(InlineEditsViewAndDiffProducer, this._editor, this._inlineEdit, this._model, this._showInlineEditCollapsed);
|
|
54
|
+
});
|
|
55
|
+
this._gutterIndicatorState = derived(reader => {
|
|
56
|
+
const model = this._model.read(reader);
|
|
57
|
+
if (!model) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const state = model.state.read(reader);
|
|
61
|
+
if (state?.kind === 'ghostText' && state.inlineSuggestion?.showInlineEditMenu) {
|
|
62
|
+
return {
|
|
63
|
+
displayRange: LineRange.ofLength(state.primaryGhostText.lineNumber, 1),
|
|
64
|
+
tabAction: derived(this, reader => this._editorObs.isFocused.read(reader) ? InlineEditTabAction.Accept : InlineEditTabAction.Inactive),
|
|
65
|
+
gutterIndicatorOffset: constObservable(getGhostTextTopOffset(state.inlineSuggestion, this._editor)),
|
|
66
|
+
inlineSuggestion: state.inlineSuggestion,
|
|
67
|
+
model,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
else if (state?.kind === 'inlineEdit') {
|
|
71
|
+
const inlineEditWidget = this._inlineEditWidget.read(reader)?.view;
|
|
72
|
+
if (!inlineEditWidget) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const displayRange = inlineEditWidget.displayRange.read(reader);
|
|
76
|
+
if (!displayRange) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
displayRange,
|
|
81
|
+
tabAction: derived(reader => {
|
|
82
|
+
if (this._editorObs.isFocused.read(reader)) {
|
|
83
|
+
if (model.tabShouldJumpToInlineEdit.read(reader)) {
|
|
84
|
+
return InlineEditTabAction.Jump;
|
|
85
|
+
}
|
|
86
|
+
if (model.tabShouldAcceptInlineEdit.read(reader)) {
|
|
87
|
+
return InlineEditTabAction.Accept;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return InlineEditTabAction.Inactive;
|
|
91
|
+
}),
|
|
92
|
+
gutterIndicatorOffset: inlineEditWidget.gutterIndicatorOffset,
|
|
93
|
+
inlineSuggestion: state.inlineSuggestion,
|
|
94
|
+
model,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
this._stablizedGhostTexts = convertItemsToStableObservables(this._ghostTexts, this._store);
|
|
102
|
+
this._editorObs = observableCodeEditor(this._editor);
|
|
103
|
+
this._ghostTextWidgets = mapObservableArrayCached(this, this._stablizedGhostTexts, (ghostText, store) => store.add(this._createGhostText(ghostText))).recomputeInitiallyAndOnChange(this._store);
|
|
104
|
+
this._inlineEditWidget.recomputeInitiallyAndOnChange(this._store);
|
|
105
|
+
this._fontFamily = this._editorObs.getOption(71 /* EditorOption.inlineSuggest */).map(val => val.fontFamily);
|
|
106
|
+
this._register(createStyleSheetFromObservable(derived(reader => {
|
|
107
|
+
const fontFamily = this._fontFamily.read(reader);
|
|
108
|
+
return `
|
|
109
|
+
.monaco-editor .ghost-text-decoration,
|
|
110
|
+
.monaco-editor .ghost-text-decoration-preview,
|
|
111
|
+
.monaco-editor .ghost-text {
|
|
112
|
+
font-family: ${fontFamily};
|
|
113
|
+
}`;
|
|
114
|
+
})));
|
|
115
|
+
this._register(new InlineCompletionsHintsWidget(this._editor, this._model, this._instantiationService));
|
|
116
|
+
this._indicator = this._register(this._instantiationService.createInstance(InlineEditsGutterIndicator, this._editorObs, derived(reader => {
|
|
117
|
+
const s = this._gutterIndicatorState.read(reader);
|
|
118
|
+
if (!s) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return new InlineEditsGutterIndicatorData(InlineSuggestionGutterMenuData.fromInlineSuggestion(s.inlineSuggestion), s.displayRange, SimpleInlineSuggestModel.fromInlineCompletionModel(s.model));
|
|
122
|
+
}), this._gutterIndicatorState.map((s, reader) => s?.tabAction.read(reader) ?? InlineEditTabAction.Inactive), this._gutterIndicatorState.map((s, reader) => s?.gutterIndicatorOffset.read(reader) ?? 0), this._inlineEditWidget.map((w, reader) => w?.view.inlineEditsIsHovered.read(reader) ?? false), this._focusIsInMenu));
|
|
123
|
+
this._indicatorIsHoverVisible.set(this._indicator.isHoverVisible, undefined);
|
|
124
|
+
derived(reader => {
|
|
125
|
+
const w = this._inlineEditWidget.read(reader);
|
|
126
|
+
if (!w) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
return reader.store.add(this._instantiationService.createInstance(InlineEditsOnboardingExperience, w._inlineEditModel, constObservable(this._indicator), w.view._inlineCollapsedView));
|
|
130
|
+
}).recomputeInitiallyAndOnChange(this._store);
|
|
131
|
+
}
|
|
132
|
+
_createGhostText(ghostText) {
|
|
133
|
+
return this._instantiationService.createInstance(GhostTextView, this._editor, derived(reader => {
|
|
134
|
+
const model = this._model.read(reader);
|
|
135
|
+
const inlineCompletion = model?.inlineCompletionState.read(reader)?.inlineSuggestion;
|
|
136
|
+
if (!model || !inlineCompletion) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
ghostText: ghostText.read(reader),
|
|
141
|
+
handleInlineCompletionShown: (viewData) => model.handleInlineSuggestionShown(inlineCompletion, InlineCompletionViewKind.GhostText, viewData),
|
|
142
|
+
warning: GhostTextWidgetWarning.from(model?.warning.read(reader)),
|
|
143
|
+
};
|
|
144
|
+
}), {
|
|
145
|
+
useSyntaxHighlighting: this._editorObs.getOption(71 /* EditorOption.inlineSuggest */).map(v => v.syntaxHighlightingEnabled),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
shouldShowHoverAtViewZone(viewZoneId) {
|
|
149
|
+
return this._ghostTextWidgets.get()[0]?.ownsViewZone(viewZoneId) ?? false;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
InlineSuggestionsView = __decorate([
|
|
153
|
+
__param(3, IInstantiationService)
|
|
154
|
+
], InlineSuggestionsView);
|
|
155
|
+
export { InlineSuggestionsView };
|
|
156
|
+
function getGhostTextTopOffset(inlineCompletion, editor) {
|
|
157
|
+
const replacement = inlineCompletion.getSingleTextEdit();
|
|
158
|
+
const textModel = editor.getModel();
|
|
159
|
+
if (!textModel) {
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
const EOL = textModel.getEOL();
|
|
163
|
+
if (replacement.range.isEmpty() && replacement.text.startsWith(EOL)) {
|
|
164
|
+
const lineHeight = editor.getLineHeightForPosition(replacement.range.getStartPosition());
|
|
165
|
+
return countPrefixRepeats(replacement.text, EOL) * lineHeight;
|
|
166
|
+
}
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
function countPrefixRepeats(str, prefix) {
|
|
170
|
+
if (!prefix.length) {
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
let count = 0;
|
|
174
|
+
let i = 0;
|
|
175
|
+
while (str.startsWith(prefix, i)) {
|
|
176
|
+
count++;
|
|
177
|
+
i += prefix.length;
|
|
178
|
+
}
|
|
179
|
+
return count;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=inlineSuggestionsView.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/inlineSuggestionsView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.ts"],"names":[],"mappings":"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","file":"inlineSuggestionsView.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 { createStyleSheetFromObservable } from '../../../../../base/browser/domStylesheets.js';\nimport { createHotClass } from '../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { derived, mapObservableArrayCached, derivedDisposable, derivedObservableWithCache, IObservable, ISettableObservable, constObservable, observableValue } from '../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../browser/observableCodeEditor.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../common/core/ranges/lineRange.js';\nimport { InlineCompletionsHintsWidget } from '../hintsWidget/inlineCompletionsHintsWidget.js';\nimport { GhostTextOrReplacement } from '../model/ghostText.js';\nimport { InlineCompletionsModel } from '../model/inlineCompletionsModel.js';\nimport { InlineCompletionItem } from '../model/inlineSuggestionItem.js';\nimport { convertItemsToStableObservables } from '../utils.js';\nimport { GhostTextView, GhostTextWidgetWarning, IGhostTextWidgetData } from './ghostText/ghostTextView.js';\nimport { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from './inlineEdits/components/gutterIndicatorView.js';\nimport { InlineEditsOnboardingExperience } from './inlineEdits/inlineEditsNewUsers.js';\nimport { InlineCompletionViewKind, InlineEditTabAction } from './inlineEdits/inlineEditsViewInterface.js';\nimport { InlineEditsViewAndDiffProducer } from './inlineEdits/inlineEditsViewProducer.js';\n\nexport class InlineSuggestionsView extends Disposable {\n\tpublic static hot = createHotClass(this);\n\n\tprivate readonly _ghostTexts = derived(this, (reader) => {\n\t\tconst model = this._model.read(reader);\n\t\treturn model?.ghostTexts.read(reader) ?? [];\n\t});\n\n\tprivate readonly _stablizedGhostTexts;\n\tprivate readonly _editorObs;\n\tprivate readonly _ghostTextWidgets;\n\n\tprivate readonly _inlineEdit = derived(this, reader => this._model.read(reader)?.inlineEditState.read(reader)?.inlineEdit);\n\tprivate readonly _everHadInlineEdit = derivedObservableWithCache<boolean>(this,\n\t\t(reader, last) => last || !!this._inlineEdit.read(reader)\n\t\t\t|| !!this._model.read(reader)?.inlineCompletionState.read(reader)?.inlineSuggestion?.showInlineEditMenu\n\t);\n\n\t// To break a cyclic dependency\n\tprivate readonly _indicatorIsHoverVisible = observableValue<IObservable<boolean> | undefined>(this, undefined);\n\n\tprivate readonly _showInlineEditCollapsed = derived(this, reader => {\n\t\tconst s = this._model.read(reader)?.showCollapsed.read(reader) ?? false;\n\t\treturn s && !this._indicatorIsHoverVisible.read(reader)?.read(reader);\n\t});\n\n\tprivate readonly _inlineEditWidget = derivedDisposable(reader => {\n\t\tif (!this._everHadInlineEdit.read(reader)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._instantiationService.createInstance(InlineEditsViewAndDiffProducer, this._editor, this._inlineEdit, this._model, this._showInlineEditCollapsed);\n\t});\n\n\tprivate readonly _fontFamily;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IObservable<InlineCompletionsModel | undefined>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService\n\t) {\n\t\tsuper();\n\n\t\tthis._stablizedGhostTexts = convertItemsToStableObservables(this._ghostTexts, this._store);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tthis._ghostTextWidgets = mapObservableArrayCached(\n\t\t\tthis,\n\t\t\tthis._stablizedGhostTexts,\n\t\t\t(ghostText, store) => store.add(this._createGhostText(ghostText))\n\t\t).recomputeInitiallyAndOnChange(this._store);\n\n\t\tthis._inlineEditWidget.recomputeInitiallyAndOnChange(this._store);\n\n\t\tthis._fontFamily = this._editorObs.getOption(EditorOption.inlineSuggest).map(val => val.fontFamily);\n\n\t\tthis._register(createStyleSheetFromObservable(derived(reader => {\n\t\t\tconst fontFamily = this._fontFamily.read(reader);\n\t\t\treturn `\n.monaco-editor .ghost-text-decoration,\n.monaco-editor .ghost-text-decoration-preview,\n.monaco-editor .ghost-text {\n\tfont-family: ${fontFamily};\n}`;\n\t\t})));\n\n\t\tthis._register(new InlineCompletionsHintsWidget(this._editor, this._model, this._instantiationService));\n\n\t\tthis._indicator = this._register(this._instantiationService.createInstance(\n\t\t\tInlineEditsGutterIndicator,\n\t\t\tthis._editorObs,\n\t\t\tderived(reader => {\n\t\t\t\tconst s = this._gutterIndicatorState.read(reader);\n\t\t\t\tif (!s) { return undefined; }\n\t\t\t\treturn new InlineEditsGutterIndicatorData(\n\t\t\t\t\tInlineSuggestionGutterMenuData.fromInlineSuggestion(s.inlineSuggestion),\n\t\t\t\t\ts.displayRange,\n\t\t\t\t\tSimpleInlineSuggestModel.fromInlineCompletionModel(s.model),\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis._gutterIndicatorState.map((s, reader) => s?.tabAction.read(reader) ?? InlineEditTabAction.Inactive),\n\t\t\tthis._gutterIndicatorState.map((s, reader) => s?.gutterIndicatorOffset.read(reader) ?? 0),\n\t\t\tthis._inlineEditWidget.map((w, reader) => w?.view.inlineEditsIsHovered.read(reader) ?? false),\n\t\t\tthis._focusIsInMenu,\n\t\t));\n\t\tthis._indicatorIsHoverVisible.set(this._indicator.isHoverVisible, undefined);\n\n\t\tderived(reader => {\n\t\t\tconst w = this._inlineEditWidget.read(reader);\n\t\t\tif (!w) { return undefined; }\n\t\t\treturn reader.store.add(this._instantiationService.createInstance(\n\t\t\t\tInlineEditsOnboardingExperience,\n\t\t\t\tw._inlineEditModel,\n\t\t\t\tconstObservable(this._indicator),\n\t\t\t\tw.view._inlineCollapsedView,\n\t\t\t));\n\t\t}).recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate _createGhostText(ghostText: IObservable<GhostTextOrReplacement>): GhostTextView {\n\t\treturn this._instantiationService.createInstance(\n\t\t\tGhostTextView,\n\t\t\tthis._editor,\n\t\t\tderived(reader => {\n\t\t\t\tconst model = this._model.read(reader);\n\t\t\t\tconst inlineCompletion = model?.inlineCompletionState.read(reader)?.inlineSuggestion;\n\t\t\t\tif (!model || !inlineCompletion) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tghostText: ghostText.read(reader),\n\t\t\t\t\thandleInlineCompletionShown: (viewData) => model.handleInlineSuggestionShown(inlineCompletion, InlineCompletionViewKind.GhostText, viewData),\n\t\t\t\t\twarning: GhostTextWidgetWarning.from(model?.warning.read(reader)),\n\t\t\t\t} satisfies IGhostTextWidgetData;\n\t\t\t}),\n\t\t\t{\n\t\t\t\tuseSyntaxHighlighting: this._editorObs.getOption(EditorOption.inlineSuggest).map(v => v.syntaxHighlightingEnabled),\n\t\t\t},\n\t\t);\n\t}\n\n\tpublic shouldShowHoverAtViewZone(viewZoneId: string): boolean {\n\t\treturn this._ghostTextWidgets.get()[0]?.ownsViewZone(viewZoneId) ?? false;\n\t}\n\n\tprivate readonly _gutterIndicatorState = derived(reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst state = model.state.read(reader);\n\n\t\tif (state?.kind === 'ghostText' && state.inlineSuggestion?.showInlineEditMenu) {\n\t\t\treturn {\n\t\t\t\tdisplayRange: LineRange.ofLength(state.primaryGhostText.lineNumber, 1),\n\t\t\t\ttabAction: derived<InlineEditTabAction>(this,\n\t\t\t\t\treader => this._editorObs.isFocused.read(reader) ? InlineEditTabAction.Accept : InlineEditTabAction.Inactive\n\t\t\t\t),\n\t\t\t\tgutterIndicatorOffset: constObservable(getGhostTextTopOffset(state.inlineSuggestion, this._editor)),\n\t\t\t\tinlineSuggestion: state.inlineSuggestion,\n\t\t\t\tmodel,\n\t\t\t};\n\t\t} else if (state?.kind === 'inlineEdit') {\n\t\t\tconst inlineEditWidget = this._inlineEditWidget.read(reader)?.view;\n\t\t\tif (!inlineEditWidget) { return undefined; }\n\n\t\t\tconst displayRange = inlineEditWidget.displayRange.read(reader);\n\t\t\tif (!displayRange) { return undefined; }\n\t\t\treturn {\n\t\t\t\tdisplayRange,\n\t\t\t\ttabAction: derived(reader => {\n\t\t\t\t\tif (this._editorObs.isFocused.read(reader)) {\n\t\t\t\t\t\tif (model.tabShouldJumpToInlineEdit.read(reader)) { return InlineEditTabAction.Jump; }\n\t\t\t\t\t\tif (model.tabShouldAcceptInlineEdit.read(reader)) { return InlineEditTabAction.Accept; }\n\t\t\t\t\t}\n\t\t\t\t\treturn InlineEditTabAction.Inactive;\n\t\t\t\t}),\n\t\t\t\tgutterIndicatorOffset: inlineEditWidget.gutterIndicatorOffset,\n\t\t\t\tinlineSuggestion: state.inlineSuggestion,\n\t\t\t\tmodel,\n\t\t\t};\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t});\n\n\tprotected readonly _indicator;\n}\n\nfunction getGhostTextTopOffset(inlineCompletion: InlineCompletionItem, editor: ICodeEditor): number {\n\tconst replacement = inlineCompletion.getSingleTextEdit();\n\tconst textModel = editor.getModel();\n\tif (!textModel) {\n\t\treturn 0;\n\t}\n\n\tconst EOL = textModel.getEOL();\n\tif (replacement.range.isEmpty() && replacement.text.startsWith(EOL)) {\n\t\tconst lineHeight = editor.getLineHeightForPosition(replacement.range.getStartPosition());\n\t\treturn countPrefixRepeats(replacement.text, EOL) * lineHeight;\n\t}\n\n\treturn 0;\n}\n\nfunction countPrefixRepeats(str: string, prefix: string): number {\n\tif (!prefix.length) {\n\t\treturn 0;\n\t}\n\tlet count = 0;\n\tlet i = 0;\n\twhile (str.startsWith(prefix, i)) {\n\t\tcount++;\n\t\ti += prefix.length;\n\t}\n\treturn count;\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 { createStyleSheetFromObservable } from '../../../../../base/browser/domStylesheets.js';\nimport { createHotClass } from '../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { derived, mapObservableArrayCached, derivedDisposable, derivedObservableWithCache, IObservable, ISettableObservable, constObservable, observableValue } from '../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../browser/observableCodeEditor.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../common/core/ranges/lineRange.js';\nimport { InlineCompletionsHintsWidget } from '../hintsWidget/inlineCompletionsHintsWidget.js';\nimport { GhostTextOrReplacement } from '../model/ghostText.js';\nimport { InlineCompletionsModel } from '../model/inlineCompletionsModel.js';\nimport { InlineCompletionItem } from '../model/inlineSuggestionItem.js';\nimport { convertItemsToStableObservables } from '../utils.js';\nimport { GhostTextView, GhostTextWidgetWarning, IGhostTextWidgetData } from './ghostText/ghostTextView.js';\nimport { InlineEditsGutterIndicator, InlineEditsGutterIndicatorData, InlineSuggestionGutterMenuData, SimpleInlineSuggestModel } from './inlineEdits/components/gutterIndicatorView.js';\nimport { InlineEditsOnboardingExperience } from './inlineEdits/inlineEditsNewUsers.js';\nimport { InlineCompletionViewKind, InlineEditTabAction } from './inlineEdits/inlineEditsViewInterface.js';\nimport { InlineEditsViewAndDiffProducer } from './inlineEdits/inlineEditsViewProducer.js';\n\nexport class InlineSuggestionsView extends Disposable {\n\tpublic static hot = createHotClass(this);\n\n\tprivate readonly _ghostTexts = derived(this, (reader) => {\n\t\tconst model = this._model.read(reader);\n\t\treturn model?.ghostTexts.read(reader) ?? [];\n\t});\n\n\tprivate readonly _stablizedGhostTexts;\n\tprivate readonly _editorObs;\n\tprivate readonly _ghostTextWidgets;\n\n\tprivate readonly _inlineEdit = derived(this, reader => this._model.read(reader)?.inlineEditState.read(reader)?.inlineEdit);\n\tprivate readonly _everHadInlineEdit = derivedObservableWithCache<boolean>(this,\n\t\t(reader, last) => last || !!this._inlineEdit.read(reader)\n\t\t\t|| !!this._model.read(reader)?.inlineCompletionState.read(reader)?.inlineSuggestion?.showInlineEditMenu\n\t);\n\n\t// To break a cyclic dependency\n\tprivate readonly _indicatorIsHoverVisible = observableValue<IObservable<boolean> | undefined>(this, undefined);\n\n\tprivate readonly _showInlineEditCollapsed = derived(this, reader => {\n\t\tconst s = this._model.read(reader)?.showCollapsed.read(reader) ?? false;\n\t\treturn s && !this._indicatorIsHoverVisible.read(reader)?.read(reader);\n\t});\n\n\tprivate readonly _inlineEditWidget = derivedDisposable(reader => {\n\t\tif (!this._everHadInlineEdit.read(reader)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._instantiationService.createInstance(InlineEditsViewAndDiffProducer, this._editor, this._inlineEdit, this._model, this._showInlineEditCollapsed);\n\t});\n\n\tprivate readonly _fontFamily;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IObservable<InlineCompletionsModel | undefined>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService\n\t) {\n\t\tsuper();\n\n\t\tthis._stablizedGhostTexts = convertItemsToStableObservables(this._ghostTexts, this._store);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tthis._ghostTextWidgets = mapObservableArrayCached(\n\t\t\tthis,\n\t\t\tthis._stablizedGhostTexts,\n\t\t\t(ghostText, store) => store.add(this._createGhostText(ghostText))\n\t\t).recomputeInitiallyAndOnChange(this._store);\n\n\t\tthis._inlineEditWidget.recomputeInitiallyAndOnChange(this._store);\n\n\t\tthis._fontFamily = this._editorObs.getOption(EditorOption.inlineSuggest).map(val => val.fontFamily);\n\n\t\tthis._register(createStyleSheetFromObservable(derived(reader => {\n\t\t\tconst fontFamily = this._fontFamily.read(reader);\n\t\t\treturn `\n.monaco-editor .ghost-text-decoration,\n.monaco-editor .ghost-text-decoration-preview,\n.monaco-editor .ghost-text {\n\tfont-family: ${fontFamily};\n}`;\n\t\t})));\n\n\t\tthis._register(new InlineCompletionsHintsWidget(this._editor, this._model, this._instantiationService));\n\n\t\tthis._indicator = this._register(this._instantiationService.createInstance(\n\t\t\tInlineEditsGutterIndicator,\n\t\t\tthis._editorObs,\n\t\t\tderived(reader => {\n\t\t\t\tconst s = this._gutterIndicatorState.read(reader);\n\t\t\t\tif (!s) { return undefined; }\n\t\t\t\treturn new InlineEditsGutterIndicatorData(\n\t\t\t\t\tInlineSuggestionGutterMenuData.fromInlineSuggestion(s.inlineSuggestion),\n\t\t\t\t\ts.displayRange,\n\t\t\t\t\tSimpleInlineSuggestModel.fromInlineCompletionModel(s.model),\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis._gutterIndicatorState.map((s, reader) => s?.tabAction.read(reader) ?? InlineEditTabAction.Inactive),\n\t\t\tthis._gutterIndicatorState.map((s, reader) => s?.gutterIndicatorOffset.read(reader) ?? 0),\n\t\t\tthis._inlineEditWidget.map((w, reader) => w?.view.inlineEditsIsHovered.read(reader) ?? false),\n\t\t\tthis._focusIsInMenu,\n\t\t));\n\t\tthis._indicatorIsHoverVisible.set(this._indicator.isHoverVisible, undefined);\n\n\t\tderived(reader => {\n\t\t\tconst w = this._inlineEditWidget.read(reader);\n\t\t\tif (!w) { return undefined; }\n\t\t\treturn reader.store.add(this._instantiationService.createInstance(\n\t\t\t\tInlineEditsOnboardingExperience,\n\t\t\t\tw._inlineEditModel,\n\t\t\t\tconstObservable(this._indicator),\n\t\t\t\tw.view._inlineCollapsedView,\n\t\t\t));\n\t\t}).recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate _createGhostText(ghostText: IObservable<GhostTextOrReplacement>): GhostTextView {\n\t\treturn this._instantiationService.createInstance(\n\t\t\tGhostTextView,\n\t\t\tthis._editor,\n\t\t\tderived(reader => {\n\t\t\t\tconst model = this._model.read(reader);\n\t\t\t\tconst inlineCompletion = model?.inlineCompletionState.read(reader)?.inlineSuggestion;\n\t\t\t\tif (!model || !inlineCompletion) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tghostText: ghostText.read(reader),\n\t\t\t\t\thandleInlineCompletionShown: (viewData) => model.handleInlineSuggestionShown(inlineCompletion, InlineCompletionViewKind.GhostText, viewData),\n\t\t\t\t\twarning: GhostTextWidgetWarning.from(model?.warning.read(reader)),\n\t\t\t\t} satisfies IGhostTextWidgetData;\n\t\t\t}),\n\t\t\t{\n\t\t\t\tuseSyntaxHighlighting: this._editorObs.getOption(EditorOption.inlineSuggest).map(v => v.syntaxHighlightingEnabled),\n\t\t\t},\n\t\t);\n\t}\n\n\tpublic shouldShowHoverAtViewZone(viewZoneId: string): boolean {\n\t\treturn this._ghostTextWidgets.get()[0]?.ownsViewZone(viewZoneId) ?? false;\n\t}\n\n\tprivate readonly _gutterIndicatorState = derived(reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst state = model.state.read(reader);\n\n\t\tif (state?.kind === 'ghostText' && state.inlineSuggestion?.showInlineEditMenu) {\n\t\t\treturn {\n\t\t\t\tdisplayRange: LineRange.ofLength(state.primaryGhostText.lineNumber, 1),\n\t\t\t\ttabAction: derived<InlineEditTabAction>(this,\n\t\t\t\t\treader => this._editorObs.isFocused.read(reader) ? InlineEditTabAction.Accept : InlineEditTabAction.Inactive\n\t\t\t\t),\n\t\t\t\tgutterIndicatorOffset: constObservable(getGhostTextTopOffset(state.inlineSuggestion, this._editor)),\n\t\t\t\tinlineSuggestion: state.inlineSuggestion,\n\t\t\t\tmodel,\n\t\t\t};\n\t\t} else if (state?.kind === 'inlineEdit') {\n\t\t\tconst inlineEditWidget = this._inlineEditWidget.read(reader)?.view;\n\t\t\tif (!inlineEditWidget) { return undefined; }\n\n\t\t\tconst displayRange = inlineEditWidget.displayRange.read(reader);\n\t\t\tif (!displayRange) { return undefined; }\n\t\t\treturn {\n\t\t\t\tdisplayRange,\n\t\t\t\ttabAction: derived(reader => {\n\t\t\t\t\tif (this._editorObs.isFocused.read(reader)) {\n\t\t\t\t\t\tif (model.tabShouldJumpToInlineEdit.read(reader)) { return InlineEditTabAction.Jump; }\n\t\t\t\t\t\tif (model.tabShouldAcceptInlineEdit.read(reader)) { return InlineEditTabAction.Accept; }\n\t\t\t\t\t}\n\t\t\t\t\treturn InlineEditTabAction.Inactive;\n\t\t\t\t}),\n\t\t\t\tgutterIndicatorOffset: inlineEditWidget.gutterIndicatorOffset,\n\t\t\t\tinlineSuggestion: state.inlineSuggestion,\n\t\t\t\tmodel,\n\t\t\t};\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t});\n\n\tprotected readonly _indicator;\n}\n\nfunction getGhostTextTopOffset(inlineCompletion: InlineCompletionItem, editor: ICodeEditor): number {\n\tconst replacement = inlineCompletion.getSingleTextEdit();\n\tconst textModel = editor.getModel();\n\tif (!textModel) {\n\t\treturn 0;\n\t}\n\n\tconst EOL = textModel.getEOL();\n\tif (replacement.range.isEmpty() && replacement.text.startsWith(EOL)) {\n\t\tconst lineHeight = editor.getLineHeightForPosition(replacement.range.getStartPosition());\n\t\treturn countPrefixRepeats(replacement.text, EOL) * lineHeight;\n\t}\n\n\treturn 0;\n}\n\nfunction countPrefixRepeats(str: string, prefix: string): number {\n\tif (!prefix.length) {\n\t\treturn 0;\n\t}\n\tlet count = 0;\n\tlet i = 0;\n\twhile (str.startsWith(prefix, i)) {\n\t\tcount++;\n\t\ti += prefix.length;\n\t}\n\treturn count;\n}\n"]}
|
|
@@ -11,7 +11,7 @@ export class InsertFinalNewLineAction extends EditorAction {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
super({
|
|
13
13
|
id: InsertFinalNewLineAction.ID,
|
|
14
|
-
label: nls.localize2(
|
|
14
|
+
label: nls.localize2(1248, "Insert Final New Line"),
|
|
15
15
|
precondition: EditorContextKeys.writable
|
|
16
16
|
});
|
|
17
17
|
}
|
|
@@ -10,7 +10,7 @@ export class ExpandLineSelectionAction extends EditorAction {
|
|
|
10
10
|
constructor() {
|
|
11
11
|
super({
|
|
12
12
|
id: 'expandLineSelection',
|
|
13
|
-
label: nls.localize2(
|
|
13
|
+
label: nls.localize2(1249, "Expand Line Selection"),
|
|
14
14
|
precondition: undefined,
|
|
15
15
|
kbOpts: {
|
|
16
16
|
weight: 0 /* KeybindingWeight.EditorCore */,
|