clang libtooling 安全地插入一个新的 header
clang libtooling insert a new header safely
我正在使用 clang 的 libtooling 修改一些代码,并且我正在尝试找到一种方法来安全地插入 header 每当我的工具用于 C 文件时。
我已阅读 What's the right way to match #includes (or #defines) using Clang's libtooling? 关于对预处理器进行匹配调用的问题,但我仍然不确定是否要使用它来插入代码。
使用 libtooling 重写器插入新#include 的正确方法是什么?
据我所知,这是可能的(建议的变体适用于 c++,但经过一些更改后可用于 c)。
我不知道你说的"safely insert"是什么意思,
但我看到了两种方式:
- 在现有的附近插入
#include
。这里的问题是找到
现有 #include
。此处描述的可能方法:
在最顶层之前插入包含 TranslationUnitDecl
或
NamespaceDecl
在 AST 中。这个想法是从一些 Stmt
或者
Decl
或 Type
在代码中并递归访问其所有父级:
ASTContext::getParents()
直到 TranslationUnitDecl
或
NamespaceDecl
被发现。
示例可在此处找到:
我正在使用 clang 的 libtooling 修改一些代码,并且我正在尝试找到一种方法来安全地插入 header 每当我的工具用于 C 文件时。
我已阅读 What's the right way to match #includes (or #defines) using Clang's libtooling? 关于对预处理器进行匹配调用的问题,但我仍然不确定是否要使用它来插入代码。
使用 libtooling 重写器插入新#include 的正确方法是什么?
据我所知,这是可能的(建议的变体适用于 c++,但经过一些更改后可用于 c)。
我不知道你说的"safely insert"是什么意思, 但我看到了两种方式:
- 在现有的附近插入
#include
。这里的问题是找到 现有#include
。此处描述的可能方法: 在最顶层之前插入包含
TranslationUnitDecl
或NamespaceDecl
在 AST 中。这个想法是从一些Stmt
或者Decl
或Type
在代码中并递归访问其所有父级:ASTContext::getParents()
直到TranslationUnitDecl
或NamespaceDecl
被发现。示例可在此处找到: