获取Clang Tidy Check中的VarDecl类型

时间:2018-04-30 07:56:27

标签: c++ clang abstract-syntax-tree

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

1 个答案:

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