如何使用Clang C ++ API获取声明令牌?

时间:2015-06-14 16:43:01

标签: c++ libclang

我有自己的递归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;
}

这只是一个例子。即使有办法在没有令牌的情况下获取命名空间名称的位置,我也对更全面的方法感兴趣。

有没有办法在声明源范围内“跳转”到令牌并遍历它们?

0 个答案:

没有答案