C++ 在Clang Tidy Check中获取VarDecl的类型

C++ 在Clang Tidy Check中获取VarDecl的类型,c++,clang,abstract-syntax-tree,C++,Clang,Abstract Syntax Tree,我希望能够在clang tidy中设置一个check,以便给定一些变量(my_var),我可以检查它是否匹配特定的typedef(例如uint16_t)或typedef的基础类型(如果是整数或浮点) Rational有点傻,我们的团队要求使用system hungarian符号(例如uint32_t lMyVar=0;)检入代码。我认为不值得我们花时间维护符号,但我输掉了这场战斗,所以现在我想自动化维护。我还认为这是一个体面的方式开始与叮当和叮当整洁 我首先编写了一个简单的匹配器来获取VarDe

我希望能够在clang tidy中设置一个check,以便给定一些变量(my_var),我可以检查它是否匹配特定的typedef(例如uint16_t)或typedef的基础类型(如果是整数或浮点)

Rational有点傻,我们的团队要求使用system hungarian符号(例如uint32_t lMyVar=0;)检入代码。我认为不值得我们花时间维护符号,但我输掉了这场战斗,所以现在我想自动化维护。我还认为这是一个体面的方式开始与叮当和叮当整洁

我首先编写了一个简单的匹配器来获取VarDecls:

Finder->addMatcher(varDecl().bind(“var”),这个);

从那以后,我真的不知道如何处理匹配的decl。运行
MatchedDecl->dump()
,但是像
MatchedDecl->getType()
这样的东西似乎没有我希望的那么有用。对Clang AST更有经验的人有什么建议吗?

鉴于此匹配者:

Finder->addMatcher(varDecl().bind("var"),this);
可以使用此选项获取check函数中第一个typedef的名称:

const auto* MatchedDecl       = Result.Nodes.getNodeAs<VarDecl>("var");
auto        MatchedType       = MatchedDecl -> getType();
auto        MatchedIdentifier = MatchedType.getBaseTypeIdentifier();
auto        VarType           = MatchedIdentifier -> getName();
const auto*MatchedDecl=Result.Nodes.getNodeAs(“var”);
auto MatchedType=MatchedDecl->getType();
auto MatchedIdentifier=MatchedType.getBaseTypeIdentifier();
auto VarType=MatchedIdentifier->getName();

MatchedDecl->getType()有什么问题吗
QualType
使用起来有点棘手,但应该提供您需要的所有信息。@SebastianRedl谢谢。部分原因是,一旦我从getType()获得QualType,我就不知道该如何处理它。我主要是使用GDB四处闲逛,对于下一步该去哪里运气不好。我知道了如何获取第一个typedef,但仍在试图找到如何获取嵌套的typedef(例如,typedef my_-type int16\t;my_-type my_-var;),我想知道my_-var是否基于int16\t或等效物)