我是 clang-tidy 的新手,以下是练习,所以我可以转向更复杂的匹配器和工具。
可以说我们有
typedef int my_type;
void foo()
{
int x = 0;//this should be identified as need to be fixed
my_type z = 0;
if( x == z){
//match this case
}
}
我的目标是识别与“my_type”进行比较的变量,以便通过将它们的类型更改为 my_type 来修复它们的声明。
现在我正在尝试执行以下操作
auto my_type_decl = varDecl(hasType(asString("my_type")));
auto my_type_decl_exp= declRefExpr(to(my_type_decl));
auto binop = binaryOperator(has(implicitCastExpr(has(my_type_decl_exp))));
auto other_decl_exp = declRefExpr(hasAncestor(binop), unless(to(my_type_decl)));
//get ancestor functionDecl
//get descendant varDecls that match the other_decl_exp
这里的问题是我忽略了上下文。做这样的事情的正确方法是什么?