From 5fbdba9d378648b1b7fa0396d35217db3259521f Mon Sep 17 00:00:00 2001 From: Roo Code Date: Mon, 4 May 2026 12:49:29 +0000 Subject: [PATCH] fix: broaden separator regex to catch whitespace chars after ------- Change regex from /^-------\S/ to /^-------.+/ so that cases like "-------\tapi.POST(" where whitespace follows the separator are also detected as malformed. Add test for tab-prefixed content case. --- .../__tests__/multi-search-replace.spec.ts | 15 +++++++++++++++ src/core/diff/strategies/multi-search-replace.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/core/diff/strategies/__tests__/multi-search-replace.spec.ts b/src/core/diff/strategies/__tests__/multi-search-replace.spec.ts index 856783592d..3cace18b7c 100644 --- a/src/core/diff/strategies/__tests__/multi-search-replace.spec.ts +++ b/src/core/diff/strategies/__tests__/multi-search-replace.spec.ts @@ -155,6 +155,21 @@ describe("MultiSearchReplaceDiffStrategy", () => { expect(result.error).toContain("some content here") }) + it("detects malformed separator with whitespace (tab) before content on the same line", () => { + const diff = + "<<<<<<< SEARCH\n" + + ":start_line:70\n" + + "-------\tapi.POST(\n" + + "=======\n" + + "new content\n" + + ">>>>>>> REPLACE" + const result = strategy["validateMarkerSequencing"](diff) + expect(result.success).toBe(false) + expect(result.error).toContain("separator line '-------'") + expect(result.error).toContain("must be on its own line") + expect(result.error).toContain("\tapi.POST(") + }) + it("allows properly formatted separator on its own line", () => { const diff = "<<<<<<< SEARCH\n" + diff --git a/src/core/diff/strategies/multi-search-replace.ts b/src/core/diff/strategies/multi-search-replace.ts index cb6e3c2698..0f2c3ab440 100644 --- a/src/core/diff/strategies/multi-search-replace.ts +++ b/src/core/diff/strategies/multi-search-replace.ts @@ -217,7 +217,7 @@ export class MultiSearchReplaceDiffStrategy implements DiffStrategy { if (marker === REPLACE) return reportInvalidDiffError(REPLACE, SEP) if (marker.startsWith(REPLACE_PREFIX)) return reportMergeConflictError(marker, SEARCH) // Detect malformed separator: `-------` with content on the same line (missing newline) - if (/^-------\S/.test(marker)) { + if (/^-------.+/.test(marker)) { const trailingContent = marker.slice(7) return { success: false,