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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits