llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Julian Schmidt (5chmidti) <details> <summary>Changes</summary> Reverts llvm/llvm-project#<!-- -->112168 --- Patch is 905.25 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/116477.diff 8 Files Affected: - (modified) clang/docs/LibASTMatchersReference.html (+2270-5677) - (modified) clang/docs/ReleaseNotes.rst (-3) - (modified) clang/docs/doxygen.cfg.in (+1-8) - (modified) clang/docs/tools/dump_ast_matchers.py (+5-63) - (modified) clang/include/clang/ASTMatchers/ASTMatchers.h (+1662-4115) - (modified) clang/unittests/ASTMatchers/ASTMatchersTest.h (+3-427) - (modified) clang/unittests/ASTMatchers/CMakeLists.txt (-15) - (removed) clang/utils/generate_ast_matcher_doc_tests.py (-1097) ``````````diff diff --git a/clang/docs/LibASTMatchersReference.html b/clang/docs/LibASTMatchersReference.html index 99917ccff52604..c6307954d7f1bb 100644 --- a/clang/docs/LibASTMatchersReference.html +++ b/clang/docs/LibASTMatchersReference.html @@ -586,36 +586,28 @@ <h2 id="decl-matchers">Node Matchers</h2> #pragma omp declare simd int min(); - -The matcher attr() -matches nodiscard, nonnull, noinline, and -declare simd. +attr() + matches "nodiscard", "nonnull", "noinline", and the whole "#pragma" line. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>></td><td class="name" onclick="toggle('cxxBaseSpecifier0')"><a name="cxxBaseSpecifier0Anchor">cxxBaseSpecifier</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxBaseSpecifier0"><pre>Matches class bases. -Given +Examples matches public virtual B. class B {}; class C : public virtual B {}; - -The matcher cxxRecordDecl(hasDirectBase(cxxBaseSpecifier())) -matches C. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('cxxCtorInitializer0')"><a name="cxxCtorInitializer0Anchor">cxxCtorInitializer</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxCtorInitializer0"><pre>Matches constructor initializers. -Given +Examples matches i(42). class C { C() : i(42) {} int i; }; - -The matcher cxxCtorInitializer() -matches i(42). </pre></td></tr> @@ -627,22 +619,17 @@ <h2 id="decl-matchers">Node Matchers</h2> public: int a; }; - -The matcher accessSpecDecl() -matches public:. +accessSpecDecl() + matches 'public:' </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('bindingDecl0')"><a name="bindingDecl0Anchor">bindingDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BindingDecl.html">BindingDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="bindingDecl0"><pre>Matches binding declarations +Example matches foo and bar +(matcher = bindingDecl() -Given - struct pair { int x; int y; }; - pair make(int, int); - auto [foo, bar] = make(42, 42); - -The matcher bindingDecl() -matches foo and bar. + auto [foo, bar] = std::make_pair{42, 42}; </pre></td></tr> @@ -655,18 +642,14 @@ <h2 id="decl-matchers">Node Matchers</h2> myFunc(^(int p) { printf("%d", p); }) - </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('classTemplateDecl0')"><a name="classTemplateDecl0Anchor">classTemplateDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateDecl.html">ClassTemplateDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="classTemplateDecl0"><pre>Matches C++ class template declarations. -Given +Example matches Z template<class T> class Z {}; - -The matcher classTemplateDecl() -matches Z. </pre></td></tr> @@ -677,14 +660,13 @@ <h2 id="decl-matchers">Node Matchers</h2> template<class T1, class T2, int I> class A {}; - template<class T, int I> class A<T, T*, I> {}; + template<class T, int I> + class A<T, T*, I> {}; template<> class A<int, int, 1> {}; - -The matcher classTemplatePartialSpecializationDecl() -matches template<class T, int I> class A<T, T*, I> {}, -but does not match A<int, int, 1>. +classTemplatePartialSpecializationDecl() + matches the specialization A<T,T*,I> but not A<int,int,1> </pre></td></tr> @@ -695,128 +677,87 @@ <h2 id="decl-matchers">Node Matchers</h2> template<typename T> class A {}; template<> class A<double> {}; A<int> a; - -The matcher classTemplateSpecializationDecl() -matches class A<int> -and class A<double>. +classTemplateSpecializationDecl() + matches the specializations A<int> and A<double> </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('conceptDecl0')"><a name="conceptDecl0Anchor">conceptDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ConceptDecl.html">ConceptDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="conceptDecl0"><pre>Matches concept declarations. -Given - template<typename T> concept my_concept = true; - - -The matcher conceptDecl() -matches template<typename T> -concept my_concept = true. +Example matches integral + template<typename T> + concept integral = std::is_integral_v<T>; </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('cxxConstructorDecl0')"><a name="cxxConstructorDecl0Anchor">cxxConstructorDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxConstructorDecl0"><pre>Matches C++ constructor declarations. -Given +Example matches Foo::Foo() and Foo::Foo(int) class Foo { public: Foo(); Foo(int); int DoSomething(); }; - - struct Bar {}; - - -The matcher cxxConstructorDecl() -matches Foo() and Foo(int). </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('cxxConversionDecl0')"><a name="cxxConversionDecl0Anchor">cxxConversionDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXConversionDecl.html">CXXConversionDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxConversionDecl0"><pre>Matches conversion operator declarations. -Given +Example matches the operator. class X { operator int() const; }; - - -The matcher cxxConversionDecl() -matches operator int() const. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('cxxDeductionGuideDecl0')"><a name="cxxDeductionGuideDecl0Anchor">cxxDeductionGuideDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXDeductionGuideDecl.html">CXXDeductionGuideDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxDeductionGuideDecl0"><pre>Matches user-defined and implicitly generated deduction guide. -Given +Example matches the deduction guide. template<typename T> - class X { X(int); }; + class X { X(int) }; X(int) -> X<int>; - - -The matcher cxxDeductionGuideDecl() -matches the written deduction guide -auto (int) -> X<int>, -the implicit copy deduction guide auto (int) -> X<T> -and the implicitly declared deduction guide -auto (X<T>) -> X<T>. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('cxxDestructorDecl0')"><a name="cxxDestructorDecl0Anchor">cxxDestructorDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXDestructorDecl.html">CXXDestructorDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxDestructorDecl0"><pre>Matches explicit C++ destructor declarations. -Given +Example matches Foo::~Foo() class Foo { public: virtual ~Foo(); }; - - struct Bar {}; - - -The matcher cxxDestructorDecl() -matches virtual ~Foo(). </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('cxxMethodDecl0')"><a name="cxxMethodDecl0Anchor">cxxMethodDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxMethodDecl0"><pre>Matches method declarations. -Given +Example matches y class X { void y(); }; - - -The matcher cxxMethodDecl() -matches void y(). </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('cxxRecordDecl0')"><a name="cxxRecordDecl0Anchor">cxxRecordDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="cxxRecordDecl0"><pre>Matches C++ class declarations. -Given +Example matches X, Z class X; template<class T> class Z {}; - -The matcher cxxRecordDecl() -matches X and Z. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('decl0')"><a name="decl0Anchor">decl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="decl0"><pre>Matches declarations. -Given +Examples matches X, C, and the friend declaration inside C; void X(); class C { - friend void X(); + friend X; }; - -The matcher decl() -matches void X(), C -and friend void X(). </pre></td></tr> @@ -826,49 +767,40 @@ <h2 id="decl-matchers">Node Matchers</h2> Given class X { int y; }; - -The matcher declaratorDecl() -matches int y. +declaratorDecl() + matches int y. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('decompositionDecl0')"><a name="decompositionDecl0Anchor">decompositionDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DecompositionDecl.html">DecompositionDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="decompositionDecl0"><pre>Matches decomposition-declarations. -Given - struct pair { int x; int y; }; - pair make(int, int); - int number = 42; - auto [foo, bar] = make(42, 42); +Examples matches the declaration node with foo and bar, but not +number. +(matcher = declStmt(has(decompositionDecl()))) -The matcher decompositionDecl() -matches auto [foo, bar] = make(42, 42), -but does not match number. + int number = 42; + auto [foo, bar] = std::make_pair{42, 42}; </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('enumConstantDecl0')"><a name="enumConstantDecl0Anchor">enumConstantDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1EnumConstantDecl.html">EnumConstantDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="enumConstantDecl0"><pre>Matches enum constants. -Given +Example matches A, B, C enum X { A, B, C }; -The matcher enumConstantDecl() -matches A, B and C. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('enumDecl0')"><a name="enumDecl0Anchor">enumDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1EnumDecl.html">EnumDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="enumDecl0"><pre>Matches enum declarations. -Given +Example matches X enum X { A, B, C }; - -The matcher enumDecl() -matches the enum X. </pre></td></tr> @@ -876,14 +808,9 @@ <h2 id="decl-matchers">Node Matchers</h2> <tr><td colspan="4" class="doc" id="fieldDecl0"><pre>Matches field declarations. Given - int a; - struct Foo { - int x; - }; - void bar(int val); - -The matcher fieldDecl() -matches int x. + class X { int m; }; +fieldDecl() + matches 'm'. </pre></td></tr> @@ -892,20 +819,16 @@ <h2 id="decl-matchers">Node Matchers</h2> Given class X { friend void foo(); }; - -The matcher friendDecl() -matches friend void foo(). +friendDecl() + matches 'friend void foo()'. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('functionDecl0')"><a name="functionDecl0Anchor">functionDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="functionDecl0"><pre>Matches function declarations. -Given +Example matches f void f(); - -The matcher functionDecl() -matches void f(). </pre></td></tr> @@ -914,10 +837,6 @@ <h2 id="decl-matchers">Node Matchers</h2> Example matches f template<class T> void f(T t) {} - - -The matcher functionTemplateDecl() -matches template<class T> void f(T t) {}. </pre></td></tr> @@ -926,8 +845,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given struct X { struct { int a; }; }; -The matcher indirectFieldDecl() -matches a. +indirectFieldDecl() + matches 'a'. </pre></td></tr> @@ -935,13 +854,10 @@ <h2 id="decl-matchers">Node Matchers</h2> <tr><td colspan="4" class="doc" id="labelDecl0"><pre>Matches a declaration of label. Given - void bar(); - void foo() { - goto FOO; - FOO: bar(); - } -The matcher labelDecl() -matches FOO: bar(). + goto FOO; + FOO: bar(); +labelDecl() + matches 'FOO:' </pre></td></tr> @@ -950,9 +866,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given extern "C" {} - -The matcher linkageSpecDecl() -matches extern "C" {}. +linkageSpecDecl() + matches "extern "C" {}" </pre></td></tr> @@ -960,18 +875,12 @@ <h2 id="decl-matchers">Node Matchers</h2> <tr><td colspan="4" class="doc" id="namedDecl0"><pre>Matches a declaration of anything that could have a name. Example matches X, S, the anonymous union type, i, and U; -Given typedef int X; struct S { union { int i; } U; }; -The matcher namedDecl() -matches typedef int X, S, int i - and U, -with S matching twice in C++. -Once for the injected class name and once for the declaration itself. </pre></td></tr> @@ -981,10 +890,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given namespace test {} namespace alias = ::test; - -The matcher namespaceAliasDecl() -matches alias, -but does not match test. +namespaceAliasDecl() + matches "namespace alias" but not "namespace test" </pre></td></tr> @@ -994,9 +901,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given namespace {} namespace test {} - -The matcher namespaceDecl() -matches namespace {} and namespace test {}. +namespaceDecl() + matches "namespace {}" and "namespace test {}" </pre></td></tr> @@ -1005,10 +911,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given template <typename T, int N> struct C {}; - -The matcher nonTypeTemplateParmDecl() -matches int N, -but does not match typename T. +nonTypeTemplateParmDecl() + matches 'N', but not 'T'. </pre></td></tr> @@ -1018,7 +922,6 @@ <h2 id="decl-matchers">Node Matchers</h2> Example matches Foo (Additions) @interface Foo (Additions) @end - </pre></td></tr> @@ -1028,7 +931,6 @@ <h2 id="decl-matchers">Node Matchers</h2> Example matches Foo (Additions) @implementation Foo (Additions) @end - </pre></td></tr> @@ -1038,7 +940,6 @@ <h2 id="decl-matchers">Node Matchers</h2> Example matches Foo @implementation Foo @end - </pre></td></tr> @@ -1048,7 +949,6 @@ <h2 id="decl-matchers">Node Matchers</h2> Example matches Foo @interface Foo @end - </pre></td></tr> @@ -1060,7 +960,6 @@ <h2 id="decl-matchers">Node Matchers</h2> BOOL _enabled; } @end - </pre></td></tr> @@ -1075,7 +974,6 @@ <h2 id="decl-matchers">Node Matchers</h2> @implementation Foo - (void)method {} @end - </pre></td></tr> @@ -1086,7 +984,6 @@ <h2 id="decl-matchers">Node Matchers</h2> @interface Foo @property BOOL enabled; @end - </pre></td></tr> @@ -1096,7 +993,6 @@ <h2 id="decl-matchers">Node Matchers</h2> Example matches FooDelegate @protocol FooDelegate @end - </pre></td></tr> @@ -1105,58 +1001,48 @@ <h2 id="decl-matchers">Node Matchers</h2> Given void f(int x); -The matcher parmVarDecl() -matches int x. +parmVarDecl() + matches int x. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('recordDecl0')"><a name="recordDecl0Anchor">recordDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="recordDecl0"><pre>Matches class, struct, and union declarations. -Given +Example matches X, Z, U, and S class X; template<class T> class Z {}; struct S {}; union U {}; - -The matcher recordDecl() -matches X, Z, -S and U. </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('staticAssertDecl0')"><a name="staticAssertDecl0Anchor">staticAssertDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1StaticAssertDecl.html">StaticAssertDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="staticAssertDecl0"><pre>Matches a C++ static_assert declaration. -Given +Example: + staticAssertDecl() +matches + static_assert(sizeof(S) == sizeof(int)) +in struct S { int x; }; static_assert(sizeof(S) == sizeof(int)); - - -The matcher staticAssertDecl() -matches static_assert(sizeof(S) == sizeof(int)). </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('tagDecl0')"><a name="tagDecl0Anchor">tagDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>>...</td></tr> <tr><td colspan="4" class="doc" id="tagDecl0"><pre>Matches tag declarations. -Given +Example matches X, Z, U, S, E class X; template<class T> class Z {}; struct S {}; union U {}; - enum E { A, B, C }; - - -The matcher tagDecl() -matches class X, class Z {}, the injected class name -class Z, struct S {}, -the injected class name struct S, union U {}, -the injected class name union U -and enum E { A, B, C }. + enum E { + A, B, C + }; </pre></td></tr> @@ -1165,10 +1051,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given template <template <typename> class Z, int N> struct C {}; - -The matcher templateTemplateParmDecl() -matches template <typename> class Z, -but does not match int N. +templateTypeParmDecl() + matches 'Z', but not 'N'. </pre></td></tr> @@ -1177,10 +1061,8 @@ <h2 id="decl-matchers">Node Matchers</h2> Given template <typename T, int N> struct C {}; - -The matcher templateTypeParmDecl() -matches typename T, -but does not int N. +templateTypeParmDecl() + matches 'T', but not 'N'. </pre></td></tr> @@ -1190,12 +1072,10 @@ <h2 id="decl-matchers">Node Matchers</h2> Given int X; namespace NS { - int Y; + int Y; } // namespace NS - -The matcher namedDecl(hasDeclContext(translationUnitDecl())) -matches X and NS, -but does not match Y. +decl(hasDeclContext(translationUnitDecl())) + matches "int X", but not "int Y". </pre></td></tr> @@ -1205,22 +1085,17 @@ <h2 id="decl-matchers">Node Matchers</h2> Given typedef int X; using Y = int; - -The matcher typeAliasDecl() -matches using Y = int, -but does not match typedef int X. +typeAliasDecl() + matches "using Y = int", but not "typedef int X" </pre></td></tr> <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('typeAliasTemplateDecl0')"><a name="typeAliasTemplateDecl0Anchor">typeAliasTemplateDecl</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeAliasTemplateDecl.html">TypeAliasTemplateDecl</a>>...... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/116477 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits