我正在使用 clang 的 libtooling 来修改一些代码,并且我正在尝试找到一种方法来在我的工具用于 C 文件时安全地插入标头。
我已阅读What's the right way to match #includes (or #defines) using Clang's libtooling? 关于对预处理器的匹配调用的问题,但我仍然不确定使用它来插入代码。
使用 libtooling 重写器插入新 #include 的正确方法是什么?
我正在使用 clang 的 libtooling 来修改一些代码,并且我正在尝试找到一种方法来在我的工具用于 C 文件时安全地插入标头。
我已阅读What's the right way to match #includes (or #defines) using Clang's libtooling? 关于对预处理器的匹配调用的问题,但我仍然不确定使用它来插入代码。
使用 libtooling 重写器插入新 #include 的正确方法是什么?
AFAIK 是可能的(建议的变体适用于 c ++,但有一些变化可用于 c)。
我不知道“安全插入”是什么意思,但我看到了两种方法:
#include
在现有的附近插入。这里的问题是找到现有的#include
. 此处描述的可能方法:
https ://stackoverflow.com/a/44077744/6490190在最顶部之前TranslationUnitDecl
或
NamespaceDecl
在 AST 中插入 include。这个想法是从代码中的一些Stmt
或
Decl
或开始Type
,递归地访问它的所有父项:
ASTContext::getParents()
直到找到TranslationUnitDecl
或
NamespaceDecl
。
示例可以在这里找到: