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

时间:2018-12-19 12:54:14

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

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

一些相关链接:

如果有人可以告诉我这是否对Clang的ASTMatcher API有所限制,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

isExpansionInMainFile

结果证明,我错过了AST_POLYMORPHIC_MATCHER(isExpansionInMainFile, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc)) { auto &SourceManager = Finder->getASTContext().getSourceManager(); return SourceManager.isInMainFile( SourceManager.getExpansionLoc(Node.getBeginLoc())); } 中的getASTContext,该MatchFinder一直由源经理负责。