diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index f05a60c4d..6e94f1c3b 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -404,94 +404,69 @@ def strip_filename(filename, fence): def find_original_update_blocks(content, fence=DEFAULT_FENCE): - # make sure we end with a newline, otherwise the regex will miss <= len(lines) or lines[i].strip() != DIVIDER: + raise ValueError(f"Expected `{DIVIDER}`") - original_text = pieces.pop() - processed.append(original_text) + updated_text = [] + i += 1 + while i < len(lines) and not lines[i].strip() == UPDATED: + updated_text.append(lines[i]) + i += 1 - divider_marker = pieces.pop() - processed.append(divider_marker) - if divider_marker.strip() != DIVIDER: - raise ValueError(f"Expected `{DIVIDER}` not {divider_marker.strip()}") + if i >= len(lines) or lines[i].strip() != UPDATED: + raise ValueError(f"Expected `{UPDATED}`") - updated_text = pieces.pop() - processed.append(updated_text) + yield filename, "".join(original_text), "".join(updated_text) - updated_marker = pieces.pop() - processed.append(updated_marker) - if updated_marker.strip() != UPDATED: - raise ValueError(f"Expected `{UPDATED}` not `{updated_marker.strip()}") + except ValueError as e: + processed = "".join(lines[:i+1]) + err = e.args[0] + raise ValueError(f"{processed}\n^^^ {err}") - yield filename, original_text, updated_text - except ValueError as e: - processed = "".join(processed) - err = e.args[0] - raise ValueError(f"{processed}\n^^^ {err}") - except IndexError: - processed = "".join(processed) - raise ValueError(f"{processed}\n^^^ Incomplete SEARCH/REPLACE block.") - except Exception: - processed = "".join(processed) - raise ValueError(f"{processed}\n^^^ Error parsing SEARCH/REPLACE block.") + i += 1 def find_filename(lines, fence):