mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-30 09:14:59 +00:00
Merge branch 'call-graph' into gpt-35
This commit is contained in:
commit
0256b8e260
3 changed files with 33 additions and 11 deletions
|
@ -29,11 +29,15 @@ def to_tree(tags):
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
tag = list(tag)
|
tag = list(tag)
|
||||||
|
|
||||||
for i in range(len(last)):
|
for i in range(len(last) + 1):
|
||||||
|
if i == len(last):
|
||||||
|
break
|
||||||
if last[i] != tag[i]:
|
if last[i] != tag[i]:
|
||||||
break
|
break
|
||||||
|
|
||||||
num_common = i
|
num_common = i
|
||||||
|
dump(repr(tag), num_common)
|
||||||
|
|
||||||
indent = tab * num_common
|
indent = tab * num_common
|
||||||
rest = tag[num_common:]
|
rest = tag[num_common:]
|
||||||
for item in rest:
|
for item in rest:
|
||||||
|
@ -288,11 +292,6 @@ class RepoMap:
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
# top_rank = sorted([(rank, node) for (node, rank) in ranked.items()], reverse=True)
|
|
||||||
# Print the PageRank of each node
|
|
||||||
# for rank, node in top_rank:
|
|
||||||
# print(f"{rank:.03f} {node}")
|
|
||||||
|
|
||||||
# distribute the rank from each source node, across all of its out edges
|
# distribute the rank from each source node, across all of its out edges
|
||||||
ranked_definitions = defaultdict(float)
|
ranked_definitions = defaultdict(float)
|
||||||
for src in G.nodes:
|
for src in G.nodes:
|
||||||
|
@ -312,6 +311,21 @@ class RepoMap:
|
||||||
continue
|
continue
|
||||||
ranked_tags += list(definitions.get((fname, ident), []))
|
ranked_tags += list(definitions.get((fname, ident), []))
|
||||||
|
|
||||||
|
rel_other_fnames_without_tags = set(
|
||||||
|
os.path.relpath(fname, self.root) for fname in other_fnames
|
||||||
|
)
|
||||||
|
|
||||||
|
fnames_already_included = set(rt[0] for rt in ranked_tags)
|
||||||
|
|
||||||
|
top_rank = sorted([(rank, node) for (node, rank) in ranked.items()], reverse=True)
|
||||||
|
for rank, fname in top_rank:
|
||||||
|
rel_other_fnames_without_tags.remove(fname)
|
||||||
|
if fname not in fnames_already_included:
|
||||||
|
ranked_tags.append((fname,))
|
||||||
|
|
||||||
|
for fname in rel_other_fnames_without_tags:
|
||||||
|
ranked_tags.append((fname,))
|
||||||
|
|
||||||
return ranked_tags
|
return ranked_tags
|
||||||
|
|
||||||
def get_ranked_tags_map(self, chat_fnames, other_fnames=None):
|
def get_ranked_tags_map(self, chat_fnames, other_fnames=None):
|
||||||
|
|
|
@ -99,10 +99,7 @@ def replace_most_similar_chunk(whole, part, replace):
|
||||||
if max_similarity < similarity_thresh:
|
if max_similarity < similarity_thresh:
|
||||||
return
|
return
|
||||||
|
|
||||||
if replace:
|
replace_lines = replace.splitlines()
|
||||||
replace_lines = replace.splitlines() + [""]
|
|
||||||
else:
|
|
||||||
replace_lines = []
|
|
||||||
|
|
||||||
modified_whole = (
|
modified_whole = (
|
||||||
whole_lines[:most_similar_chunk_start]
|
whole_lines[:most_similar_chunk_start]
|
||||||
|
|
|
@ -53,6 +53,9 @@ print(obj.my_method(1, 2))
|
||||||
print(my_function(3, 4))
|
print(my_function(3, 4))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
test_file3 = "test_file_pass.py"
|
||||||
|
file_content3 = "pass"
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as temp_dir:
|
with tempfile.TemporaryDirectory() as temp_dir:
|
||||||
with open(os.path.join(temp_dir, test_file1), "w") as f:
|
with open(os.path.join(temp_dir, test_file1), "w") as f:
|
||||||
f.write(file_content1)
|
f.write(file_content1)
|
||||||
|
@ -60,8 +63,15 @@ print(my_function(3, 4))
|
||||||
with open(os.path.join(temp_dir, test_file2), "w") as f:
|
with open(os.path.join(temp_dir, test_file2), "w") as f:
|
||||||
f.write(file_content2)
|
f.write(file_content2)
|
||||||
|
|
||||||
|
with open(os.path.join(temp_dir, test_file3), "w") as f:
|
||||||
|
f.write(file_content3)
|
||||||
|
|
||||||
repo_map = RepoMap(root=temp_dir)
|
repo_map = RepoMap(root=temp_dir)
|
||||||
other_files = [os.path.join(temp_dir, test_file1), os.path.join(temp_dir, test_file2)]
|
other_files = [
|
||||||
|
os.path.join(temp_dir, test_file1),
|
||||||
|
os.path.join(temp_dir, test_file2),
|
||||||
|
os.path.join(temp_dir, test_file3),
|
||||||
|
]
|
||||||
result = repo_map.get_repo_map([], other_files)
|
result = repo_map.get_repo_map([], other_files)
|
||||||
|
|
||||||
# Check if the result contains the expected tags map with identifiers
|
# Check if the result contains the expected tags map with identifiers
|
||||||
|
@ -69,6 +79,7 @@ print(my_function(3, 4))
|
||||||
self.assertIn("MyClass", result)
|
self.assertIn("MyClass", result)
|
||||||
self.assertIn("my_method", result)
|
self.assertIn("my_method", result)
|
||||||
self.assertIn("my_function", result)
|
self.assertIn("my_function", result)
|
||||||
|
self.assertIn("test_file_pass.py", result)
|
||||||
|
|
||||||
def test_check_for_ctags_failure(self):
|
def test_check_for_ctags_failure(self):
|
||||||
with patch("subprocess.run") as mock_run:
|
with patch("subprocess.run") as mock_run:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue