[clang] [llvm] [clang] Add hasAdjSubstatements matcher (PR #169965)
Denis Mikhailov via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 14 04:30:11 PST 2025
================
@@ -5911,6 +5911,30 @@ AST_POLYMORPHIC_MATCHER_P(hasAnySubstatement,
Builder) != CS->body_end();
}
+/// Matches compound statements that contain adjacent substatements matching
+/// the provided sequence of matchers. Also matches StmtExprs that have
+/// CompoundStmt as children.
+///
+/// Given
+/// \code
+/// { {}; 1+2; }
+/// \endcode
+/// hasAdjSubstatements(compoundStmt(), binaryOperator())
+/// matches '{ {}; 1+2; }'
+/// with compoundStmt()
+/// matching '{}'
+/// with binaryOperator()
+/// matching '1+2'
+///
+/// hasAdjSubstatements(compoundStmt(), binaryOperator(), returnStmt())
+/// Is equivalent to matching a compound statement that contains
+/// a compound statement immediately followed by a binary operator
+/// immediately followed by a return statement.
+extern const internal::VariadicFunction<
+ internal::HasAdjSubstatementsMatcherType, internal::Matcher<Stmt>,
+ internal::hasAdjSubstatementsFunc>
+ hasAdjSubstatements;
----------------
denzor200 wrote:
Oke, I will write the full name `hasAnySubstatement`.
Regarding the "Sub" word, we already have `hasAnySubstatement` that also matches `CompoundStmt`:
<img width="1205" height="321" alt="image" src="https://github.com/user-attachments/assets/732ee6fa-60b7-4509-beb4-cbbcad3efdcc" />
That's the reason why I'm using "Sub" word here.
https://github.com/llvm/llvm-project/pull/169965
More information about the llvm-commits
mailing list