clang AST 匹配器:通过 hasParent() 匹配当前匹配器的最佳方法是什么
clang AST Matcher: Whats the best way to match the current Matcher over hasParent()
我正在尝试搜索 ifStmt
,它们不是 else if
。为此,我想测试 Stmt 是否有父级,而不是 ifStmt(hasElse(ifStmt(equals(<myCurrentNode>))))
下面的显然行不通,但我找不到更好的解决方案。
clang-query> m ifStmt(<myMatcherforMyNode>, unless(hasParent(ifStmt(hasElse(ifStmt(equalsBoundNode("ifelse"))))))).bind("ifelse")
好的,我自己通过搜索 clang-tidy 的源代码找到了它:
只需使用 ifStmt(ifStmt().bind("if"), <myMatcherForMyNode>, unless(hasParent(ifStmt(hasElse(ifStmt(equalsBoundNode("if")))))))
.
此外,ifStmt(stmt().bind("if"), <myMatcherForMyNode>, unless(hasParent(ifStmt(hasElse(ifStmt(equalsBoundNode("if")))))))
会完成这项工作
我正在尝试搜索 ifStmt
,它们不是 else if
。为此,我想测试 Stmt 是否有父级,而不是 ifStmt(hasElse(ifStmt(equals(<myCurrentNode>))))
下面的显然行不通,但我找不到更好的解决方案。
clang-query> m ifStmt(<myMatcherforMyNode>, unless(hasParent(ifStmt(hasElse(ifStmt(equalsBoundNode("ifelse"))))))).bind("ifelse")
好的,我自己通过搜索 clang-tidy 的源代码找到了它:
只需使用 ifStmt(ifStmt().bind("if"), <myMatcherForMyNode>, unless(hasParent(ifStmt(hasElse(ifStmt(equalsBoundNode("if")))))))
.
此外,ifStmt(stmt().bind("if"), <myMatcherForMyNode>, unless(hasParent(ifStmt(hasElse(ifStmt(equalsBoundNode("if")))))))
会完成这项工作