2023-03-03 07:09:50 +07:00
|
|
|
/*---------------------------------------------------------------------------------------------
|
|
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
import { TextDocument, TextEdit, Position } from 'vscode-languageserver-types';
|
|
|
|
|
|
|
|
export function applyEdits(document: TextDocument, edits: TextEdit[]): string {
|
|
|
|
let text = document.getText();
|
|
|
|
let sortedEdits = edits.sort((a, b) => {
|
|
|
|
let startDiff = comparePositions(a.range.start, b.range.start);
|
|
|
|
if (startDiff === 0) {
|
|
|
|
return comparePositions(a.range.end, b.range.end);
|
|
|
|
}
|
|
|
|
return startDiff;
|
|
|
|
});
|
|
|
|
sortedEdits.forEach(e => {
|
|
|
|
let startOffset = document.offsetAt(e.range.start);
|
|
|
|
let endOffset = document.offsetAt(e.range.end);
|
|
|
|
text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
|
|
|
|
});
|
|
|
|
return text;
|
|
|
|
}
|
|
|
|
|
|
|
|
function comparePositions(p1: Position, p2: Position) {
|
|
|
|
let diff = p2.line - p1.line;
|
|
|
|
if (diff === 0) {
|
|
|
|
return p2.character - p1.character;
|
|
|
|
}
|
|
|
|
return diff;
|
2023-01-15 00:19:37 +07:00
|
|
|
}
|