72 lines
2.6 KiB
Plaintext
72 lines
2.6 KiB
Plaintext
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.transform = void 0;
|
||
|
function transform(textEdit, getOtherRange, document) {
|
||
|
if ('range' in textEdit) {
|
||
|
let range = getOtherRange(textEdit.range);
|
||
|
if (range) {
|
||
|
return {
|
||
|
...textEdit,
|
||
|
range,
|
||
|
};
|
||
|
}
|
||
|
;
|
||
|
const cover = tryRecover(getOtherRange, textEdit.range, textEdit.newText, document);
|
||
|
if (cover) {
|
||
|
return {
|
||
|
...textEdit,
|
||
|
range: cover.range,
|
||
|
newText: cover.newText,
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
else if ('replace' in textEdit && 'insert' in textEdit) {
|
||
|
const insert = getOtherRange(textEdit.insert);
|
||
|
const replace = insert ? getOtherRange(textEdit.replace) : undefined;
|
||
|
if (insert && replace) {
|
||
|
return {
|
||
|
...textEdit,
|
||
|
insert,
|
||
|
replace,
|
||
|
};
|
||
|
}
|
||
|
const recoverInsert = tryRecover(getOtherRange, textEdit.insert, textEdit.newText, document);
|
||
|
const recoverReplace = recoverInsert ? tryRecover(getOtherRange, textEdit.replace, textEdit.newText, document) : undefined;
|
||
|
if (recoverInsert && recoverReplace && recoverInsert.newText === recoverReplace.newText) {
|
||
|
return {
|
||
|
...textEdit,
|
||
|
insert: recoverInsert.range,
|
||
|
replace: recoverReplace.range,
|
||
|
newText: recoverInsert.newText,
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
exports.transform = transform;
|
||
|
/**
|
||
|
* update edit text from ". foo" to " foo"
|
||
|
* fix https://github.com/johnsoncodehk/volar/issues/2155
|
||
|
*/
|
||
|
function tryRecover(getOtherRange, replaceRange, newText, document) {
|
||
|
if (replaceRange.start.line === replaceRange.end.line && replaceRange.end.character > replaceRange.start.character) {
|
||
|
let character = replaceRange.start.character;
|
||
|
while (newText.length && replaceRange.end.character > character) {
|
||
|
const newStart = { line: replaceRange.start.line, character: replaceRange.start.character + 1 };
|
||
|
if (document.getText({ start: replaceRange.start, end: newStart }) === newText[0]) {
|
||
|
newText = newText.slice(1);
|
||
|
character++;
|
||
|
const otherRange = getOtherRange({ start: newStart, end: replaceRange.end });
|
||
|
if (otherRange) {
|
||
|
return {
|
||
|
newText,
|
||
|
range: otherRange,
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//# sourceMappingURL=textEdit.js.map
|