diff --git a/src/core/diff/strategies/__tests__/multi-search-replace.test.ts b/src/core/diff/strategies/__tests__/multi-search-replace.test.ts index 2187b4a958e..a4812827ad6 100644 --- a/src/core/diff/strategies/__tests__/multi-search-replace.test.ts +++ b/src/core/diff/strategies/__tests__/multi-search-replace.test.ts @@ -1436,6 +1436,25 @@ function five() { expect(result.success).toBe(true) }) + it("handles escaping of markers with custom suffixes", async () => { + const originalContent = "before\n<<<<<<< HEAD\nmiddle\n>>>>>>> feature-branch\nafter\n" + const diffContent = + "<<<<<<< SEARCH\n" + + "before\n" + + "\\<<<<<<< HEAD\n" + + "middle\n" + + "\\>>>>>>> feature-branch\n" + + "after\n" + + "=======\n" + + "replaced content\n" + + ">>>>>>> REPLACE" + const result = await strategy.applyDiff(originalContent, diffContent) + expect(result.success).toBe(true) + if (result.success) { + expect(result.content).toBe("replaced content\n") + } + }) + it("detects separator when expecting replace", () => { const diff = "<<<<<<< SEARCH\n" + "content\n" + "=======\n" + "new content\n" + "=======" const result = strategy["validateMarkerSequencing"](diff) diff --git a/src/core/diff/strategies/multi-search-replace.ts b/src/core/diff/strategies/multi-search-replace.ts index 8213669aa69..78622c8f034 100644 --- a/src/core/diff/strategies/multi-search-replace.ts +++ b/src/core/diff/strategies/multi-search-replace.ts @@ -143,9 +143,9 @@ Only use a single line of '=======' between search and replacement content, beca private unescapeMarkers(content: string): string { return content - .replace(/^\\<<<<<<< SEARCH/gm, "<<<<<<< SEARCH") + .replace(/^\\<<<<<<>>>>>> REPLACE/gm, ">>>>>>> REPLACE") + .replace(/^\\>>>>>>>/gm, ">>>>>>>") .replace(/^\\-------/gm, "-------") .replace(/^\\:end_line:/gm, ":end_line:") .replace(/^\\:start_line:/gm, ":start_line:")