【问题标题】:clang libtooling insert a new header safelyclang libtooling 安全地插入新标头
【发布时间】:2017-05-17 14:11:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: c libclang libtooling


    【解决方案1】:

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

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

    1. 在现有的附近插入#include。这里的问题是找到 现有#include。此处描述的可能方法: https://stackoverflow.com/a/44077744/6490190
    2. 在最上面的 TranslationUnitDecl 之前插入 include 或 NamespaceDecl 在 AST 中。这个想法是从一些Stmt 或 代码中的DeclType 并递归访问其所有父母: ASTContext::getParents() 直到 TranslationUnitDecl 或 找到NamespaceDecl

      示例可以在这里找到:

    【讨论】:

    • 我不再需要这个,但是对于下一个偶然发现这个的可怜的灵魂,我会将此标记为正确答案。
    猜你喜欢
    • 2014-11-15
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多