From e8e1bd556f4dd1ad175a76fb402134f658824804 Mon Sep 17 00:00:00 2001 From: Nikolay Sedelnikov Date: Fri, 30 Aug 2024 15:52:05 +0200 Subject: [PATCH 1/2] fix: Handle new file creation in the same folder --- aider/coders/editblock_coder.py | 10 ++++++++- tests/basic/test_editblock.py | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index 67439d1c0..05803dd77 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -442,7 +442,15 @@ def find_original_update_blocks(content, fence=DEFAULT_FENCE, valid_fnames=None) # Check for SEARCH/REPLACE blocks if line.strip() == HEAD: try: - filename = find_filename(lines[max(0, i - 3) : i], fence, valid_fnames) + # if next line after HEAD is DIVIDER, it's a new file + next_line = lines[i + 1] + if next_line.strip() == DIVIDER: + filename = find_filename(lines[max(0, i - 3) : i], fence, None) + else: + filename = find_filename( + lines[max(0, i - 3) : i], fence, valid_fnames + ) + if not filename: if current_filename: filename = current_filename diff --git a/tests/basic/test_editblock.py b/tests/basic/test_editblock.py index 037333b59..058afa750 100644 --- a/tests/basic/test_editblock.py +++ b/tests/basic/test_editblock.py @@ -456,6 +456,43 @@ Hope you like it! ], ) + def test_new_file_created_in_same_folder(self): + edit = """ +Here's the change: + +path/to/a/file2.txt +```python +<<<<<<< SEARCH +======= +three +>>>>>>> REPLACE +``` + +another change + +path/to/a/file1.txt +```python +<<<<<<< SEARCH +one +======= +two +>>>>>>> REPLACE +``` + +Hope you like it! +""" + + edits = list( + eb.find_original_update_blocks(edit, valid_fnames=["path/to/a/file1.txt"]) + ) + self.assertEqual( + edits, + [ + ("path/to/a/file2.txt", "", "three\n"), + ("path/to/a/file1.txt", "one\n", "two\n"), + ], + ) + if __name__ == "__main__": unittest.main() From 976d2bfd87c12b89068bcf3ff1f34d5038450d12 Mon Sep 17 00:00:00 2001 From: Nikolay Sedelnikov Date: Fri, 30 Aug 2024 16:21:56 +0200 Subject: [PATCH 2/2] fix: handle edge case when next line after HEAD is missing --- aider/coders/editblock_coder.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index 05803dd77..ffbcfc644 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -442,9 +442,8 @@ def find_original_update_blocks(content, fence=DEFAULT_FENCE, valid_fnames=None) # Check for SEARCH/REPLACE blocks if line.strip() == HEAD: try: - # if next line after HEAD is DIVIDER, it's a new file - next_line = lines[i + 1] - if next_line.strip() == DIVIDER: + # if next line after HEAD exists and is DIVIDER, it's a new file + if i + 1 < len(lines) and lines[i + 1].strip() == DIVIDER: filename = find_filename(lines[max(0, i - 3) : i], fence, None) else: filename = find_filename(