This commit is contained in:
Christian Gunderman
2026-02-25 18:06:29 -08:00
parent f03b914b0d
commit bc55c2d4ab
2 changed files with 16 additions and 10 deletions
+3
View File
@@ -415,6 +415,9 @@ describe('EditTool', () => {
{ start: 2, end: 3 },
{ start: 5, end: 6 },
]);
expect(result.newContent).toBe(
' line1\n replacement\n line3\n replacement\n line5',
);
});
it('should correctly calculate matchRanges for regex replacements', async () => {
+13 -10
View File
@@ -229,7 +229,7 @@ async function calculateFlexibleReplacement(
let flexibleOccurrences = 0;
const matchRanges: Array<{ start: number; end: number }> = [];
let lineOffset = 0;
let currentOriginalLine = 1;
let i = 0;
while (i <= sourceLines.length - searchLinesStripped.length) {
const window = sourceLines.slice(i, i + searchLinesStripped.length);
@@ -241,21 +241,24 @@ async function calculateFlexibleReplacement(
if (isMatch) {
flexibleOccurrences++;
matchRanges.push({
start: i + 1 - lineOffset,
end: i + searchLinesStripped.length - lineOffset,
start: currentOriginalLine,
end: currentOriginalLine + searchLinesStripped.length - 1,
});
const firstLineInMatch = window[0];
const indentationMatch = firstLineInMatch.match(/^([ \t]*)/);
const indentation = indentationMatch ? indentationMatch[1] : '';
const newBlockWithIndent = applyIndentation(replaceLines, indentation);
sourceLines.splice(
i,
searchLinesStripped.length,
newBlockWithIndent.join('\n'),
);
lineOffset += replaceLines.length - searchLinesStripped.length;
i += replaceLines.length;
let replacementText = newBlockWithIndent.join('\n');
if (window[window.length - 1].endsWith('\n')) {
replacementText += '\n';
}
sourceLines.splice(i, searchLinesStripped.length, replacementText);
currentOriginalLine += searchLinesStripped.length;
i++;
} else {
currentOriginalLine++;
i++;
}
}