首页 > 解决方案 > 在 Clang Tidy Check 中获取 VarDecl 的类型

问题描述

我希望能够在 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 更有经验的人有什么建议吗?

标签: c++clangabstract-syntax-tree

解决方案


鉴于此匹配器:

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();

推荐阅读