【发布时间】:2014-08-01 07:24:54
【问题描述】:
当我访问时,假设是一个声明(Clang 库中的Decl),我怎样才能得到这个 Decl 被写入的文件的名称?
有一个FileData 课程,但我找不到任何其他课程可以让我获得这个FileData
【问题讨论】:
当我访问时,假设是一个声明(Clang 库中的Decl),我怎样才能得到这个 Decl 被写入的文件的名称?
有一个FileData 课程,但我找不到任何其他课程可以让我获得这个FileData
【问题讨论】:
您可以向 SourceManager 询问当前文件的 FileEntry。
例如在匹配器回调中:
void MyMatcher::run(const MatchFinder::MatchResult& Result) {
ASTContext* Context = Result.Context;
if (const Decl* D = Result.Nodes.getNodeAs<Decl>("MyDecl")) {
SourceManager& SrcMgr = Context->getSourceManager();
const FileEntry* Entry = SrcMgr.getFileEntryForID(SrcMgr.getFileID(D.getCaretLocation()));
const char* FileName = Entry->getName();
}
}
【讨论】: