我希望能够在clang tidy中设置一个检查,以便给定一些变量(my_var)我可以检查它是否与特定的typedef(例如uint16_t)或typedef的基础类型匹配(如果是整数或浮动)。
Rational有点傻,我们的团队要求使用系统匈牙利表示法检查代码(例如uint32_t lMyVar = 0;)我认为值得花时间来维护表示法,但我输掉了那场战斗,所以现在我想要自动化维护。我也认为这是开始使用clang和clang-tidy的一种不错的方式。
我开始编写一个简单的匹配器来获取VarDecls:
Finder->addMatcher(varDecl().bind("var"),this);
从那里我真的不知道如何处理匹配的decl。正在运行MatchedDecl->dump()
,但MatchedDecl->getType()
之类的东西看起来并不像我希望的那样有用。来自Clang AST更有经验的人的任何建议?
答案 0 :(得分:0)
鉴于此匹配:
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();