在 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();
我希望能够在 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();