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