UNPKG

monaco-editor

Version:
33 lines (30 loc) 1.92 kB
import { commonPrefixLength } from '../../../../../base/common/strings.js'; import { Range } from '../../../../common/core/range.js'; import { TextLength } from '../../../../common/core/text/textLength.js'; import { TextReplacement } from '../../../../common/core/edits/textEdit.js'; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ function singleTextRemoveCommonPrefix(edit, model, validModelRange) { const modelRange = validModelRange ? edit.range.intersectRanges(validModelRange) : edit.range; if (!modelRange) { return edit; } const normalizedText = edit.text.replaceAll('\r\n', '\n'); const valueToReplace = model.getValueInRange(modelRange, 1 /* EndOfLinePreference.LF */); const commonPrefixLen = commonPrefixLength(valueToReplace, normalizedText); const start = TextLength.ofText(valueToReplace.substring(0, commonPrefixLen)).addToPosition(edit.range.getStartPosition()); const text = normalizedText.substring(commonPrefixLen); const range = Range.fromPositions(start, edit.range.getEndPosition()); return new TextReplacement(range, text); } function singleTextEditAugments(edit, base) { // The augmented completion must replace the base range, but can replace even more return edit.text.startsWith(base.text) && rangeExtends(edit.range, base.range); } function rangeExtends(extendingRange, rangeToExtend) { return rangeToExtend.getStartPosition().equals(extendingRange.getStartPosition()) && rangeToExtend.getEndPosition().isBeforeOrEqual(extendingRange.getEndPosition()); } export { singleTextEditAugments, singleTextRemoveCommonPrefix };