clang libtooling安全插入新标题

时间:2017-05-17 14:11:31

标签: c libclang libtooling

我正在使用clang的libtooling来修改一些代码,而且每当我的工具在C文件上使用时,我都试图找到一种安全插入标题的方法。

我已经阅读了有关预处理器匹配调用的What's the right way to match #includes (or #defines) using Clang's libtooling?问题,但我仍然不确定是否使用它来插入代码。

使用libtooling重写器插入新的#include的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

AFAIK是可能的(建议的变体适用于c ++,但有些变化可用于c)。

我不知道“安全插入”是什么意思, 但我看到两种方式:

  1. 在现有附近插入#include。这里的问题是找到 现有#include。这里描述的可行方法如下: https://stackoverflow.com/a/44077744/6490190
  2. 在最顶层TranslationUnitDecl或之前插入包含 AST中的NamespaceDecl。我们的想法是从一些Stmt开始 代码中DeclType并以递归方式访问其所有父项: ASTContext::getParents()直到TranslationUnitDecl或。{ 找到NamespaceDecl

    示例可以在这里找到: