Skip to content

Commit e6f9cb0

Browse files
committed
[docs] dump_ast_matchers strips internal::(Bindable)?Matcher from Result_type
Summary: Remove `internal::Matcher` and `internal::BindableMatcher` from Result Type when dumping AST Matchers Reviewers: joerg, gribozavr2, aaron.ballman Reviewed By: aaron.ballman Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D75046
1 parent 841be98 commit e6f9cb0

File tree

3 files changed

+80
-63
lines changed

3 files changed

+80
-63
lines changed

clang/docs/LibASTMatchersReference.html

Lines changed: 73 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2948,6 +2948,19 @@ <h2 id="narrowing-matchers">Narrowing Matchers</h2>
29482948
</pre></td></tr>
29492949

29502950

2951+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isInstantiated0')"><a name="isInstantiated0Anchor">isInstantiated</a></td><td></td></tr>
2952+
<tr><td colspan="4" class="doc" id="isInstantiated0"><pre>Matches declarations that are template instantiations or are inside
2953+
template instantiations.
2954+
2955+
Given
2956+
template&lt;typename T&gt; void A(T t) { T i; }
2957+
A(0);
2958+
A(0U);
2959+
functionDecl(isInstantiated())
2960+
matches 'A(int) {...};' and 'A(unsigned) {...}'.
2961+
</pre></td></tr>
2962+
2963+
29512964
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPrivate0')"><a name="isPrivate0Anchor">isPrivate</a></td><td></td></tr>
29522965
<tr><td colspan="4" class="doc" id="isPrivate0"><pre>Matches private C++ declarations.
29532966

@@ -3516,6 +3529,16 @@ <h2 id="narrowing-matchers">Narrowing Matchers</h2>
35163529
</pre></td></tr>
35173530

35183531

3532+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyName0')"><a name="hasAnyName0Anchor">hasAnyName</a></td><td>StringRef, ..., StringRef</td></tr>
3533+
<tr><td colspan="4" class="doc" id="hasAnyName0"><pre>Matches NamedDecl nodes that have any of the specified names.
3534+
3535+
This matcher is only provided as a performance optimization of hasName.
3536+
hasAnyName(a, b, c)
3537+
is equivalent to, but faster than
3538+
anyOf(hasName(a), hasName(b), hasName(c))
3539+
</pre></td></tr>
3540+
3541+
35193542
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasExternalFormalLinkage0')"><a name="hasExternalFormalLinkage0Anchor">hasExternalFormalLinkage</a></td><td></td></tr>
35203543
<tr><td colspan="4" class="doc" id="hasExternalFormalLinkage0"><pre>Matches a declaration that has external formal linkage.
35213544

@@ -3679,6 +3702,17 @@ <h2 id="narrowing-matchers">Narrowing Matchers</h2>
36793702
</pre></td></tr>
36803703

36813704

3705+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnySelector0')"><a name="hasAnySelector0Anchor">hasAnySelector</a></td><td>StringRef, ..., StringRef</td></tr>
3706+
<tr><td colspan="4" class="doc" id="hasAnySelector0"><pre>Matches when at least one of the supplied string equals to the
3707+
Selector.getAsString()
3708+
3709+
matcher = objCMessageExpr(hasSelector("methodA:", "methodB:"));
3710+
matches both of the expressions below:
3711+
[myObj methodA:argA];
3712+
[myObj methodB:argB];
3713+
</pre></td></tr>
3714+
3715+
36823716
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasKeywordSelector0')"><a name="hasKeywordSelector0Anchor">hasKeywordSelector</a></td><td></td></tr>
36833717
<tr><td colspan="4" class="doc" id="hasKeywordSelector0"><pre>Matches when the selector is a keyword selector
36843718

@@ -4015,6 +4049,17 @@ <h2 id="narrowing-matchers">Narrowing Matchers</h2>
40154049
</pre></td></tr>
40164050

40174051

4052+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpandedFromMacro0')"><a name="isExpandedFromMacro0Anchor">isExpandedFromMacro</a></td><td>llvm::StringRef MacroName</td></tr>
4053+
<tr><td colspan="4" class="doc" id="isExpandedFromMacro0"><pre>Matches statements that are (transitively) expanded from the named macro.
4054+
Does not match if only part of the statement is expanded from that macro or
4055+
if different parts of the the statement are expanded from different
4056+
appearances of the macro.
4057+
4058+
FIXME: Change to be a polymorphic matcher that works on any syntactic
4059+
node. There's nothing `Stmt`-specific about it.
4060+
</pre></td></tr>
4061+
4062+
40184063
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching1')"><a name="isExpansionInFileMatching1Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
40194064
<tr><td colspan="4" class="doc" id="isExpansionInFileMatching1"><pre>Matches AST nodes that were expanded within files whose name is
40204065
partially matching a given regex.
@@ -4058,6 +4103,22 @@ <h2 id="narrowing-matchers">Narrowing Matchers</h2>
40584103
</pre></td></tr>
40594104

40604105

4106+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isInTemplateInstantiation0')"><a name="isInTemplateInstantiation0Anchor">isInTemplateInstantiation</a></td><td></td></tr>
4107+
<tr><td colspan="4" class="doc" id="isInTemplateInstantiation0"><pre>Matches statements inside of a template instantiation.
4108+
4109+
Given
4110+
int j;
4111+
template&lt;typename T&gt; void A(T t) { T i; j += 42;}
4112+
A(0);
4113+
A(0U);
4114+
declStmt(isInTemplateInstantiation())
4115+
matches 'int i;' and 'unsigned i'.
4116+
unless(stmt(isInTemplateInstantiation()))
4117+
will NOT match j += 42; as it's shared between the template definition and
4118+
instantiation.
4119+
</pre></td></tr>
4120+
4121+
40614122
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isOMPStructuredBlock0')"><a name="isOMPStructuredBlock0Anchor">isOMPStructuredBlock</a></td><td></td></tr>
40624123
<tr><td colspan="4" class="doc" id="isOMPStructuredBlock0"><pre>Matches the Stmt AST node that is marked as being the structured-block
40634124
of an OpenMP executable directive.
@@ -4551,56 +4612,6 @@ <h2 id="narrowing-matchers">Narrowing Matchers</h2>
45514612
Usable as: Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
45524613
</pre></td></tr>
45534614

4554-
4555-
<tr><td>Matcher&lt;internal::Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;&gt;</td><td class="name" onclick="toggle('isInstantiated0')"><a name="isInstantiated0Anchor">isInstantiated</a></td><td></td></tr>
4556-
<tr><td colspan="4" class="doc" id="isInstantiated0"><pre>Matches declarations that are template instantiations or are inside
4557-
template instantiations.
4558-
4559-
Given
4560-
template&lt;typename T&gt; void A(T t) { T i; }
4561-
A(0);
4562-
A(0U);
4563-
functionDecl(isInstantiated())
4564-
matches 'A(int) {...};' and 'A(unsigned) {...}'.
4565-
</pre></td></tr>
4566-
4567-
4568-
<tr><td>Matcher&lt;internal::Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;&gt;</td><td class="name" onclick="toggle('hasAnyName0')"><a name="hasAnyName0Anchor">hasAnyName</a></td><td>StringRef, ..., StringRef</td></tr>
4569-
<tr><td colspan="4" class="doc" id="hasAnyName0"><pre>Matches NamedDecl nodes that have any of the specified names.
4570-
4571-
This matcher is only provided as a performance optimization of hasName.
4572-
hasAnyName(a, b, c)
4573-
is equivalent to, but faster than
4574-
anyOf(hasName(a), hasName(b), hasName(c))
4575-
</pre></td></tr>
4576-
4577-
4578-
<tr><td>Matcher&lt;internal::Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;&gt;</td><td class="name" onclick="toggle('hasAnySelector0')"><a name="hasAnySelector0Anchor">hasAnySelector</a></td><td>StringRef, ..., StringRef</td></tr>
4579-
<tr><td colspan="4" class="doc" id="hasAnySelector0"><pre>Matches when at least one of the supplied string equals to the
4580-
Selector.getAsString()
4581-
4582-
matcher = objCMessageExpr(hasSelector("methodA:", "methodB:"));
4583-
matches both of the expressions below:
4584-
[myObj methodA:argA];
4585-
[myObj methodB:argB];
4586-
</pre></td></tr>
4587-
4588-
4589-
<tr><td>Matcher&lt;internal::Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;&gt;</td><td class="name" onclick="toggle('isInTemplateInstantiation0')"><a name="isInTemplateInstantiation0Anchor">isInTemplateInstantiation</a></td><td></td></tr>
4590-
<tr><td colspan="4" class="doc" id="isInTemplateInstantiation0"><pre>Matches statements inside of a template instantiation.
4591-
4592-
Given
4593-
int j;
4594-
template&lt;typename T&gt; void A(T t) { T i; j += 42;}
4595-
A(0);
4596-
A(0U);
4597-
declStmt(isInTemplateInstantiation())
4598-
matches 'int i;' and 'unsigned i'.
4599-
unless(stmt(isInTemplateInstantiation()))
4600-
will NOT match j += 42; as it's shared between the template definition and
4601-
instantiation.
4602-
</pre></td></tr>
4603-
46044615
<!--END_NARROWING_MATCHERS -->
46054616
</table>
46064617

@@ -6600,6 +6611,12 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
66006611
</pre></td></tr>
66016612

66026613

6614+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('loc1')"><a name="loc1Anchor">loc</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
6615+
<tr><td colspan="4" class="doc" id="loc1"><pre>Matches NestedNameSpecifierLocs for which the given inner
6616+
NestedNameSpecifier-matcher matches.
6617+
</pre></td></tr>
6618+
6619+
66036620
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('specifiesTypeLoc0')"><a name="specifiesTypeLoc0Anchor">specifiesTypeLoc</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; InnerMatcher</td></tr>
66046621
<tr><td colspan="4" class="doc" id="specifiesTypeLoc0"><pre>Matches nested name specifier locs that specify a type matching the
66056622
given TypeLoc.
@@ -7401,6 +7418,12 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
74017418
</pre></td></tr>
74027419

74037420

7421+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
7422+
<tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
7423+
QualType-matcher matches.
7424+
</pre></td></tr>
7425+
7426+
74047427
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>&gt;</td><td class="name" onclick="toggle('hasType2')"><a name="hasType2Anchor">hasType</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
74057428
<tr><td colspan="4" class="doc" id="hasType2"><pre>Matches if the expression's or declaration's type matches a type
74067429
matcher.
@@ -7636,18 +7659,6 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
76367659
if (true) {}
76377660
</pre></td></tr>
76387661

7639-
7640-
<tr><td>Matcher&lt;internal::BindableMatcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc1')"><a name="loc1Anchor">loc</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
7641-
<tr><td colspan="4" class="doc" id="loc1"><pre>Matches NestedNameSpecifierLocs for which the given inner
7642-
NestedNameSpecifier-matcher matches.
7643-
</pre></td></tr>
7644-
7645-
7646-
<tr><td>Matcher&lt;internal::BindableMatcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
7647-
<tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
7648-
QualType-matcher matches.
7649-
</pre></td></tr>
7650-
76517662
<!--END_TRAVERSAL_MATCHERS -->
76527663
</table>
76537664

clang/docs/tools/dump_ast_matchers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ def unify_arguments(args):
103103
args = re.sub(r'(^|\s)M\d?(\s)', r'\1Matcher<*>\2', args)
104104
return args
105105

106+
def unify_type(result_type):
107+
"""Gets rid of anything the user doesn't care about in the type name."""
108+
result_type = re.sub(r'^internal::(Bindable)?Matcher<([a-zA-Z_][a-zA-Z0-9_]*)>$', r'\2', result_type)
109+
return result_type
110+
106111
def add_matcher(result_type, name, args, comment, is_dyncast=False):
107112
"""Adds a matcher to one of our categories."""
108113
if name == 'id':
@@ -111,6 +116,7 @@ def add_matcher(result_type, name, args, comment, is_dyncast=False):
111116
matcher_id = '%s%d' % (name, ids[name])
112117
ids[name] += 1
113118
args = unify_arguments(args)
119+
result_type = unify_type(result_type)
114120
matcher_html = TD_TEMPLATE % {
115121
'result': esc('Matcher<%s>' % result_type),
116122
'name': name,

clang/include/clang/ASTMatchers/ASTMatchers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ AST_POLYMORPHIC_MATCHER_P(isExpansionInFileMatching,
307307
///
308308
/// FIXME: Change to be a polymorphic matcher that works on any syntactic
309309
/// node. There's nothing `Stmt`-specific about it.
310-
AST_MATCHER_P(clang::Stmt, isExpandedFromMacro, llvm::StringRef, MacroName) {
310+
AST_MATCHER_P(Stmt, isExpandedFromMacro, llvm::StringRef, MacroName) {
311311
// Verifies that the statement' beginning and ending are both expanded from
312312
// the same instance of the given macro.
313313
auto& Context = Finder->getASTContext();

0 commit comments

Comments
 (0)