monaco-editor-core 0.57.0 → 0.58.0-dev-20261104
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 +38 -6
- package/esm/vs/base/browser/browser.js +8 -0
- package/esm/vs/base/browser/browser.js.map +1 -1
- package/esm/vs/base/browser/contextmenu.js +8 -1
- package/esm/vs/base/browser/contextmenu.js.map +1 -1
- package/esm/vs/base/browser/dom.js +34 -5
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/dompurify/dompurify.js +2457 -2640
- package/esm/vs/base/browser/markdownRenderer.js +48 -21
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/pixelRatio.js +3 -2
- package/esm/vs/base/browser/pixelRatio.js.map +1 -1
- package/esm/vs/base/browser/ui/actionbar/actionViewItems.js +5 -2
- package/esm/vs/base/browser/ui/actionbar/actionViewItems.js.map +1 -1
- package/esm/vs/base/browser/ui/actionbar/actionbar.js +7 -2
- package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
- package/esm/vs/base/browser/ui/animations/animations.js +68 -40
- package/esm/vs/base/browser/ui/animations/animations.js.map +1 -1
- package/esm/vs/base/browser/ui/button/button.js +7 -0
- package/esm/vs/base/browser/ui/button/button.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/contextview/contextview.css +15 -0
- package/esm/vs/base/browser/ui/contextview/contextview.js +266 -40
- package/esm/vs/base/browser/ui/contextview/contextview.js.map +1 -1
- package/esm/vs/base/browser/ui/contextview/windowControlsOverlay.js +72 -0
- package/esm/vs/base/browser/ui/contextview/windowControlsOverlay.js.map +1 -0
- package/esm/vs/base/browser/ui/dialog/dialog.css +5 -0
- package/esm/vs/base/browser/ui/dropdown/dropdown.js +2 -1
- package/esm/vs/base/browser/ui/dropdown/dropdown.js.map +1 -1
- package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +1 -0
- package/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js.map +1 -1
- package/esm/vs/base/browser/ui/hover/hover.js.map +1 -1
- package/esm/vs/base/browser/ui/list/listView.js +87 -15
- package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
- package/esm/vs/base/browser/ui/list/listWidget.js +37 -15
- package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
- package/esm/vs/base/browser/ui/menu/menu.js +189 -52
- package/esm/vs/base/browser/ui/menu/menu.js.map +1 -1
- package/esm/vs/base/browser/ui/radio/radio.css +11 -0
- package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js +2 -1
- package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js.map +1 -1
- package/esm/vs/base/browser/ui/selectBox/selectBox.js.map +1 -1
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js +14 -8
- package/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js.map +1 -1
- package/esm/vs/base/browser/ui/splitview/splitview.js +11 -7
- package/esm/vs/base/browser/ui/splitview/splitview.js.map +1 -1
- package/esm/vs/base/browser/ui/toggle/switch.css +16 -7
- package/esm/vs/base/browser/ui/toggle/switch.js +9 -6
- package/esm/vs/base/browser/ui/toggle/switch.js.map +1 -1
- package/esm/vs/base/browser/ui/toolbar/toolbar.css +1 -2
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +85 -38
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/abstractTree.js +48 -9
- package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js +10 -1
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/objectTree.js +3 -0
- package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/tree.js.map +1 -1
- package/esm/vs/base/common/actions.js +8 -2
- package/esm/vs/base/common/actions.js.map +1 -1
- package/esm/vs/base/common/arrays.js +4 -4
- package/esm/vs/base/common/arrays.js.map +1 -1
- package/esm/vs/base/common/async.js +12 -8
- package/esm/vs/base/common/async.js.map +1 -1
- package/esm/vs/base/common/cancellation.js +25 -0
- package/esm/vs/base/common/cancellation.js.map +1 -1
- package/esm/vs/base/common/codicons.js +2 -0
- package/esm/vs/base/common/codicons.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +2 -0
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/color.js +1 -1
- package/esm/vs/base/common/color.js.map +1 -1
- package/esm/vs/base/common/diff/diff.js +60 -1
- package/esm/vs/base/common/diff/diff.js.map +1 -1
- package/esm/vs/base/common/event.js +1 -1
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/glob.js +1 -0
- package/esm/vs/base/common/glob.js.map +1 -1
- package/esm/vs/base/common/htmlContent.js +74 -12
- package/esm/vs/base/common/htmlContent.js.map +1 -1
- package/esm/vs/base/common/json.js +19 -0
- package/esm/vs/base/common/json.js.map +1 -0
- package/esm/vs/base/common/network.js +16 -0
- package/esm/vs/base/common/network.js.map +1 -1
- package/esm/vs/base/common/resources.js +14 -2
- package/esm/vs/base/common/resources.js.map +1 -1
- package/esm/vs/base/common/strings.js +1 -1
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/base/common/uri.js +2 -2
- package/esm/vs/base/common/uri.js.map +1 -1
- package/esm/vs/editor/browser/config/editorConfiguration.js +1 -1
- package/esm/vs/editor/browser/config/fontMeasurements.js +19 -6
- package/esm/vs/editor/browser/config/fontMeasurements.js.map +1 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js +3 -3
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +11 -5
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +8 -38
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/screenReaderContentRich.js +3 -3
- package/esm/vs/editor/browser/controller/editContext/native/screenReaderSupport.js +6 -6
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +12 -10
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +7 -7
- package/esm/vs/editor/browser/controller/mouseTarget.js +3 -3
- package/esm/vs/editor/browser/coreCommands.js +2 -2
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/editorMarkdownSanitizer.js +19 -0
- package/esm/vs/editor/browser/editorMarkdownSanitizer.js.map +1 -0
- package/esm/vs/editor/browser/gpu/rectangleRenderer.js +1 -1
- package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +1 -1
- package/esm/vs/editor/browser/services/editorWorkerService.js +3 -2
- package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
- package/esm/vs/editor/browser/services/openerService.js +6 -2
- package/esm/vs/editor/browser/services/openerService.js.map +1 -1
- package/esm/vs/editor/browser/view/domLineBreaksComputer.js +34 -11
- package/esm/vs/editor/browser/view/domLineBreaksComputer.js.map +1 -1
- package/esm/vs/editor/browser/view/viewController.js +7 -7
- package/esm/vs/editor/browser/view/viewController.js.map +1 -1
- package/esm/vs/editor/browser/view/viewLayer.js +1 -1
- package/esm/vs/editor/browser/view/viewOverlays.js +4 -4
- package/esm/vs/editor/browser/view.js +5 -5
- package/esm/vs/editor/browser/viewParts/blockDecorations/blockDecorations.js +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +11 -3
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js +6 -6
- package/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js +12 -12
- package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +9 -2
- package/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js +2 -2
- package/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js +2 -2
- package/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js +2 -2
- package/esm/vs/editor/browser/viewParts/margin/margin.js +2 -2
- package/esm/vs/editor/browser/viewParts/minimap/minimap.js +6 -6
- package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +9 -2
- package/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js +5 -5
- package/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js +3 -3
- package/esm/vs/editor/browser/viewParts/rulers/rulers.js +2 -2
- package/esm/vs/editor/browser/viewParts/rulersGpu/rulersGpu.js +1 -1
- package/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js +3 -3
- package/esm/vs/editor/browser/viewParts/selections/selections.js +2 -2
- package/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js +2 -2
- package/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js +6 -6
- package/esm/vs/editor/browser/viewParts/viewLines/viewLineOptions.js +5 -5
- package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +11 -11
- package/esm/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.js +1 -1
- package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +2 -2
- package/esm/vs/editor/browser/viewParts/whitespace/whitespace.js +4 -4
- package/esm/vs/editor/browser/viewParts/wordWrapIndicator/wordWrapIndicator.js +2 -2
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +22 -21
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/commands.js +12 -12
- package/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js +18 -18
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js +3 -3
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js +10 -10
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/diffEditor.contribution.js +4 -4
- package/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js +21 -3
- package/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +10 -10
- package/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/registrations.contribution.js +5 -5
- package/esm/vs/editor/browser/widget/multiDiffEditor/colors.js +3 -3
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollLayout.js +2 -2
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollLayout.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollView.js +21 -2
- package/esm/vs/editor/browser/widget/multiDiffEditor/compressedVirtualizedScrollView.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -2
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +11 -3
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js +1 -0
- package/esm/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js.map +1 -1
- package/esm/vs/editor/common/commands/columnSelectionPasteCommand.js +64 -0
- package/esm/vs/editor/common/commands/columnSelectionPasteCommand.js.map +1 -0
- package/esm/vs/editor/common/config/editorConfigurationSchema.js +68 -58
- package/esm/vs/editor/common/config/editorConfigurationSchema.js.map +1 -1
- package/esm/vs/editor/common/config/editorOptions.js +560 -500
- package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
- package/esm/vs/editor/common/core/editorColorRegistry.js +71 -71
- package/esm/vs/editor/common/core/edits/textEdit.js +16 -0
- package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursor.js +20 -10
- package/esm/vs/editor/common/cursor/cursor.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorTypeEditOperations.js +67 -14
- package/esm/vs/editor/common/cursor/cursorTypeEditOperations.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorTypeOperations.js +2 -2
- package/esm/vs/editor/common/cursor/cursorTypeOperations.js.map +1 -1
- package/esm/vs/editor/common/cursorCommon.js +22 -21
- package/esm/vs/editor/common/cursorCommon.js.map +1 -1
- package/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js +21 -8
- package/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js.map +1 -1
- package/esm/vs/editor/common/diff/documentDiffProvider.js.map +1 -1
- package/esm/vs/editor/common/diff/externalLinesDiffComputer.js +38 -26
- package/esm/vs/editor/common/diff/externalLinesDiffComputer.js.map +1 -1
- package/esm/vs/editor/common/diff/rangeMapping.js +11 -1
- package/esm/vs/editor/common/diff/rangeMapping.js.map +1 -1
- package/esm/vs/editor/common/diff/verifyLinesDiff.js +28 -0
- package/esm/vs/editor/common/diff/verifyLinesDiff.js.map +1 -0
- package/esm/vs/editor/common/editorContextKeys.js +53 -53
- package/esm/vs/editor/common/languages/languageConfiguration.js +8 -0
- package/esm/vs/editor/common/languages/languageConfiguration.js.map +1 -1
- package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
- package/esm/vs/editor/common/languages.js +56 -56
- package/esm/vs/editor/common/model/editStack.js +1 -1
- package/esm/vs/editor/common/services/editorWebWorker.js +27 -6
- package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
- package/esm/vs/editor/common/services/editorWorker.js.map +1 -1
- package/esm/vs/editor/common/services/languageService.js +6 -4
- package/esm/vs/editor/common/services/languageService.js.map +1 -1
- package/esm/vs/editor/common/services/markerDecorationsService.js +21 -2
- package/esm/vs/editor/common/services/markerDecorationsService.js.map +1 -1
- package/esm/vs/editor/common/standalone/standaloneEnums.js +100 -97
- package/esm/vs/editor/common/standalone/standaloneEnums.js.map +1 -1
- package/esm/vs/editor/common/standaloneStrings.js +11 -11
- package/esm/vs/editor/common/textModelEditSource.js +9 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLayout.js +16 -16
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
- package/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js +1 -1
- package/esm/vs/editor/common/viewModel/viewModelImpl.js +19 -19
- package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
- package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
- package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +9 -9
- 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 +23 -20
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- 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/codeActionModel.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +25 -10
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.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/hoverColorPickerContribution.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +3 -3
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerParticipant.js +1 -1
- package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +17 -17
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
- package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +39 -39
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- 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/pasteEditSession.js +19 -0
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.js.map +1 -0
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +26 -18
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js.map +1 -1
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findController.js +18 -18
- package/esm/vs/editor/contrib/find/browser/findController.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findModel.js +6 -6
- package/esm/vs/editor/contrib/find/browser/findWidget.js +40 -40
- package/esm/vs/editor/contrib/find/browser/findWidget.js.map +1 -1
- package/esm/vs/editor/contrib/folding/browser/folding.js +23 -23
- 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/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/clickLinkGesture.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +2 -2
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +4 -4
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js.map +1 -1
- 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 +9 -3
- package/esm/vs/editor/contrib/hover/browser/contentHoverController.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/glyphHoverController.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/glyphHoverWidget.js +2 -1
- package/esm/vs/editor/contrib/hover/browser/glyphHoverWidget.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/markdownHoverParticipant.js +10 -8
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +6 -6
- 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/inlayHintsController.js +5 -5
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +9 -9
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.js +3 -3
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +6 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +7 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +3 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +5 -4
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js.map +1 -1
- package/esm/vs/editor/contrib/links/browser/links.js +16 -15
- package/esm/vs/editor/contrib/links/browser/links.js.map +1 -1
- package/esm/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.js +1 -1
- package/esm/vs/editor/contrib/message/browser/messageController.js +16 -12
- package/esm/vs/editor/contrib/message/browser/messageController.js.map +1 -1
- package/esm/vs/editor/contrib/middleScroll/browser/middleScrollController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +91 -55
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js.map +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsModel.js +3 -3
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsModel.js.map +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +6 -4
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
- 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/placeholderText/browser/placeholderTextContribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +12 -12
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +3 -3
- package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +6 -6
- package/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +23 -13
- package/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js.map +1 -1
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +5 -5
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +5 -5
- package/esm/vs/editor/contrib/snippet/browser/snippetSession.js +2 -2
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +10 -8
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.js +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.js +2 -2
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +6 -6
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -9
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +15 -15
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/suggestModel.js +11 -11
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +27 -27
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +8 -6
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +5 -5
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +3 -3
- package/esm/vs/editor/contrib/suggest/browser/wordDistance.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 +27 -27
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js +1 -1
- package/esm/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js.map +1 -1
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +50 -14
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js.map +1 -1
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +6 -6
- package/esm/vs/editor/editor.api.d.ts +133 -98
- package/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js +1 -1
- package/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js +5 -3
- package/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js +15 -1
- package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
- package/esm/vs/nls.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +72 -66
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js.map +1 -1
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +434 -136
- package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionWidget.css +74 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +24 -26
- package/esm/vs/platform/actionWidget/browser/actionWidget.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionWidgetMotion.js +16 -0
- package/esm/vs/platform/actionWidget/browser/actionWidgetMotion.js.map +1 -0
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +15 -17
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js.map +1 -1
- package/esm/vs/platform/actions/browser/toolbar.js +25 -12
- package/esm/vs/platform/actions/browser/toolbar.js.map +1 -1
- package/esm/vs/platform/actions/common/actions.js +4 -2
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +15 -8
- package/esm/vs/platform/actions/common/menuService.js.map +1 -1
- package/esm/vs/platform/configuration/common/configuration.js +3 -1
- package/esm/vs/platform/configuration/common/configuration.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurationModels.js +16 -11
- package/esm/vs/platform/configuration/common/configurationModels.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurationRegistry.js +29 -27
- package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
- package/esm/vs/platform/configuration/common/configurations.js +13 -1
- package/esm/vs/platform/configuration/common/configurations.js.map +1 -1
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +2 -2
- package/esm/vs/platform/contextkey/browser/contextKeyService.js.map +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +28 -14
- package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
- package/esm/vs/platform/contextkey/common/contextkeys.js +10 -10
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/contextview/browser/contextMenuHandler.js +17 -4
- package/esm/vs/platform/contextview/browser/contextMenuHandler.js.map +1 -1
- package/esm/vs/platform/contextview/browser/contextMenuService.js +1 -1
- package/esm/vs/platform/contextview/browser/contextMenuService.js.map +1 -1
- package/esm/vs/platform/contextview/browser/contextView.js.map +1 -1
- package/esm/vs/platform/contextview/browser/contextViewService.js +7 -2
- package/esm/vs/platform/contextview/browser/contextViewService.js.map +1 -1
- package/esm/vs/platform/editor/common/editor.js +17 -0
- package/esm/vs/platform/editor/common/editor.js.map +1 -1
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverService.js +6 -3
- package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +38 -6
- package/esm/vs/platform/hover/browser/hoverWidget.js.map +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +32 -5
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
- package/esm/vs/platform/keybinding/common/keybindingResolver.js +1 -1
- package/esm/vs/platform/keybinding/common/keybindingResolver.js.map +1 -1
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/markers/common/markerService.js +11 -8
- package/esm/vs/platform/markers/common/markerService.js.map +1 -1
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/markers/common/markers.js.map +1 -1
- package/esm/vs/platform/notification/common/notification.js.map +1 -1
- package/esm/vs/platform/notification/common/notificationMessage.js +37 -0
- package/esm/vs/platform/notification/common/notificationMessage.js.map +1 -0
- package/esm/vs/platform/opener/common/opener.js.map +1 -1
- package/esm/vs/platform/progress/common/progress.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +33 -2
- package/esm/vs/platform/quickinput/browser/quickAccess.js +7 -4
- package/esm/vs/platform/quickinput/browser/quickAccess.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +65 -15
- package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputList.js +96 -90
- package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputService.js +5 -7
- package/esm/vs/platform/quickinput/browser/quickInputService.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/quickTree.js +1 -1
- package/esm/vs/platform/quickinput/common/quickAccess.js.map +1 -1
- package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
- package/esm/vs/platform/storage/common/storage.js.map +1 -1
- package/esm/vs/platform/theme/common/colorRegistry.js +1 -0
- package/esm/vs/platform/theme/common/colorRegistry.js.map +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +11 -3
- package/esm/vs/platform/theme/common/colorUtils.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/baseColors.js +19 -19
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -9
- package/esm/vs/platform/theme/common/colors/chartsColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/confettiColors.js +14 -0
- package/esm/vs/platform/theme/common/colors/confettiColors.js.map +1 -0
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +48 -48
- package/esm/vs/platform/theme/common/colors/inputColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
- package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +10 -10
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +133 -98
- package/package.json +3 -3
- package/version.txt +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts","vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts"],"names":[],"mappings":"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","file":"defaultLinesDiffComputer.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 { equals } from '../../../../base/common/arrays.js';\nimport { assertFn } from '../../../../base/common/assert.js';\nimport { LineRange } from '../../core/ranges/lineRange.js';\nimport { OffsetRange } from '../../core/ranges/offsetRange.js';\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { ArrayText } from '../../core/text/abstractText.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from '../linesDiffComputer.js';\nimport { DetailedLineRangeMapping, LineRangeMapping, lineRangeMappingFromRangeMappings, RangeMapping } from '../rangeMapping.js';\nimport { DateTimeout, InfiniteTimeout, ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';\nimport { computeMovedLines } from './computeMovedLines.js';\nimport { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport class DefaultLinesDiffComputer implements ILinesDiffComputer {\n\tprivate readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\tif (originalLines.length <= 1 && equals(originalLines, modifiedLines, (a, b) => a === b)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[\n\t\t\t\t\t\tnew RangeMapping(\n\t\t\t\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this.dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this.myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tassertFn(() => diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart);\n\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original, modified);\n\n\t\tlet moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tmoves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges, options);\n\t\t}\n\n\t\t// Make sure all ranges are valid\n\t\tassertFn(() => {\n\t\t\tfunction validatePosition(pos: Position, lines: string[]): boolean {\n\t\t\t\tif (pos.lineNumber < 1 || pos.lineNumber > lines.length) { return false; }\n\t\t\t\tconst line = lines[pos.lineNumber - 1];\n\t\t\t\tif (pos.column < 1 || pos.column > line.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction validateRange(range: LineRange, lines: string[]): boolean {\n\t\t\t\tif (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) { return false; }\n\t\t\t\tif (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const c of changes) {\n\t\t\t\tif (!c.innerChanges) { return false; }\n\t\t\t\tfor (const ic of c.innerChanges) {\n\t\t\t\t\tconst valid = validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) &&\n\t\t\t\t\t\tvalidatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate computeMoves(\n\t\tchanges: DetailedLineRangeMapping[],\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\thashedOriginalLines: number[],\n\t\thashedModifiedLines: number[],\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions,\n\t): MovedText[] {\n\t\tconst moves = computeMovedLines(\n\t\t\tchanges,\n\t\t\toriginalLines,\n\t\t\tmodifiedLines,\n\t\t\thashedOriginalLines,\n\t\t\thashedModifiedLines,\n\t\t\ttimeout,\n\t\t);\n\t\tconst movesWithDiffs = moves.map(m => {\n\t\t\tconst moveChanges = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\tm.original.toOffsetRange(),\n\t\t\t\tm.modified.toOffsetRange(),\n\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\tconst mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true);\n\t\t\treturn new MovedText(m, mappings);\n\t\t});\n\t\treturn movesWithDiffs;\n\t}\n\n\tprivate refineDiff(originalLines: string[], modifiedLines: string[], diff: SequenceDiff, timeout: ITimeout, considerWhitespaceChanges: boolean, options: ILinesDiffComputerOptions): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst diffResult = slice1.length + slice2.length < 500\n\t\t\t? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tconst check = false;\n\n\t\tlet diffs = diffResult.diffs;\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\tif (check) { RangeMapping.assertSorted(result); }\n\n\t\t// Assert: result applied on original should be the same as diff applied to original\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout: diffResult.hitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\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 { equals } from '../../../../base/common/arrays.js';\nimport { assertFn } from '../../../../base/common/assert.js';\nimport { LineRange } from '../../core/ranges/lineRange.js';\nimport { OffsetRange } from '../../core/ranges/offsetRange.js';\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { ArrayText } from '../../core/text/abstractText.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from '../linesDiffComputer.js';\nimport { DetailedLineRangeMapping, LineRangeMapping, lineRangeMappingFromRangeMappings, RangeMapping } from '../rangeMapping.js';\nimport { DateTimeout, InfiniteTimeout, ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';\nimport { computeMovedLines } from './computeMovedLines.js';\nimport { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport class DefaultLinesDiffComputer implements ILinesDiffComputer {\n\tprivate readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\tif (originalLines.length <= 1 && equals(originalLines, modifiedLines, (a, b) => a === b)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[\n\t\t\t\t\t\tnew RangeMapping(\n\t\t\t\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this.dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this.myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tassertFn(() => diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart);\n\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original, modified);\n\n\t\tlet moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tmoves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges, options);\n\t\t}\n\n\t\t// Make sure all ranges are valid\n\t\tassertFn(() => {\n\t\t\tfunction validatePosition(pos: Position, lines: string[]): boolean {\n\t\t\t\tif (pos.lineNumber < 1 || pos.lineNumber > lines.length) { return false; }\n\t\t\t\tconst line = lines[pos.lineNumber - 1];\n\t\t\t\tif (pos.column < 1 || pos.column > line.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction validateRange(range: LineRange, lines: string[]): boolean {\n\t\t\t\tif (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) { return false; }\n\t\t\t\tif (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const c of changes) {\n\t\t\t\tif (!c.innerChanges) { return false; }\n\t\t\t\tfor (const ic of c.innerChanges) {\n\t\t\t\t\tconst valid = validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) &&\n\t\t\t\t\t\tvalidatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate computeMoves(\n\t\tchanges: DetailedLineRangeMapping[],\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\thashedOriginalLines: number[],\n\t\thashedModifiedLines: number[],\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions,\n\t): MovedText[] {\n\t\tconst moves = computeMovedLines(\n\t\t\tchanges,\n\t\t\toriginalLines,\n\t\t\tmodifiedLines,\n\t\t\thashedOriginalLines,\n\t\t\thashedModifiedLines,\n\t\t\ttimeout,\n\t\t);\n\t\tconst movesWithDiffs = moves.map(m => {\n\t\t\tconst moveChanges = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\tm.original.toOffsetRange(),\n\t\t\t\tm.modified.toOffsetRange(),\n\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\tconst mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true);\n\t\t\treturn new MovedText(m, mappings);\n\t\t});\n\t\treturn movesWithDiffs;\n\t}\n\n\tprivate refineDiff(originalLines: string[], modifiedLines: string[], diff: SequenceDiff, timeout: ITimeout, considerWhitespaceChanges: boolean, options: ILinesDiffComputerOptions): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst diffResult = slice1.length + slice2.length < 500\n\t\t\t? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tconst check = false;\n\n\t\tlet diffs = diffResult.diffs;\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\tif (check) { RangeMapping.assertSorted(result); }\n\n\t\t// Assert: result applied on original should be the same as diff applied to original\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout: diffResult.hitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts","vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts"],"names":[],"mappings":"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","file":"defaultLinesDiffComputer.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 { equals } from '../../../../base/common/arrays.js';\nimport { assertFn } from '../../../../base/common/assert.js';\nimport { LineRange } from '../../core/ranges/lineRange.js';\nimport { OffsetRange } from '../../core/ranges/offsetRange.js';\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { ArrayText } from '../../core/text/abstractText.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from '../linesDiffComputer.js';\nimport { DetailedLineRangeMapping, LineRangeMapping, lineRangeMappingFromRangeMappings, RangeMapping } from '../rangeMapping.js';\nimport { DateTimeout, InfiniteTimeout, ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';\nimport { computeMovedLines } from './computeMovedLines.js';\nimport { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport class DefaultLinesDiffComputer implements ILinesDiffComputer {\n\tprivate readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\treturn this._computeDiff(originalLines, modifiedLines, options);\n\t}\n\n\tprivate _computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions, rawChanges?: RangeMapping[]): LinesDiff {\n\t\tif (originalLines.length <= 1 && equals(originalLines, modifiedLines, (a, b) => a === b)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\tconst rangeMapping = new RangeMapping(\n\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t);\n\t\t\trawChanges?.push(rangeMapping);\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[rangeMapping]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this.dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this.myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options, rawChanges);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tassertFn(() => diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart);\n\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options, rawChanges);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original, modified);\n\n\t\tlet moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tmoves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges, options);\n\t\t}\n\n\t\t// Make sure all ranges are valid\n\t\tassertFn(() => {\n\t\t\tfunction validatePosition(pos: Position, lines: string[]): boolean {\n\t\t\t\tif (pos.lineNumber < 1 || pos.lineNumber > lines.length) { return false; }\n\t\t\t\tconst line = lines[pos.lineNumber - 1];\n\t\t\t\tif (pos.column < 1 || pos.column > line.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction validateRange(range: LineRange, lines: string[]): boolean {\n\t\t\t\tif (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) { return false; }\n\t\t\t\tif (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const c of changes) {\n\t\t\t\tif (!c.innerChanges) { return false; }\n\t\t\t\tfor (const ic of c.innerChanges) {\n\t\t\t\t\tconst valid = validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) &&\n\t\t\t\t\t\tvalidatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate computeMoves(\n\t\tchanges: DetailedLineRangeMapping[],\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\thashedOriginalLines: number[],\n\t\thashedModifiedLines: number[],\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions,\n\t): MovedText[] {\n\t\tconst moves = computeMovedLines(\n\t\t\tchanges,\n\t\t\toriginalLines,\n\t\t\tmodifiedLines,\n\t\t\thashedOriginalLines,\n\t\t\thashedModifiedLines,\n\t\t\ttimeout,\n\t\t);\n\t\tconst movesWithDiffs = moves.map(m => {\n\t\t\tconst moveChanges = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\tm.original.toOffsetRange(),\n\t\t\t\tm.modified.toOffsetRange(),\n\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\tconst mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true);\n\t\t\treturn new MovedText(m, mappings);\n\t\t});\n\t\treturn movesWithDiffs;\n\t}\n\n\tprivate refineDiff(originalLines: string[], modifiedLines: string[], diff: SequenceDiff, timeout: ITimeout, considerWhitespaceChanges: boolean, options: ILinesDiffComputerOptions, rawChanges?: RangeMapping[]): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst useDynamicProgramming = slice1.length + slice2.length < 500;\n\t\tconst diffResult = useDynamicProgramming\n\t\t\t? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tlet hitTimeout = diffResult.hitTimeout;\n\t\tif (rawChanges) {\n\t\t\t// The small-slice display algorithm favors consecutive matches over the longest common subsequence.\n\t\t\tconst rawResult = useDynamicProgramming && !hitTimeout ? this.myersDiffingAlgorithm.compute(slice1, slice2, timeout) : diffResult;\n\t\t\thitTimeout ||= rawResult.hitTimeout;\n\t\t\tfor (const change of rawResult.diffs) {\n\t\t\t\trawChanges.push(new RangeMapping(slice1.translateRange(change.seq1Range), slice2.translateRange(change.seq2Range)));\n\t\t\t}\n\t\t}\n\n\t\tconst check = false;\n\n\t\tlet diffs = diffResult.diffs;\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\tif (check) { RangeMapping.assertSorted(result); }\n\n\t\t// Assert: result applied on original should be the same as diff applied to original\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\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 { equals } from '../../../../base/common/arrays.js';\nimport { assertFn } from '../../../../base/common/assert.js';\nimport { LineRange } from '../../core/ranges/lineRange.js';\nimport { OffsetRange } from '../../core/ranges/offsetRange.js';\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { ArrayText } from '../../core/text/abstractText.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from '../linesDiffComputer.js';\nimport { DetailedLineRangeMapping, LineRangeMapping, lineRangeMappingFromRangeMappings, RangeMapping } from '../rangeMapping.js';\nimport { DateTimeout, InfiniteTimeout, ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';\nimport { computeMovedLines } from './computeMovedLines.js';\nimport { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport class DefaultLinesDiffComputer implements ILinesDiffComputer {\n\tprivate readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\treturn this._computeDiff(originalLines, modifiedLines, options);\n\t}\n\n\tprivate _computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions, rawChanges?: RangeMapping[]): LinesDiff {\n\t\tif (originalLines.length <= 1 && equals(originalLines, modifiedLines, (a, b) => a === b)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\tconst rangeMapping = new RangeMapping(\n\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t);\n\t\t\trawChanges?.push(rangeMapping);\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[rangeMapping]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this.dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this.myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options, rawChanges);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tassertFn(() => diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart);\n\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options, rawChanges);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original, modified);\n\n\t\tlet moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tmoves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges, options);\n\t\t}\n\n\t\t// Make sure all ranges are valid\n\t\tassertFn(() => {\n\t\t\tfunction validatePosition(pos: Position, lines: string[]): boolean {\n\t\t\t\tif (pos.lineNumber < 1 || pos.lineNumber > lines.length) { return false; }\n\t\t\t\tconst line = lines[pos.lineNumber - 1];\n\t\t\t\tif (pos.column < 1 || pos.column > line.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction validateRange(range: LineRange, lines: string[]): boolean {\n\t\t\t\tif (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) { return false; }\n\t\t\t\tif (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) { return false; }\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const c of changes) {\n\t\t\t\tif (!c.innerChanges) { return false; }\n\t\t\t\tfor (const ic of c.innerChanges) {\n\t\t\t\t\tconst valid = validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) &&\n\t\t\t\t\t\tvalidatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate computeMoves(\n\t\tchanges: DetailedLineRangeMapping[],\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\thashedOriginalLines: number[],\n\t\thashedModifiedLines: number[],\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions,\n\t): MovedText[] {\n\t\tconst moves = computeMovedLines(\n\t\t\tchanges,\n\t\t\toriginalLines,\n\t\t\tmodifiedLines,\n\t\t\thashedOriginalLines,\n\t\t\thashedModifiedLines,\n\t\t\ttimeout,\n\t\t);\n\t\tconst movesWithDiffs = moves.map(m => {\n\t\t\tconst moveChanges = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\tm.original.toOffsetRange(),\n\t\t\t\tm.modified.toOffsetRange(),\n\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\tconst mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true);\n\t\t\treturn new MovedText(m, mappings);\n\t\t});\n\t\treturn movesWithDiffs;\n\t}\n\n\tprivate refineDiff(originalLines: string[], modifiedLines: string[], diff: SequenceDiff, timeout: ITimeout, considerWhitespaceChanges: boolean, options: ILinesDiffComputerOptions, rawChanges?: RangeMapping[]): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst useDynamicProgramming = slice1.length + slice2.length < 500;\n\t\tconst diffResult = useDynamicProgramming\n\t\t\t? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tlet hitTimeout = diffResult.hitTimeout;\n\t\tif (rawChanges) {\n\t\t\t// The small-slice display algorithm favors consecutive matches over the longest common subsequence.\n\t\t\tconst rawResult = useDynamicProgramming && !hitTimeout ? this.myersDiffingAlgorithm.compute(slice1, slice2, timeout) : diffResult;\n\t\t\thitTimeout ||= rawResult.hitTimeout;\n\t\t\tfor (const change of rawResult.diffs) {\n\t\t\t\trawChanges.push(new RangeMapping(slice1.translateRange(change.seq1Range), slice2.translateRange(change.seq2Range)));\n\t\t\t}\n\t\t}\n\n\t\tconst check = false;\n\n\t\tlet diffs = diffResult.diffs;\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\t\tif (check) { SequenceDiff.assertSorted(diffs); }\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\tif (check) { RangeMapping.assertSorted(result); }\n\n\t\t// Assert: result applied on original should be the same as diff applied to original\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/diff/documentDiffProvider.ts","vs/editor/common/diff/documentDiffProvider.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/diff/documentDiffProvider.ts","vs/editor/common/diff/documentDiffProvider.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAiFhG,MAAM,CAAC,MAAM,gBAAgB,GAAkB,MAAM,CAAC,MAAM,CAAC;IAC5D,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;CACxB,CAAC,CAAC","file":"documentDiffProvider.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 { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Event } from '../../../base/common/event.js';\nimport { MovedText } from './linesDiffComputer.js';\nimport { DetailedLineRangeMapping } from './rangeMapping.js';\nimport { LinesDiffValidity } from './verifyLinesDiff.js';\nimport { ITextModel } from '../model.js';\n\n/**\n * A document diff provider computes the diff between two text models.\n * @internal\n */\nexport interface IDocumentDiffProvider {\n\t/**\n\t * Computes the diff between the text models `original` and `modified`.\n\t */\n\tcomputeDiff(original: ITextModel, modified: ITextModel, options: IDocumentDiffProviderOptions, cancellationToken: CancellationToken): Promise<IDocumentDiff>;\n\n\t/**\n\t * Is fired when settings of the diff algorithm change that could alter the result of the diffing computation.\n\t * Any user of this provider should recompute the diff when this event is fired.\n\t */\n\treadonly onDidChange: Event<void>;\n}\n\n/**\n * Options for the diff computation.\n * @internal\n */\nexport interface IDocumentDiffProviderOptions {\n\t/**\n\t * When set to true, the diff should ignore whitespace changes.\n\t */\n\tignoreTrimWhitespace: boolean;\n\n\t/**\n\t * A diff computation should throw if it takes longer than this value.\n\t */\n\tmaxComputationTimeMs: number;\n\n\t/**\n\t * If set, the diff computation should compute moves in addition to insertions and deletions.\n\t */\n\tcomputeMoves: boolean;\n}\n\n/**\n * Represents a diff between two text models.\n * @internal\n */\nexport interface IDocumentDiff {\n\t/**\n\t * If true, both text models are identical (byte-wise).\n\t */\n\treadonly identical: boolean;\n\n\t/**\n\t * If true, the diff computation timed out and the diff might not be accurate.\n\t */\n\treadonly quitEarly: boolean;\n\n\t/**\n\t * Maps all modified line ranges in the original to the corresponding line ranges in the modified text model.\n\t */\n\treadonly changes: readonly DetailedLineRangeMapping[];\n\n\t/**\n\t * Sorted by original line ranges.\n\t * The original line ranges and the modified line ranges must be disjoint (but can be touching).\n\t */\n\treadonly moves: readonly MovedText[];\n\n\t/**\n\t * Whether applying the changes to the original reproduces the modified text.\n\t * Only set if verification was requested, which happens for a sample of diffs.\n\t */\n\treadonly validity?: LinesDiffValidity;\n}\n\n\nexport const nullDocumentDiff: IDocumentDiff = Object.freeze({\n\tidentical: true,\n\tquitEarly: false,\n\tchanges: Object.freeze([]),\n\tmoves: Object.freeze([])\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 { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Event } from '../../../base/common/event.js';\nimport { MovedText } from './linesDiffComputer.js';\nimport { DetailedLineRangeMapping } from './rangeMapping.js';\nimport { LinesDiffValidity } from './verifyLinesDiff.js';\nimport { ITextModel } from '../model.js';\n\n/**\n * A document diff provider computes the diff between two text models.\n * @internal\n */\nexport interface IDocumentDiffProvider {\n\t/**\n\t * Computes the diff between the text models `original` and `modified`.\n\t */\n\tcomputeDiff(original: ITextModel, modified: ITextModel, options: IDocumentDiffProviderOptions, cancellationToken: CancellationToken): Promise<IDocumentDiff>;\n\n\t/**\n\t * Is fired when settings of the diff algorithm change that could alter the result of the diffing computation.\n\t * Any user of this provider should recompute the diff when this event is fired.\n\t */\n\treadonly onDidChange: Event<void>;\n}\n\n/**\n * Options for the diff computation.\n * @internal\n */\nexport interface IDocumentDiffProviderOptions {\n\t/**\n\t * When set to true, the diff should ignore whitespace changes.\n\t */\n\tignoreTrimWhitespace: boolean;\n\n\t/**\n\t * A diff computation should throw if it takes longer than this value.\n\t */\n\tmaxComputationTimeMs: number;\n\n\t/**\n\t * If set, the diff computation should compute moves in addition to insertions and deletions.\n\t */\n\tcomputeMoves: boolean;\n}\n\n/**\n * Represents a diff between two text models.\n * @internal\n */\nexport interface IDocumentDiff {\n\t/**\n\t * If true, both text models are identical (byte-wise).\n\t */\n\treadonly identical: boolean;\n\n\t/**\n\t * If true, the diff computation timed out and the diff might not be accurate.\n\t */\n\treadonly quitEarly: boolean;\n\n\t/**\n\t * Maps all modified line ranges in the original to the corresponding line ranges in the modified text model.\n\t */\n\treadonly changes: readonly DetailedLineRangeMapping[];\n\n\t/**\n\t * Sorted by original line ranges.\n\t * The original line ranges and the modified line ranges must be disjoint (but can be touching).\n\t */\n\treadonly moves: readonly MovedText[];\n\n\t/**\n\t * Whether applying the changes to the original reproduces the modified text.\n\t * Only set if verification was requested, which happens for a sample of diffs.\n\t */\n\treadonly validity?: LinesDiffValidity;\n}\n\n\nexport const nullDocumentDiff: IDocumentDiff = Object.freeze({\n\tidentical: true,\n\tquitEarly: false,\n\tchanges: Object.freeze([]),\n\tmoves: Object.freeze([])\n});\n"]}
|
|
@@ -10,8 +10,6 @@ import { ensureDependenciesAreSet } from '../core/text/positionToOffset.js';
|
|
|
10
10
|
import { LinesDiff, MovedText } from './linesDiffComputer.js';
|
|
11
11
|
import { lineRangeMappingFromRangeMappings, LineRangeMapping, RangeMapping } from './rangeMapping.js';
|
|
12
12
|
let externalModulePromise;
|
|
13
|
-
let externalDiffComputerPromise;
|
|
14
|
-
let externalWasmDiffComputerPromise;
|
|
15
13
|
function loadExternalModule() {
|
|
16
14
|
if (!externalModulePromise) {
|
|
17
15
|
const url = resolveAmdNodeModulePath('@vscode/diff', 'dist/index.js');
|
|
@@ -20,22 +18,21 @@ function loadExternalModule() {
|
|
|
20
18
|
}
|
|
21
19
|
return externalModulePromise;
|
|
22
20
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
if (!externalDiffComputerPromise) {
|
|
31
|
-
externalDiffComputerPromise = loadExternalModule().then(m => m.createDiffComputer({ useWasm: false }));
|
|
21
|
+
const externalComputers = new Map();
|
|
22
|
+
export function getExternalLinesDiffComputer(useWasm) {
|
|
23
|
+
let computer = externalComputers.get(useWasm);
|
|
24
|
+
if (!computer) {
|
|
25
|
+
computer = loadExternalModule().then(m => createExternalLinesDiffComputer(m, useWasm));
|
|
26
|
+
externalComputers.set(useWasm, computer);
|
|
32
27
|
}
|
|
33
|
-
return
|
|
28
|
+
return computer;
|
|
34
29
|
}
|
|
35
|
-
export async function
|
|
36
|
-
|
|
37
|
-
return new ExternalLinesDiffComputer(computer);
|
|
30
|
+
export async function createExternalLinesDiffComputer(externalModule, useWasm) {
|
|
31
|
+
return new ExternalLinesDiffComputer(await externalModule.createDiffComputer({ useWasm }));
|
|
38
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Adapts the offset-based string edit of `@vscode/diff` to line range mappings.
|
|
35
|
+
*/
|
|
39
36
|
class ExternalLinesDiffComputer {
|
|
40
37
|
constructor(_computer) {
|
|
41
38
|
this._computer = _computer;
|
|
@@ -44,12 +41,11 @@ class ExternalLinesDiffComputer {
|
|
|
44
41
|
ensureDependenciesAreSet();
|
|
45
42
|
const originalText = new StringText(originalLines.join('\n'));
|
|
46
43
|
const modifiedText = new StringText(modifiedLines.join('\n'));
|
|
44
|
+
// Always diff whitespace, so that the edit reproduces the modified text.
|
|
45
|
+
// Ignoring trim whitespace only hides some of its replacements.
|
|
47
46
|
const result = this._computer.computeDiff(originalText.value, modifiedText.value, {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// ignoreTrimWhitespace: options.ignoreTrimWhitespace,
|
|
51
|
-
// TODO: support this. Currently throws with "Time is not implemented in this environment."
|
|
52
|
-
// maxComputationTimeMs: options.maxComputationTimeMs,
|
|
47
|
+
ignoreTrimWhitespace: false,
|
|
48
|
+
// TODO: forward `maxComputationTimeMs` after updating @vscode/diff. The wasm build of the pinned version panics when measuring time.
|
|
53
49
|
computeMoves: options.computeMoves,
|
|
54
50
|
extendToSubwords: options.extendToSubwords,
|
|
55
51
|
});
|
|
@@ -58,12 +54,13 @@ class ExternalLinesDiffComputer {
|
|
|
58
54
|
const rangeMappings = [];
|
|
59
55
|
let delta = 0;
|
|
60
56
|
for (const r of result.edits.replacements) {
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
57
|
+
const originalRange = new OffsetRange(r.range.start, r.range.endExclusive);
|
|
58
|
+
const modifiedRange = new OffsetRange(r.range.start + delta, r.range.start + delta + r.newText.length);
|
|
59
|
+
delta += r.newText.length - originalRange.length;
|
|
60
|
+
if (options.ignoreTrimWhitespace && isInTrimWhitespace(originalText.value, originalRange) && isInTrimWhitespace(modifiedText.value, modifiedRange)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
rangeMappings.push(new RangeMapping(originalTransformer.getRange(originalRange), modifiedTransformer.getRange(modifiedRange)));
|
|
67
64
|
}
|
|
68
65
|
const changes = lineRangeMappingFromRangeMappings(rangeMappings, originalText, modifiedText);
|
|
69
66
|
const moves = [];
|
|
@@ -81,4 +78,19 @@ class ExternalLinesDiffComputer {
|
|
|
81
78
|
return new LinesDiff(changes, moves, result.hitTimeout);
|
|
82
79
|
}
|
|
83
80
|
}
|
|
81
|
+
const whitespaceWithoutLineBreak = /^[^\S\n]*$/;
|
|
82
|
+
/**
|
|
83
|
+
* Whether `range` only covers whitespace before the first or after the last non-whitespace character of a single line.
|
|
84
|
+
* Changes to such whitespace are hidden when ignoring trim whitespace.
|
|
85
|
+
*/
|
|
86
|
+
function isInTrimWhitespace(text, range) {
|
|
87
|
+
if (!whitespaceWithoutLineBreak.test(range.substring(text))) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const lineStart = range.start === 0 ? 0 : text.lastIndexOf('\n', range.start - 1) + 1;
|
|
91
|
+
const nextLineBreak = text.indexOf('\n', range.endExclusive);
|
|
92
|
+
const lineEnd = nextLineBreak === -1 ? text.length : nextLineBreak;
|
|
93
|
+
return whitespaceWithoutLineBreak.test(text.substring(lineStart, range.start))
|
|
94
|
+
|| whitespaceWithoutLineBreak.test(text.substring(range.endExclusive, lineEnd));
|
|
95
|
+
}
|
|
84
96
|
//# sourceMappingURL=externalLinesDiffComputer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/diff/externalLinesDiffComputer.ts","vs/editor/common/diff/externalLinesDiffComputer.ts"],"names":[],"mappings":"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","file":"externalLinesDiffComputer.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 { IDiffComputer as IExternalDiffComputer, createDiffComputer as createExternalDiffComputer } from '@vscode/diff';\nimport { resolveAmdNodeModulePath } from '../../../amdX.js';\nimport { LineRange } from '../core/ranges/lineRange.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { StringText } from '../core/text/abstractText.js';\nimport { ensureDependenciesAreSet } from '../core/text/positionToOffset.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from './linesDiffComputer.js';\nimport { lineRangeMappingFromRangeMappings, LineRangeMapping, RangeMapping } from './rangeMapping.js';\n\ntype ExternalDiffModule = { createDiffComputer: typeof createExternalDiffComputer };\n\nlet externalModulePromise: Promise<ExternalDiffModule> | undefined;\nlet externalDiffComputerPromise: Promise<IExternalDiffComputer> | undefined;\nlet externalWasmDiffComputerPromise: Promise<IExternalDiffComputer> | undefined;\n\nfunction loadExternalModule(): Promise<ExternalDiffModule> {\n\tif (!externalModulePromise) {\n\t\tconst url = resolveAmdNodeModulePath('@vscode/diff', 'dist/index.js');\n\t\t// Use a runtime-computed URL to keep bundlers from rewriting the import.\n\t\texternalModulePromise = import(/* webpackIgnore: true */ /* @vite-ignore */ `${url}`) as Promise<ExternalDiffModule>;\n\t}\n\treturn externalModulePromise;\n}\n\nfunction loadExternalComputer(useWasm: boolean): Promise<IExternalDiffComputer> {\n\tif (useWasm) {\n\t\tif (!externalWasmDiffComputerPromise) {\n\t\t\texternalWasmDiffComputerPromise = loadExternalModule().then(m => m.createDiffComputer({ useWasm: true }));\n\t\t}\n\t\treturn externalWasmDiffComputerPromise;\n\t}\n\tif (!externalDiffComputerPromise) {\n\t\texternalDiffComputerPromise = loadExternalModule().then(m => m.createDiffComputer({ useWasm: false }));\n\t}\n\treturn externalDiffComputerPromise;\n}\n\nexport async function getExternalLinesDiffComputer(useWasm: boolean): Promise<ILinesDiffComputer> {\n\tconst computer = await loadExternalComputer(useWasm);\n\treturn new ExternalLinesDiffComputer(computer);\n}\n\nclass ExternalLinesDiffComputer implements ILinesDiffComputer {\n\tconstructor(private readonly _computer: IExternalDiffComputer) { }\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\tensureDependenciesAreSet();\n\n\t\tconst originalText = new StringText(originalLines.join('\\n'));\n\t\tconst modifiedText = new StringText(modifiedLines.join('\\n'));\n\n\t\tconst result = this._computer.computeDiff(originalText.value, modifiedText.value, {\n\t\t\t// TODO: this currently throws\n\t\t\tignoreTrimWhitespace: true,\n\t\t\t// ignoreTrimWhitespace: options.ignoreTrimWhitespace,\n\t\t\t// TODO: support this. Currently throws with \"Time is not implemented in this environment.\"\n\t\t\t// maxComputationTimeMs: options.maxComputationTimeMs,\n\t\t\tcomputeMoves: options.computeMoves,\n\t\t\textendToSubwords: options.extendToSubwords,\n\t\t});\n\n\t\tconst originalTransformer = originalText.getTransformer();\n\t\tconst modifiedTransformer = modifiedText.getTransformer();\n\n\t\tconst rangeMappings: RangeMapping[] = [];\n\t\tlet delta = 0;\n\t\tfor (const r of result.edits.replacements) {\n\t\t\tconst modifiedStart = r.range.start + delta;\n\t\t\tconst modifiedEndExclusive = modifiedStart + r.newText.length;\n\t\t\tconst originalRange = originalTransformer.getRange(new OffsetRange(r.range.start, r.range.endExclusive));\n\t\t\tconst modifiedRange = modifiedTransformer.getRange(new OffsetRange(modifiedStart, modifiedEndExclusive));\n\t\t\trangeMappings.push(new RangeMapping(originalRange, modifiedRange));\n\t\t\tdelta += r.newText.length - (r.range.endExclusive - r.range.start);\n\t\t}\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(rangeMappings, originalText, modifiedText);\n\n\t\tconst moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tfor (const move of result.moves) {\n\t\t\t\tconst originalStartPos = originalTransformer.getPosition(move.range.original.start);\n\t\t\t\tconst originalEndPos = originalTransformer.getPosition(move.range.original.endExclusive);\n\t\t\t\tconst modifiedStartPos = modifiedTransformer.getPosition(move.range.modified.start);\n\t\t\t\tconst modifiedEndPos = modifiedTransformer.getPosition(move.range.modified.endExclusive);\n\t\t\t\tconst originalLineRange = new LineRange(originalStartPos.lineNumber, originalEndPos.lineNumber);\n\t\t\t\tconst modifiedLineRange = new LineRange(modifiedStartPos.lineNumber, modifiedEndPos.lineNumber);\n\t\t\t\tmoves.push(new MovedText(new LineRangeMapping(originalLineRange, modifiedLineRange), []));\n\t\t\t}\n\t\t}\n\n\t\treturn new LinesDiff(changes, moves, result.hitTimeout);\n\t}\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 { IDiffComputer as IExternalDiffComputer, createDiffComputer as createExternalDiffComputer } from '@vscode/diff';\nimport { resolveAmdNodeModulePath } from '../../../amdX.js';\nimport { LineRange } from '../core/ranges/lineRange.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { StringText } from '../core/text/abstractText.js';\nimport { ensureDependenciesAreSet } from '../core/text/positionToOffset.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from './linesDiffComputer.js';\nimport { lineRangeMappingFromRangeMappings, LineRangeMapping, RangeMapping } from './rangeMapping.js';\n\ntype ExternalDiffModule = { createDiffComputer: typeof createExternalDiffComputer };\n\nlet externalModulePromise: Promise<ExternalDiffModule> | undefined;\nlet externalDiffComputerPromise: Promise<IExternalDiffComputer> | undefined;\nlet externalWasmDiffComputerPromise: Promise<IExternalDiffComputer> | undefined;\n\nfunction loadExternalModule(): Promise<ExternalDiffModule> {\n\tif (!externalModulePromise) {\n\t\tconst url = resolveAmdNodeModulePath('@vscode/diff', 'dist/index.js');\n\t\t// Use a runtime-computed URL to keep bundlers from rewriting the import.\n\t\texternalModulePromise = import(/* webpackIgnore: true */ /* @vite-ignore */ `${url}`) as Promise<ExternalDiffModule>;\n\t}\n\treturn externalModulePromise;\n}\n\nfunction loadExternalComputer(useWasm: boolean): Promise<IExternalDiffComputer> {\n\tif (useWasm) {\n\t\tif (!externalWasmDiffComputerPromise) {\n\t\t\texternalWasmDiffComputerPromise = loadExternalModule().then(m => m.createDiffComputer({ useWasm: true }));\n\t\t}\n\t\treturn externalWasmDiffComputerPromise;\n\t}\n\tif (!externalDiffComputerPromise) {\n\t\texternalDiffComputerPromise = loadExternalModule().then(m => m.createDiffComputer({ useWasm: false }));\n\t}\n\treturn externalDiffComputerPromise;\n}\n\nexport async function getExternalLinesDiffComputer(useWasm: boolean): Promise<ILinesDiffComputer> {\n\tconst computer = await loadExternalComputer(useWasm);\n\treturn new ExternalLinesDiffComputer(computer);\n}\n\nclass ExternalLinesDiffComputer implements ILinesDiffComputer {\n\tconstructor(private readonly _computer: IExternalDiffComputer) { }\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\tensureDependenciesAreSet();\n\n\t\tconst originalText = new StringText(originalLines.join('\\n'));\n\t\tconst modifiedText = new StringText(modifiedLines.join('\\n'));\n\n\t\tconst result = this._computer.computeDiff(originalText.value, modifiedText.value, {\n\t\t\t// TODO: this currently throws\n\t\t\tignoreTrimWhitespace: true,\n\t\t\t// ignoreTrimWhitespace: options.ignoreTrimWhitespace,\n\t\t\t// TODO: support this. Currently throws with \"Time is not implemented in this environment.\"\n\t\t\t// maxComputationTimeMs: options.maxComputationTimeMs,\n\t\t\tcomputeMoves: options.computeMoves,\n\t\t\textendToSubwords: options.extendToSubwords,\n\t\t});\n\n\t\tconst originalTransformer = originalText.getTransformer();\n\t\tconst modifiedTransformer = modifiedText.getTransformer();\n\n\t\tconst rangeMappings: RangeMapping[] = [];\n\t\tlet delta = 0;\n\t\tfor (const r of result.edits.replacements) {\n\t\t\tconst modifiedStart = r.range.start + delta;\n\t\t\tconst modifiedEndExclusive = modifiedStart + r.newText.length;\n\t\t\tconst originalRange = originalTransformer.getRange(new OffsetRange(r.range.start, r.range.endExclusive));\n\t\t\tconst modifiedRange = modifiedTransformer.getRange(new OffsetRange(modifiedStart, modifiedEndExclusive));\n\t\t\trangeMappings.push(new RangeMapping(originalRange, modifiedRange));\n\t\t\tdelta += r.newText.length - (r.range.endExclusive - r.range.start);\n\t\t}\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(rangeMappings, originalText, modifiedText);\n\n\t\tconst moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tfor (const move of result.moves) {\n\t\t\t\tconst originalStartPos = originalTransformer.getPosition(move.range.original.start);\n\t\t\t\tconst originalEndPos = originalTransformer.getPosition(move.range.original.endExclusive);\n\t\t\t\tconst modifiedStartPos = modifiedTransformer.getPosition(move.range.modified.start);\n\t\t\t\tconst modifiedEndPos = modifiedTransformer.getPosition(move.range.modified.endExclusive);\n\t\t\t\tconst originalLineRange = new LineRange(originalStartPos.lineNumber, originalEndPos.lineNumber);\n\t\t\t\tconst modifiedLineRange = new LineRange(modifiedStartPos.lineNumber, modifiedEndPos.lineNumber);\n\t\t\t\tmoves.push(new MovedText(new LineRangeMapping(originalLineRange, modifiedLineRange), []));\n\t\t\t}\n\t\t}\n\n\t\treturn new LinesDiff(changes, moves, result.hitTimeout);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/diff/externalLinesDiffComputer.ts","vs/editor/common/diff/externalLinesDiffComputer.ts"],"names":[],"mappings":"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","file":"externalLinesDiffComputer.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 { IDiffComputer as IExternalDiffComputer, createDiffComputer as createExternalDiffComputer } from '@vscode/diff';\nimport { resolveAmdNodeModulePath } from '../../../amdX.js';\nimport { LineRange } from '../core/ranges/lineRange.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { StringText } from '../core/text/abstractText.js';\nimport { ensureDependenciesAreSet } from '../core/text/positionToOffset.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from './linesDiffComputer.js';\nimport { lineRangeMappingFromRangeMappings, LineRangeMapping, RangeMapping } from './rangeMapping.js';\n\ntype ExternalDiffModule = { createDiffComputer: typeof createExternalDiffComputer };\n\nlet externalModulePromise: Promise<ExternalDiffModule> | undefined;\n\nfunction loadExternalModule(): Promise<ExternalDiffModule> {\n\tif (!externalModulePromise) {\n\t\tconst url = resolveAmdNodeModulePath('@vscode/diff', 'dist/index.js');\n\t\t// Use a runtime-computed URL to keep bundlers from rewriting the import.\n\t\texternalModulePromise = import(/* webpackIgnore: true */ /* @vite-ignore */ `${url}`) as Promise<ExternalDiffModule>;\n\t}\n\treturn externalModulePromise;\n}\n\nconst externalComputers = new Map<boolean, Promise<ILinesDiffComputer>>();\n\nexport function getExternalLinesDiffComputer(useWasm: boolean): Promise<ILinesDiffComputer> {\n\tlet computer = externalComputers.get(useWasm);\n\tif (!computer) {\n\t\tcomputer = loadExternalModule().then(m => createExternalLinesDiffComputer(m, useWasm));\n\t\texternalComputers.set(useWasm, computer);\n\t}\n\treturn computer;\n}\n\nexport async function createExternalLinesDiffComputer(externalModule: ExternalDiffModule, useWasm: boolean): Promise<ILinesDiffComputer> {\n\treturn new ExternalLinesDiffComputer(await externalModule.createDiffComputer({ useWasm }));\n}\n\n/**\n * Adapts the offset-based string edit of `@vscode/diff` to line range mappings.\n */\nclass ExternalLinesDiffComputer implements ILinesDiffComputer {\n\tconstructor(private readonly _computer: IExternalDiffComputer) { }\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\tensureDependenciesAreSet();\n\n\t\tconst originalText = new StringText(originalLines.join('\\n'));\n\t\tconst modifiedText = new StringText(modifiedLines.join('\\n'));\n\n\t\t// Always diff whitespace, so that the edit reproduces the modified text.\n\t\t// Ignoring trim whitespace only hides some of its replacements.\n\t\tconst result = this._computer.computeDiff(originalText.value, modifiedText.value, {\n\t\t\tignoreTrimWhitespace: false,\n\t\t\t// TODO: forward `maxComputationTimeMs` after updating @vscode/diff. The wasm build of the pinned version panics when measuring time.\n\t\t\tcomputeMoves: options.computeMoves,\n\t\t\textendToSubwords: options.extendToSubwords,\n\t\t});\n\n\t\tconst originalTransformer = originalText.getTransformer();\n\t\tconst modifiedTransformer = modifiedText.getTransformer();\n\n\t\tconst rangeMappings: RangeMapping[] = [];\n\t\tlet delta = 0;\n\t\tfor (const r of result.edits.replacements) {\n\t\t\tconst originalRange = new OffsetRange(r.range.start, r.range.endExclusive);\n\t\t\tconst modifiedRange = new OffsetRange(r.range.start + delta, r.range.start + delta + r.newText.length);\n\t\t\tdelta += r.newText.length - originalRange.length;\n\n\t\t\tif (options.ignoreTrimWhitespace && isInTrimWhitespace(originalText.value, originalRange) && isInTrimWhitespace(modifiedText.value, modifiedRange)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trangeMappings.push(new RangeMapping(originalTransformer.getRange(originalRange), modifiedTransformer.getRange(modifiedRange)));\n\t\t}\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(rangeMappings, originalText, modifiedText);\n\n\t\tconst moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tfor (const move of result.moves) {\n\t\t\t\tconst originalStartPos = originalTransformer.getPosition(move.range.original.start);\n\t\t\t\tconst originalEndPos = originalTransformer.getPosition(move.range.original.endExclusive);\n\t\t\t\tconst modifiedStartPos = modifiedTransformer.getPosition(move.range.modified.start);\n\t\t\t\tconst modifiedEndPos = modifiedTransformer.getPosition(move.range.modified.endExclusive);\n\t\t\t\tconst originalLineRange = new LineRange(originalStartPos.lineNumber, originalEndPos.lineNumber);\n\t\t\t\tconst modifiedLineRange = new LineRange(modifiedStartPos.lineNumber, modifiedEndPos.lineNumber);\n\t\t\t\tmoves.push(new MovedText(new LineRangeMapping(originalLineRange, modifiedLineRange), []));\n\t\t\t}\n\t\t}\n\n\t\treturn new LinesDiff(changes, moves, result.hitTimeout);\n\t}\n}\n\nconst whitespaceWithoutLineBreak = /^[^\\S\\n]*$/;\n\n/**\n * Whether `range` only covers whitespace before the first or after the last non-whitespace character of a single line.\n * Changes to such whitespace are hidden when ignoring trim whitespace.\n */\nfunction isInTrimWhitespace(text: string, range: OffsetRange): boolean {\n\tif (!whitespaceWithoutLineBreak.test(range.substring(text))) {\n\t\treturn false;\n\t}\n\tconst lineStart = range.start === 0 ? 0 : text.lastIndexOf('\\n', range.start - 1) + 1;\n\tconst nextLineBreak = text.indexOf('\\n', range.endExclusive);\n\tconst lineEnd = nextLineBreak === -1 ? text.length : nextLineBreak;\n\treturn whitespaceWithoutLineBreak.test(text.substring(lineStart, range.start))\n\t\t|| whitespaceWithoutLineBreak.test(text.substring(range.endExclusive, lineEnd));\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 { IDiffComputer as IExternalDiffComputer, createDiffComputer as createExternalDiffComputer } from '@vscode/diff';\nimport { resolveAmdNodeModulePath } from '../../../amdX.js';\nimport { LineRange } from '../core/ranges/lineRange.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { StringText } from '../core/text/abstractText.js';\nimport { ensureDependenciesAreSet } from '../core/text/positionToOffset.js';\nimport { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from './linesDiffComputer.js';\nimport { lineRangeMappingFromRangeMappings, LineRangeMapping, RangeMapping } from './rangeMapping.js';\n\ntype ExternalDiffModule = { createDiffComputer: typeof createExternalDiffComputer };\n\nlet externalModulePromise: Promise<ExternalDiffModule> | undefined;\n\nfunction loadExternalModule(): Promise<ExternalDiffModule> {\n\tif (!externalModulePromise) {\n\t\tconst url = resolveAmdNodeModulePath('@vscode/diff', 'dist/index.js');\n\t\t// Use a runtime-computed URL to keep bundlers from rewriting the import.\n\t\texternalModulePromise = import(/* webpackIgnore: true */ /* @vite-ignore */ `${url}`) as Promise<ExternalDiffModule>;\n\t}\n\treturn externalModulePromise;\n}\n\nconst externalComputers = new Map<boolean, Promise<ILinesDiffComputer>>();\n\nexport function getExternalLinesDiffComputer(useWasm: boolean): Promise<ILinesDiffComputer> {\n\tlet computer = externalComputers.get(useWasm);\n\tif (!computer) {\n\t\tcomputer = loadExternalModule().then(m => createExternalLinesDiffComputer(m, useWasm));\n\t\texternalComputers.set(useWasm, computer);\n\t}\n\treturn computer;\n}\n\nexport async function createExternalLinesDiffComputer(externalModule: ExternalDiffModule, useWasm: boolean): Promise<ILinesDiffComputer> {\n\treturn new ExternalLinesDiffComputer(await externalModule.createDiffComputer({ useWasm }));\n}\n\n/**\n * Adapts the offset-based string edit of `@vscode/diff` to line range mappings.\n */\nclass ExternalLinesDiffComputer implements ILinesDiffComputer {\n\tconstructor(private readonly _computer: IExternalDiffComputer) { }\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\tensureDependenciesAreSet();\n\n\t\tconst originalText = new StringText(originalLines.join('\\n'));\n\t\tconst modifiedText = new StringText(modifiedLines.join('\\n'));\n\n\t\t// Always diff whitespace, so that the edit reproduces the modified text.\n\t\t// Ignoring trim whitespace only hides some of its replacements.\n\t\tconst result = this._computer.computeDiff(originalText.value, modifiedText.value, {\n\t\t\tignoreTrimWhitespace: false,\n\t\t\t// TODO: forward `maxComputationTimeMs` after updating @vscode/diff. The wasm build of the pinned version panics when measuring time.\n\t\t\tcomputeMoves: options.computeMoves,\n\t\t\textendToSubwords: options.extendToSubwords,\n\t\t});\n\n\t\tconst originalTransformer = originalText.getTransformer();\n\t\tconst modifiedTransformer = modifiedText.getTransformer();\n\n\t\tconst rangeMappings: RangeMapping[] = [];\n\t\tlet delta = 0;\n\t\tfor (const r of result.edits.replacements) {\n\t\t\tconst originalRange = new OffsetRange(r.range.start, r.range.endExclusive);\n\t\t\tconst modifiedRange = new OffsetRange(r.range.start + delta, r.range.start + delta + r.newText.length);\n\t\t\tdelta += r.newText.length - originalRange.length;\n\n\t\t\tif (options.ignoreTrimWhitespace && isInTrimWhitespace(originalText.value, originalRange) && isInTrimWhitespace(modifiedText.value, modifiedRange)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trangeMappings.push(new RangeMapping(originalTransformer.getRange(originalRange), modifiedTransformer.getRange(modifiedRange)));\n\t\t}\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(rangeMappings, originalText, modifiedText);\n\n\t\tconst moves: MovedText[] = [];\n\t\tif (options.computeMoves) {\n\t\t\tfor (const move of result.moves) {\n\t\t\t\tconst originalStartPos = originalTransformer.getPosition(move.range.original.start);\n\t\t\t\tconst originalEndPos = originalTransformer.getPosition(move.range.original.endExclusive);\n\t\t\t\tconst modifiedStartPos = modifiedTransformer.getPosition(move.range.modified.start);\n\t\t\t\tconst modifiedEndPos = modifiedTransformer.getPosition(move.range.modified.endExclusive);\n\t\t\t\tconst originalLineRange = new LineRange(originalStartPos.lineNumber, originalEndPos.lineNumber);\n\t\t\t\tconst modifiedLineRange = new LineRange(modifiedStartPos.lineNumber, modifiedEndPos.lineNumber);\n\t\t\t\tmoves.push(new MovedText(new LineRangeMapping(originalLineRange, modifiedLineRange), []));\n\t\t\t}\n\t\t}\n\n\t\treturn new LinesDiff(changes, moves, result.hitTimeout);\n\t}\n}\n\nconst whitespaceWithoutLineBreak = /^[^\\S\\n]*$/;\n\n/**\n * Whether `range` only covers whitespace before the first or after the last non-whitespace character of a single line.\n * Changes to such whitespace are hidden when ignoring trim whitespace.\n */\nfunction isInTrimWhitespace(text: string, range: OffsetRange): boolean {\n\tif (!whitespaceWithoutLineBreak.test(range.substring(text))) {\n\t\treturn false;\n\t}\n\tconst lineStart = range.start === 0 ? 0 : text.lastIndexOf('\\n', range.start - 1) + 1;\n\tconst nextLineBreak = text.indexOf('\\n', range.endExclusive);\n\tconst lineEnd = nextLineBreak === -1 ? text.length : nextLineBreak;\n\treturn whitespaceWithoutLineBreak.test(text.substring(lineStart, range.start))\n\t\t|| whitespaceWithoutLineBreak.test(text.substring(range.endExclusive, lineEnd));\n}"]}
|
|
@@ -8,7 +8,7 @@ import { BugIndicatingError } from '../../../base/common/errors.js';
|
|
|
8
8
|
import { LineRange } from '../core/ranges/lineRange.js';
|
|
9
9
|
import { Position } from '../core/position.js';
|
|
10
10
|
import { Range } from '../core/range.js';
|
|
11
|
-
import { TextReplacement } from '../core/edits/textEdit.js';
|
|
11
|
+
import { TextReplacement, TextEdit } from '../core/edits/textEdit.js';
|
|
12
12
|
/**
|
|
13
13
|
* Maps a line range in the original text model to a line range in the modified text model.
|
|
14
14
|
*/
|
|
@@ -122,6 +122,16 @@ function isValidLineNumber(lineNumber, lines) {
|
|
|
122
122
|
* Also contains inner range mappings.
|
|
123
123
|
*/
|
|
124
124
|
export class DetailedLineRangeMapping extends LineRangeMapping {
|
|
125
|
+
static toTextEdit(mapping, modified) {
|
|
126
|
+
const replacements = [];
|
|
127
|
+
for (const m of mapping) {
|
|
128
|
+
for (const r of m.innerChanges ?? []) {
|
|
129
|
+
const replacement = r.toTextEdit(modified);
|
|
130
|
+
replacements.push(replacement);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return new TextEdit(replacements);
|
|
134
|
+
}
|
|
125
135
|
static fromRangeMappings(rangeMappings) {
|
|
126
136
|
const originalRange = LineRange.join(rangeMappings.map(r => LineRange.fromRangeInclusive(r.originalRange)));
|
|
127
137
|
const modifiedRange = LineRange.join(rangeMappings.map(r => LineRange.fromRangeInclusive(r.modifiedRange)));
|