This revision was automatically updated to reflect the committed changes. Closed by commit rG125ccd375147: [ASTMatchers] Add isInAnonymousNamespace narrowing matcher (authored by carlosgalvezp).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140328/new/ https://reviews.llvm.org/D140328 Files: clang/docs/LibASTMatchersReference.html clang/docs/ReleaseNotes.rst clang/include/clang/ASTMatchers/ASTMatchers.h clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
Index: clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp =================================================================== --- clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -3550,6 +3550,41 @@ cxxRecordDecl(hasName("vector"), isInStdNamespace()))); } +TEST_P(ASTMatchersTest, InAnonymousNamespace) { + if (!GetParam().isCXX()) { + return; + } + + EXPECT_TRUE( + notMatches("class vector {};" + "namespace foo {" + " class vector {};" + "}", + cxxRecordDecl(hasName("vector"), isInAnonymousNamespace()))); + + EXPECT_TRUE( + matches("namespace {" + " class vector {};" + "}", + cxxRecordDecl(hasName("vector"), isInAnonymousNamespace()))); + + EXPECT_TRUE( + matches("namespace foo {" + " namespace {" + " class vector {};" + " }" + "}", + cxxRecordDecl(hasName("vector"), isInAnonymousNamespace()))); + + EXPECT_TRUE( + matches("namespace {" + " namespace foo {" + " class vector {};" + " }" + "}", + cxxRecordDecl(hasName("vector"), isInAnonymousNamespace()))); +} + TEST_P(ASTMatchersTest, InStdNamespace_CXX11) { if (!GetParam().isCXX11OrLater()) { return; Index: clang/include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchers.h +++ clang/include/clang/ASTMatchers/ASTMatchers.h @@ -7813,6 +7813,30 @@ /// cxxRecordDecl(hasName("vector"), isInStdNamespace()) will match only #1. AST_MATCHER(Decl, isInStdNamespace) { return Node.isInStdNamespace(); } +/// Matches declarations in an anonymous namespace. +/// +/// Given +/// \code +/// class vector {}; +/// namespace foo { +/// class vector {}; +/// namespace { +/// class vector {}; // #1 +/// } +/// } +/// namespace { +/// class vector {}; // #2 +/// namespace foo { +/// class vector{}; // #3 +/// } +/// } +/// \endcode +/// cxxRecordDecl(hasName("vector"), isInAnonymousNamespace()) will match +/// #1, #2 and #3. +AST_MATCHER(Decl, isInAnonymousNamespace) { + return Node.isInAnonymousNamespace(); +} + /// If the given case statement does not use the GNU case range /// extension, matches the constant given in the statement. /// Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -859,6 +859,7 @@ AST Matchers ------------ +- Add ``isInAnoymousNamespace`` matcher to match declarations in an anonymous namespace. clang-format ------------ Index: clang/docs/LibASTMatchersReference.html =================================================================== --- clang/docs/LibASTMatchersReference.html +++ clang/docs/LibASTMatchersReference.html @@ -3962,6 +3962,25 @@ cxxRecordDecl(hasName("vector"), isInStdNamespace()) will match only #1. </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('isInAnonymousNamespace0')"><a name="isInAnonymousNamespace0Anchor">isInAnonymousNamespace</a></td><td></td></tr> +<tr><td colspan="4" class="doc" id="isInAnonymousNamespace0"><pre>Matches declarations in an anonymous namespace. + +Given + class vector {}; + namespace foo { + class vector {}; + namespace { + class vector {}; // #1 + } + } + namespace { + class vector {}; // #2 + namespace foo { + class vector{}; // #3 + } + } +cxxRecordDecl(hasName("vector"), isInAnonymousNamespace()) will match #1, #2 and #3. +</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('isInstantiated0')"><a name="isInstantiated0Anchor">isInstantiated</a></td><td></td></tr> <tr><td colspan="4" class="doc" id="isInstantiated0"><pre>Matches declarations that are template instantiations or are inside
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits