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()