steveire created this revision. steveire added a reviewer: aaron.ballman. Herald added a subscriber: cfe-commits.
Repository: rC Clang https://reviews.llvm.org/D54404 Files: lib/ASTMatchers/Dynamic/Registry.cpp unittests/ASTMatchers/Dynamic/RegistryTest.cpp 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 Index: lib/ASTMatchers/Dynamic/Registry.cpp =================================================================== --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -601,15 +601,54 @@ Registry::getMatchingMatchers(ast_type_traits::ASTNodeKind StaticType) { std::vector<MatchingMatcher> Result; + static std::vector<StringRef> 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<ArgKind> AcceptedTypes; AcceptedTypes.push_back(StaticType); processAcceptableMatchers( AcceptedTypes, [&Result](StringRef Name, const MatcherDescriptor &Matcher, std::set<ASTNodeKind> &RetKinds, std::vector<std::vector<ArgKind>> 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 Index: lib/ASTMatchers/Dynamic/Registry.cpp =================================================================== --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -601,15 +601,54 @@ Registry::getMatchingMatchers(ast_type_traits::ASTNodeKind StaticType) { std::vector<MatchingMatcher> Result; + static std::vector<StringRef> 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<ArgKind> AcceptedTypes; AcceptedTypes.push_back(StaticType); processAcceptableMatchers( AcceptedTypes, [&Result](StringRef Name, const MatcherDescriptor &Matcher, std::set<ASTNodeKind> &RetKinds, std::vector<std::vector<ArgKind>> ArgsKinds, unsigned MaxSpecificity) { - Result.emplace_back((Name + "()").str()); + if (!std::binary_search(excludedMatchers.begin(), + excludedMatchers.end(), Name)) { + Result.emplace_back((Name + "()").str()); + } }); return Result;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits