diff --git a/src/tools/hashline-edit/edit-operations.test.ts b/src/tools/hashline-edit/edit-operations.test.ts index 40c2a36de..0f5dad520 100644 --- a/src/tools/hashline-edit/edit-operations.test.ts +++ b/src/tools/hashline-edit/edit-operations.test.ts @@ -128,7 +128,7 @@ describe("hashline edit operations", () => { expect(result).toEqual(["before", "new 1", "new 2", "after"]) }) - it("does not restore indentation for replace_lines", () => { + it("restores indentation for first replace_lines entry", () => { //#given const lines = ["if (x) {", " return 1", " return 2", "}"] @@ -136,6 +136,6 @@ describe("hashline edit operations", () => { const result = applyReplaceLines(lines, anchorFor(lines, 2), anchorFor(lines, 3), ["return 3", "return 4"]) //#then - expect(result).toEqual(["if (x) {", "return 3", "return 4", "}"]) + expect(result).toEqual(["if (x) {", " return 3", "return 4", "}"]) }) }) diff --git a/src/tools/hashline-edit/edit-operations.ts b/src/tools/hashline-edit/edit-operations.ts index df31d997f..61271ca4e 100644 --- a/src/tools/hashline-edit/edit-operations.ts +++ b/src/tools/hashline-edit/edit-operations.ts @@ -124,7 +124,11 @@ export function applyReplaceLines( const result = [...lines] const stripped = stripRangeBoundaryEcho(lines, startLine, endLine, toNewLines(newText)) - result.splice(startLine - 1, endLine - startLine + 1, ...stripped) + const restored = stripped.map((entry, idx) => { + if (idx !== 0) return entry + return restoreLeadingIndent(lines[startLine - 1], entry) + }) + result.splice(startLine - 1, endLine - startLine + 1, ...restored) return result }