mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-23 13:54:59 +00:00
fix: Improve filename detection in find_filename function
This commit is contained in:
parent
a716fda897
commit
66e9c3834a
2 changed files with 10 additions and 12 deletions
|
@ -532,12 +532,9 @@ def find_filename(lines, fence, valid_fnames):
|
||||||
if not line.startswith(fence[0]):
|
if not line.startswith(fence[0]):
|
||||||
break
|
break
|
||||||
|
|
||||||
if not len(filenames):
|
if not filenames:
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(filenames) == 1:
|
|
||||||
return filenames[0]
|
|
||||||
|
|
||||||
# pick the *best* filename found
|
# pick the *best* filename found
|
||||||
|
|
||||||
# Check for exact match first
|
# Check for exact match first
|
||||||
|
@ -553,7 +550,7 @@ def find_filename(lines, fence, valid_fnames):
|
||||||
|
|
||||||
# Perform fuzzy matching with valid_fnames
|
# Perform fuzzy matching with valid_fnames
|
||||||
for fname in filenames:
|
for fname in filenames:
|
||||||
close_matches = difflib.get_close_matches(fname, valid_fnames, n=1, cutoff=0.6)
|
close_matches = difflib.get_close_matches(fname, valid_fnames, n=1, cutoff=0.8)
|
||||||
if len(close_matches) == 1:
|
if len(close_matches) == 1:
|
||||||
return close_matches[0]
|
return close_matches[0]
|
||||||
|
|
||||||
|
@ -562,7 +559,8 @@ def find_filename(lines, fence, valid_fnames):
|
||||||
if "." in fname:
|
if "." in fname:
|
||||||
return fname
|
return fname
|
||||||
|
|
||||||
return filenames[0] if filenames else None
|
if filenames:
|
||||||
|
return filenames[0]
|
||||||
|
|
||||||
|
|
||||||
def find_similar_lines(search_lines, content_lines, threshold=0.6):
|
def find_similar_lines(search_lines, content_lines, threshold=0.6):
|
||||||
|
|
|
@ -18,23 +18,19 @@ class TestUtils(unittest.TestCase):
|
||||||
|
|
||||||
def test_find_filename(self):
|
def test_find_filename(self):
|
||||||
fence = ("```", "```")
|
fence = ("```", "```")
|
||||||
valid_fnames = ["file1.py", "file2.py", "dir/file3.py"]
|
valid_fnames = ["file1.py", "file2.py", "dir/file3.py", "\windows\__init__.py"]
|
||||||
|
|
||||||
# Test with filename on a single line
|
# Test with filename on a single line
|
||||||
lines = ["file1.py", "```"]
|
lines = ["file1.py", "```"]
|
||||||
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "file1.py")
|
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "file1.py")
|
||||||
|
|
||||||
# Test with filename and fence on separate lines
|
|
||||||
lines = ["file2.py", "```", "some content"]
|
|
||||||
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "file2.py")
|
|
||||||
|
|
||||||
# Test with filename in fence
|
# Test with filename in fence
|
||||||
lines = ["```python", "file3.py", "```"]
|
lines = ["```python", "file3.py", "```"]
|
||||||
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "dir/file3.py")
|
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "dir/file3.py")
|
||||||
|
|
||||||
# Test with no valid filename
|
# Test with no valid filename
|
||||||
lines = ["```", "invalid_file.py", "```"]
|
lines = ["```", "invalid_file.py", "```"]
|
||||||
self.assertIsNone(eb.find_filename(lines, fence, valid_fnames))
|
self.assertEqual("invalid_file.py", eb.find_filename(lines, fence, valid_fnames))
|
||||||
|
|
||||||
# Test with multiple fences
|
# Test with multiple fences
|
||||||
lines = ["```python", "file1.py", "```", "```", "file2.py", "```"]
|
lines = ["```python", "file1.py", "```", "```", "file2.py", "```"]
|
||||||
|
@ -48,6 +44,10 @@ class TestUtils(unittest.TestCase):
|
||||||
lines = ["file1_py", "```"]
|
lines = ["file1_py", "```"]
|
||||||
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "file1.py")
|
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "file1.py")
|
||||||
|
|
||||||
|
# Test with fuzzy matching
|
||||||
|
lines = ["\windows__init__.py", "```"]
|
||||||
|
self.assertEqual(eb.find_filename(lines, fence, valid_fnames), "\windows\__init__.py")
|
||||||
|
|
||||||
# fuzzy logic disabled v0.11.2-dev
|
# fuzzy logic disabled v0.11.2-dev
|
||||||
def __test_replace_most_similar_chunk(self):
|
def __test_replace_most_similar_chunk(self):
|
||||||
whole = "This is a sample text.\nAnother line of text.\nYet another line.\n"
|
whole = "This is a sample text.\nAnother line of text.\nYet another line.\n"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue