Provide match function to look over an entire TU again.
llvm-svn: 259648
This commit is contained in:
parent
0826bf2211
commit
739ae64346
|
@ -241,6 +241,11 @@ match(MatcherT Matcher, const ast_type_traits::DynTypedNode &Node,
|
|||
ASTContext &Context);
|
||||
/// @}
|
||||
|
||||
/// \brief Returns the results of matching \p Matcher on the translation unit of
|
||||
/// \p Context and collects the \c BoundNodes of all callback invocations.
|
||||
template <typename MatcherT>
|
||||
SmallVector<BoundNodes, 1> match(MatcherT Matcher, ASTContext &Context);
|
||||
|
||||
/// \brief Returns the first result of type \c NodeT bound to \p BoundTo.
|
||||
///
|
||||
/// Returns \c NULL if there is no match, or if the matching node cannot be
|
||||
|
@ -288,6 +293,16 @@ match(MatcherT Matcher, const NodeT &Node, ASTContext &Context) {
|
|||
return match(Matcher, ast_type_traits::DynTypedNode::create(Node), Context);
|
||||
}
|
||||
|
||||
template <typename MatcherT>
|
||||
SmallVector<BoundNodes, 1>
|
||||
match(MatcherT Matcher, ASTContext &Context) {
|
||||
internal::CollectMatchesCallback Callback;
|
||||
MatchFinder Finder;
|
||||
Finder.addMatcher(Matcher, &Callback);
|
||||
Finder.matchAST(Context);
|
||||
return std::move(Callback.Nodes);
|
||||
}
|
||||
|
||||
} // end namespace ast_matchers
|
||||
} // end namespace clang
|
||||
|
||||
|
|
|
@ -5050,6 +5050,15 @@ TEST(MatchFinder, InterceptsEndOfTranslationUnit) {
|
|||
EXPECT_TRUE(VerifyCallback.Called);
|
||||
}
|
||||
|
||||
TEST(Matcher, matchOverEntireASTContext) {
|
||||
std::unique_ptr<ASTUnit> AST =
|
||||
clang::tooling::buildASTFromCode("struct { int *foo; };");
|
||||
ASSERT_TRUE(AST.get());
|
||||
auto PT = selectFirst<PointerType>(
|
||||
"x", match(pointerType().bind("x"), AST->getASTContext()));
|
||||
EXPECT_NE(nullptr, PT);
|
||||
}
|
||||
|
||||
TEST(EqualsBoundNodeMatcher, QualType) {
|
||||
EXPECT_TRUE(matches(
|
||||
"int i = 1;", varDecl(hasType(qualType().bind("type")),
|
||||
|
@ -5276,7 +5285,6 @@ TEST(ObjCMessageExprMatcher, SimpleExprs) {
|
|||
objcMessageExpr(matchesSelector("uppercase*"),
|
||||
argumentCountIs(0)
|
||||
)));
|
||||
|
||||
}
|
||||
|
||||
} // end namespace ast_matchers
|
||||
|
|
Loading…
Reference in New Issue