-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
what can get_cross_file_context() and get_cross_file_definition_by_line() do? #30
Comments
能具体附上这个DependencyGraph的JSON格式数据吗?这个节点是否与本仓库内其它文件的节点有依赖关系? |
get_cross_file_definition_by_line的功能是从指定文件的某一特定行开始,查找并提取所有与此行所在的最里层节点(类/函数级别)相关的跨文件关系。包括继承、调用、实例化等关系。你可以结合这里的单测来配合理解:https://github.com/codefuse-ai/RepoFuse/blob/main/repo_specific_semantic_graph/tests/test_retriever.py#L149 比如里面提到的第一个测试用例: cross_file_edge_list = sample_retriever.get_cross_file_definition_by_line(
python_repo_suite_path / "cross_file_context" / "main.py", 18
)
assert len(cross_file_edge_list) == 4
context = [
(
edge[0].name,
edge[2].relation.name,
edge[1].type.value,
edge[1].name,
edge[1].location.file_path.name,
)
for edge in cross_file_edge_list
]
assert context == unordered(
[
("Foo.call", "Instantiates", "class", "Bar", "b.py"),
("Foo.call", "Calls", "function", "bar", "b.py"),
("main", "Imports", "class", "Bar", "b.py"),
("main", "Imports", "function", "bar", "b.py"),
]
) https://github.com/codefuse-ai/RepoFuse/blob/main/repo_specific_semantic_graph/tests/code_example/python/cross_file_context/main.py#L18 这一行可以召回对 你可以检查下你想要召回的那一行代码所在最里层节点是否有这样的跨文件关系。 |
感谢,我还有一点不明白,什么是"此行所在的最里层节点",https://github.com/codefuse-ai/RepoFuse/blob/main/repo_specific_semantic_graph/tests/code_example/python/cross_file_context/main.py#L18 是一个print语句,为什么能召回15行和16行的依赖,当start_line=16时,却只能召回15行的依赖,这里是召回call()函数中start_line之前的跨文件依赖么?还是什么其他的,能再具体说一下start_line参数的意义么。 |
get_cross_file_definition_by_line还会根据start_line来筛选出依赖边位置的行号 < start_line 的,以此保证返回的依赖关系发生在start_line之前。筛选逻辑可以见这里:https://github.com/codefuse-ai/RepoFuse/blob/main/repo_specific_semantic_graph/dependency_graph/dependency_graph.py#L336-L346 这就是为什么第15、16、18行最里层节点都为 |
这就是为什么第15、16、18行最里层节点都为 我理解module_node至少有一个元素即file_path所在脚本,但当file_path="***/repo_specific_semantic_graph/tests/code_example/python/cross_file_context/main.py"时确为空list,这是为什么 |
没有太明白这个问题,是什么情况下module_node为空呢? |
利用您提供的测试用例:cross_file_edge_list = sample_retriever.get_cross_file_definition_by_line( |
可以检查下pytest运行的当前目录是否在 如果你不是通过pytest来运行的话,我试了以下的代码也是可以运行的,注意路径需要传入绝对路径: from dependency_graph import (
construct_dependency_graph,
GraphGeneratorType,
Language,
)
sample_retriever = construct_dependency_graph(
"/path/to/RepoFuse/repo_specific_semantic_graph/tests/code_example/python/cross_file_context",
GraphGeneratorType.JEDI,
Language.Python,
).as_retriever()
cross_file_edge_list = sample_retriever.get_cross_file_reference_by_line(
"/path/to/RepoFuse/repo_specific_semantic_graph/tests/code_example/python/cross_file_context/main.py",
18,
)
cross_file_edge_list |
您使用的是get_cross_file_reference_by_line函数,而我指的是get_cross_file_definition_by_line函数,https://github.com/codefuse-ai/RepoFuse/blob/main/repo_specific_semantic_graph/dependency_graph/dependency_graph.py#L316-L321 |
这里确实有问题,已经通过 #32 修复了。 |
还有2个问题: 1、CrossCodeEval raw data数据集已联系[email protected],但没回应,您这边能否提供CrossCodeEval raw data数据集 |
当我使用tree-sitter 解析java代码库后,使用get_cross_file_context() and get_cross_file_definition_by_line() 去召回特定节点的跨文件节点信息时,总得到[],图谱中显示该特定节点既有出度也有入度。
The text was updated successfully, but these errors were encountered: