2

我正在使用 clang 的 libtooling 来修改一些代码,并且我正在尝试找到一种方法来在我的工具用于 C 文件时安全地插入标头。

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

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

4

1 回答 1

1

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

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

  1. #include在现有的附近插入。这里的问题是找到现有的#include. 此处描述的可能方法: https ://stackoverflow.com/a/44077744/6490190
  2. 在最顶部之前TranslationUnitDeclNamespaceDecl在 AST 中插入 include。这个想法是从代码中的一些StmtDecl或开始Type,递归地访问它的所有父项: ASTContext::getParents()直到找到TranslationUnitDeclNamespaceDecl

    示例可以在这里找到:

于 2018-06-06T16:15:24.733 回答