Index: lib/ASTMatchers/Dynamic/Registry.cpp =================================================================== --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -601,6 +601,42 @@ Registry::getMatchingMatchers(ast_type_traits::ASTNodeKind StaticType) { std::vector Result; + static std::vector excludedMatchers{ + "allOf", + "anyOf", + "anything", + "containsDeclaration", + "eachOf", + "equalsNode", + "findAll", + "forEach", + "forEachConstructorInitializer", + "forEachDescendant", + "forEachOverridden", + "forEachSwitchCase", + "has", + "hasAncestor", + "hasAnyArgument", + "hasAnyConstructorInitializer", + "hasAnyDeclaration", + "hasAnyName", + "hasAnyParameter", + "hasAnySelector", + "hasAnySubstatement", + "hasAnyTemplateArgument", + "hasAnyUsingShadowDecl", + "hasArgumentOfType", + "hasDescendant", + "hasEitherOperand", + "hasMethod", + "hasParent", + "isExpansionInFileMatching", + "isSameOrDerivedFrom", + "matchesName", + "matchesSelector", + "unless"}; + assert(std::is_sorted(excludedMatchers.begin(), excludedMatchers.end())); + std::vector AcceptedTypes; AcceptedTypes.push_back(StaticType); @@ -609,7 +645,10 @@ std::set &RetKinds, std::vector> ArgsKinds, unsigned MaxSpecificity) { - Result.emplace_back((Name + "()").str()); + if (!std::binary_search(excludedMatchers.begin(), + excludedMatchers.end(), Name)) { + Result.emplace_back((Name + "()").str()); + } }); return Result; Index: unittests/ASTMatchers/Dynamic/RegistryTest.cpp =================================================================== --- unittests/ASTMatchers/Dynamic/RegistryTest.cpp +++ unittests/ASTMatchers/Dynamic/RegistryTest.cpp @@ -579,6 +579,8 @@ EXPECT_TRUE(!Contains(Matchers, "functionDecl()")); EXPECT_TRUE(Contains(Matchers, "cxxMethodDecl()")); + + EXPECT_TRUE(!Contains(Matchers, "has()")); } } // end anonymous namespace