c++ - 在 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 更有经验的人有什么建议吗?
解决方案
鉴于此匹配器:
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();
推荐阅读
- asp.net-mvc - Razor ViewEngine 是否缓存呈现的 HTML?
- git - 如何使用两个不同的 ssh 用户连接到 GitLab?
- python - Groupby function gives me a table, not a series form?
- javascript - 如何检查映射数组值是否在 JavaScript 中使用不同的键重复?
- javascript - 在第二个循环中将 backgroundImage 添加到 jquery 中的正文不起作用
- javascript - 返回nodejs子进程pid的最简单方法
- swift - 从 Firebase 获取数据并在 TableViewCell 中作为帖子显示
- java - 为什么 calendar.setLenient(false) 不产生异常
- azure-cosmosdb - Where子句数据在子数组中时如何查询CosmosDB?
- javascript - 如何将渲染的 Vue 组件作为参数传递?