python - 为什么 libclang 不为跨文件引用生成游标?
问题描述
当我使用 libclang 的 Python 绑定解析 C++ 代码文件时,我发现缺少跨文件引用的光标。
示例 C++ 代码:
#include "controller/LocalController.h"
int addition(int a, int b)
{
return a + b;
}
auto c = addition(1, 2);
auto d = LocalController::getTextByKey("100000");
Python脚本:
index = clang.cindex.Index.create()
tu = index.parse("MazeController.cpp", clang_args, None, 1)
for child in tu.cursor.walk_preorder():
if child.location.file != None:
if child.location.file.name == tu.cursor.displayname:
print child.displayname, child.kind, child.location.line, child.location.column
变量 clang_args 包含“controller/LocalController.h”的基本路径。下面是输出:
controller/LocalController.h CursorKind.INCLUSION_DIRECTIVE 1 4
addition(int, int) CursorKind.FUNCTION_DECL 3 5
a CursorKind.PARM_DECL 3 18
b CursorKind.PARM_DECL 3 25
CursorKind.COMPOUND_STMT 4 1
CursorKind.RETURN_STMT 5 5
CursorKind.BINARY_OPERATOR 5 12
a CursorKind.UNEXPOSED_EXPR 5 12
a CursorKind.DECL_REF_EXPR 5 12
b CursorKind.UNEXPOSED_EXPR 5 16
b CursorKind.DECL_REF_EXPR 5 16
c CursorKind.VAR_DECL 8 6
addition CursorKind.CALL_EXPR 8 10
addition CursorKind.UNEXPOSED_EXPR 8 10
addition CursorKind.DECL_REF_EXPR 8 10
CursorKind.INTEGER_LITERAL 8 19
CursorKind.INTEGER_LITERAL 8 22
d CursorKind.VAR_DECL 10 6
加法的本地函数调用被libclang完美解析,但是缺少LocalController::getTextByKey的跨文件函数调用解析,因为输出的最后一行是d的光标。
有人可以帮助我吗?非常感谢!
解决方案
推荐阅读
- python - 通过 pip 安装包工作正常,但仍然导入错误
- sql - 命令执行异常:INSERT 语句与 FOREIGN KEY 约束冲突
- c# - TextureBrush 低质量打印
- java - 如何使用流口水的决策表(.xls)比较两个或多个条件?
- google-maps - 谷歌地图地理编码API免费每日限制一击即过,是因为我没有启用计费吗?
- php - Laravel 从数据库中查找数据,直到那为空或重试完成
- python - 带有 python-telegram-bot 库的 Telegram 机器人
- json - 第一次使用 json 时,Kendo 电子表格没有绑定
- c# - 获取当前节点 simpleType
- html - 使用 Bootstrap Angular6 数据表为 tfooter 设置分页样式