forked from OSchip/llvm-project
Fix AST matcher documentation for overloaded matchers.
Before this patch we would only use the fist occurance of a matcher function in the documentation, for example leaving out hasType(Matcher<QualType>). llvm-svn: 202019
This commit is contained in:
parent
8f2d3f0f90
commit
0389269a7d
|
@ -2043,24 +2043,6 @@ Usable as: Any Matcher
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
|
||||
provided matcher.
|
||||
|
||||
Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))
|
||||
class X {}; Matches X, because X::X is a class of name X inside X.
|
||||
class Y { class X {}; };
|
||||
class Z { class Y { class X {}; }; }; Does not match Z.
|
||||
|
||||
ChildT must be an AST base type.
|
||||
|
||||
As opposed to 'has', 'forEach' will cause a match for each result that
|
||||
matches instead of only on the first one.
|
||||
|
||||
Usable as: Any Matcher
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('forEachDescendant0')"><a name="forEachDescendant0Anchor">forEachDescendant</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="forEachDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
|
||||
provided matcher.
|
||||
|
@ -2085,17 +2067,20 @@ Usable as: Any Matcher
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
|
||||
provided matcher.
|
||||
|
||||
Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
|
||||
Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))
|
||||
class X {}; Matches X, because X::X is a class of name X inside X.
|
||||
class Y { class X {}; };
|
||||
class Z { class Y { class X {}; }; }; Does not match Z.
|
||||
|
||||
ChildT must be an AST base type.
|
||||
|
||||
As opposed to 'has', 'forEach' will cause a match for each result that
|
||||
matches instead of only on the first one.
|
||||
|
||||
Usable as: Any Matcher
|
||||
</pre></td></tr>
|
||||
|
||||
|
@ -2129,6 +2114,21 @@ Usable as: Any Matcher
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
|
||||
provided matcher.
|
||||
|
||||
Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
|
||||
class X {}; Matches X, because X::X is a class of name X inside X.
|
||||
class Y { class X {}; };
|
||||
class Z { class Y { class X {}; }; }; Does not match Z.
|
||||
|
||||
ChildT must be an AST base type.
|
||||
|
||||
Usable as: Any Matcher
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('hasParent0')"><a name="hasParent0Anchor">hasParent</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasParent0"><pre>Matches AST nodes that have a parent that matches the provided
|
||||
matcher.
|
||||
|
@ -2403,6 +2403,10 @@ matches 'int x' in
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('on0')"><a name="on0Anchor">on</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
|
||||
|
||||
|
@ -2414,15 +2418,17 @@ FIXME: Overload to allow directly matching types?
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('thisPointerType1')"><a name="thisPointerType1Anchor">thisPointerType</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="thisPointerType1"><pre>Overloaded to match the type's declaration.
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('thisPointerType0')"><a name="thisPointerType0Anchor">thisPointerType</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="thisPointerType0"><pre>Matches if the expression's type either matches the specified
|
||||
matcher, or is a pointer to a type that matches the InnerMatcher.
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>></td><td class="name" onclick="toggle('ofClass0')"><a name="ofClass0Anchor">ofClass</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="ofClass0"><pre>Matches the class declaration that the given method declaration
|
||||
belongs to.
|
||||
|
@ -2491,6 +2497,24 @@ Example matches y.x() (matcher = callExpr(callee(methodDecl(hasName("x")))))
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>></td><td class="name" onclick="toggle('callee0')"><a name="callee0Anchor">callee</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="callee0"><pre>Matches if the call expression's callee expression matches.
|
||||
|
||||
Given
|
||||
class Y { void x() { this->x(); x(); Y y; y.x(); } };
|
||||
void f() { f(); }
|
||||
callExpr(callee(expr()))
|
||||
matches this->x(), x(), y.x(), f()
|
||||
with callee(...)
|
||||
matching this->x, x, y.x, f respectively
|
||||
|
||||
Note: Callee cannot take the more general internal::Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>>
|
||||
because this introduces ambiguous overloads with calls to Callee taking a
|
||||
internal::Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>, as the matcher hierarchy is purely
|
||||
implemented in terms of implicit casts.
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>></td><td class="name" onclick="toggle('hasAnyArgument0')"><a name="hasAnyArgument0Anchor">hasAnyArgument</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasAnyArgument0"><pre>Matches any argument of a call expression or a constructor call
|
||||
expression.
|
||||
|
@ -2871,6 +2895,17 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.h
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>></td><td class="name" onclick="toggle('hasType0')"><a name="hasType0Anchor">hasType</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasType0"><pre>Matches if the expression's or declaration's type matches a type
|
||||
matcher.
|
||||
|
||||
Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
|
||||
and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
|
||||
class X {};
|
||||
void y(X &x) { x; X z; }
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>></td><td class="name" onclick="toggle('ignoringImpCasts0')"><a name="ignoringImpCasts0Anchor">ignoringImpCasts</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="ignoringImpCasts0"><pre>Matches expressions that match InnerMatcher after any implicit casts
|
||||
are stripped off.
|
||||
|
@ -3318,11 +3353,36 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallEx
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('pointsTo0')"><a name="pointsTo0Anchor">pointsTo</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="pointsTo0"><pre>Matches if the matched type is a pointer type and the pointee type
|
||||
matches the specified matcher.
|
||||
|
||||
Example matches y->x()
|
||||
(matcher = callExpr(on(hasType(pointsTo(recordDecl(hasName("Y")))))))
|
||||
class Y { public: void x(); };
|
||||
void z() { Y *y; y->x(); }
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('references1')"><a name="references1Anchor">references</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="references1"><pre>Overloaded to match the referenced type's declaration.
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('references0')"><a name="references0Anchor">references</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="references0"><pre>Matches if the matched type is a reference type and the referenced
|
||||
type matches the specified matcher.
|
||||
|
||||
Example matches X &x and const X &y
|
||||
(matcher = varDecl(hasType(references(recordDecl(hasName("X"))))))
|
||||
class X {
|
||||
void a(X b) {
|
||||
X &x = b;
|
||||
const X &y = b;
|
||||
};
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>></td><td class="name" onclick="toggle('hasDeclaration5')"><a name="hasDeclaration5Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a node if the declaration associated with that node
|
||||
matches the given matcher.
|
||||
|
@ -3662,6 +3722,17 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.h
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>></td><td class="name" onclick="toggle('hasType1')"><a name="hasType1Anchor">hasType</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasType1"><pre>Matches if the expression's or declaration's type matches a type
|
||||
matcher.
|
||||
|
||||
Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
|
||||
and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
|
||||
class X {};
|
||||
void y(X &x) { x; X z; }
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('hasInitializer0')"><a name="hasInitializer0Anchor">hasInitializer</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasInitializer0"><pre>Matches a variable declaration that has an initializer expression
|
||||
that matches the given matcher.
|
||||
|
|
|
@ -119,9 +119,9 @@ def add_matcher(result_type, name, args, comment, is_dyncast=False):
|
|||
# arguments.
|
||||
elif ('Matcher<' not in args or
|
||||
name in ['allOf', 'anyOf', 'anything', 'unless']):
|
||||
narrowing_matchers[result_type + name] = matcher_html
|
||||
narrowing_matchers[result_type + name + esc(args)] = matcher_html
|
||||
else:
|
||||
traversal_matchers[result_type + name] = matcher_html
|
||||
traversal_matchers[result_type + name + esc(args)] = matcher_html
|
||||
|
||||
def act_on_decl(declaration, comment, allowed_types):
|
||||
"""Parse the matcher out of the given declaration and comment.
|
||||
|
|
Loading…
Reference in New Issue