c++ - 在 Clang 中,编写自定义 ASTMatcher 时可以访问 SourceManager 吗?

标签 c++ clang code-analysis llvm-clang

我正在尝试升级我的 AutoFFI项目通过使其更加优雅并使用 Clang 的 ASTMatchers更广泛。我想创建一个匹配器来过滤指定的文件路径。是否可以做这样的事情,或者我是否需要在匹配器之外添加自定义逻辑才能使其工作?据我所知,没有办法获取 SourceManager 并使用它来创建 FullSourceLoc,但也许我遗漏了一些东西。

一些相关链接:

如果有人能告诉我这是否是 Clang 的 ASTMatcher API 的限制,我将非常感激!

最佳答案

没关系,我通过查看 isExpansionInMainFile 的来源找到了答案:

AST_POLYMORPHIC_MATCHER(isExpansionInMainFile,
                        AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc)) {
  auto &SourceManager = Finder->getASTContext().getSourceManager();
  return SourceManager.isInMainFile(
      SourceManager.getExpansionLoc(Node.getBeginLoc()));
}

结果我错过了 MatchFinder 中的 getASTContext,它保留了源管理器。

关于c++ - 在 Clang 中,编写自定义 ASTMatcher 时可以访问 SourceManager 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53851704/

相关文章:

testing - 静态分析可以检测内存泄漏吗?

vb6 - 旧版 VB6.0 应用程序中的圈复杂度

c++ - 用于分析 C++ 源代码的工具 (MSVC)

c++ - 访问指针句柄中对象的地址

c++ - 保存到 Program files 文件夹的文件不存在

c++ - 使用 sizeof 运算符在 C 和 C++ 中的不同输出

c++ - 如何从 llvm::Module 生成可执行文件?

c++ - 检查指向 LLVM 中指针类型的指针

c++ - Eigen : block 转置?

C++14:从参数值初始化 constexpr 变量