在 Clang Tidy Check 中获取 VarDecl 的类型

Get type of VarDecl in Clang Tidy Check

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

Rational 有点傻,我们的团队要求使用系统匈牙利符号检查代码(例如 uint32_t lMyVar = 0;)我认为不值得我们花时间维护符号,但是我输掉了那场战斗,所以现在我想自动化维护。我还认为这是开始使用 clang 和 clang-tidy 的一种不错的方式。

我已经开始编写一个简单的匹配器来获取 VarDecls: Finder->addMatcher(varDecl().bind("var"),this);

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

鉴于此匹配器:

Finder->addMatcher(varDecl().bind("var"),this);

可以用它来获取检查函数中第一个typedef的名称:

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