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"是什么意思, 但我看到了两种方式:

  1. 在现有的附近插入 #include。这里的问题是找到 现有 #include。此处描述的可能方法:
  2. 在最顶层之前插入包含 TranslationUnitDeclNamespaceDecl 在 AST 中。这个想法是从一些 Stmt 或者 DeclType 在代码中并递归访问其所有父级: ASTContext::getParents() 直到 TranslationUnitDeclNamespaceDecl 被发现。

    示例可在此处找到: