我目前正忙于使用 libclang 库。
我的目标是解析包含带有参数的宏的代码并获取宏参数的类型以进行语法着色。
如果我们考虑下面这段代码
#define MACRO(X) X
typedef struct
{
int a;
} aType;
aType data;
int var = MACRO(data.a);
我的目标是能够对行a
结构的字段进行着色。即,每当我将光标悬停在变量字段上时,我都想获取行、列和类型。aType
int var = MACRO(data.a)
a
data
问题是,每当我将光标放在 character 的位置时a
,它的类型都是CXCursor_MacroExpansion
. 我已经尝试获取引用的游标(通过clang_getCursorReferenced
),但后来我得到了一个游标类型CXCursor_MacroDefinition
。
我也已经尝试通过访问孩子,clang_visitChildren
但这也返回了光标本身,所以它没有用。
如果我可以从带有 type 的光标中得到一个带有 typeCXCursor_MemberRefExpr
的光标,CXCusor_MacroExtension
我就会得到我需要的东西。
CXCursor_MacroExpansion
每当光标位于宏扩展上时,有谁知道如何实际获取扩展代码 iso 获取的信息?
非常感谢您的时间和帮助。
亲切的问候,
洛朗