return (Var != nullptr && InnerMatcher.matches(*Var, Finder, Builder));
}
+/// \brief Matches the range initialization statement of a for loop.
+///
+/// Example:
+/// forStmt(hasRangeInit(anything()))
+/// matches 'a' in
+/// \code
+/// for (int x : a) { }
+/// \endcode
+AST_MATCHER_P(CXXForRangeStmt, hasRangeInit, internal::Matcher<Expr>,
+ InnerMatcher) {
+ const Expr *const Init = Node.getRangeInit();
+ return (Init != nullptr && InnerMatcher.matches(*Init, Finder, Builder));
+}
+
/// \brief Matches while statements.
///
/// Given
TEST(For, ForRangeLoopInternals) {
EXPECT_TRUE(matches("void f(){ int a[] {1, 2}; for (int i : a); }",
forRangeStmt(hasLoopVariable(anything()))));
+ EXPECT_TRUE(matches(
+ "void f(){ int a[] {1, 2}; for (int i : a); }",
+ forRangeStmt(hasRangeInit(declRefExpr(to(varDecl(hasName("a"))))))));
}
TEST(For, NegativeForLoopInternals) {