我有自己的递归AST访问者类,其中包含clang::ASTContext
对象:
class Visitor : public clang::RecursiveASTVisitor<Visitor> {
public:
Visitor(const clang::ASTContext& context) : context_(context) {}
private:
const clang::ASTContext& context_;
};
然后我想访问所有名称空间声明并着色其名称:
bool VisitNamespaceDecl(clang::NamespaceDecl* decl) {
const auto& sm = context_.getSourceManager();
auto loc = decl->getLocStart();
if (!sm.isInMainFile(loc)) {
return true;
}
if (!sm.isMacroBodyExpansion(loc)) {
auto line = sm.getSpellingLineNumber(loc);
auto column = sm.getSpellingColumnNumber(loc);
// Colorify the "namespace" keyword itself.
// TODO: how to get location of the name token after "namespace" keyword?
}
return true;
}
这只是一个例子。即使有办法在没有令牌的情况下获取命名空间名称的位置,我也对更全面的方法感兴趣。
有没有办法在声明源范围内“跳转”到令牌并遍历它们?