]> granicus.if.org Git - clang/commitdiff
Improve documentation for AST matchers.
authorManuel Klimek <klimek@google.com>
Fri, 21 Jun 2013 09:59:59 +0000 (09:59 +0000)
committerManuel Klimek <klimek@google.com>
Fri, 21 Jun 2013 09:59:59 +0000 (09:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184538 91177308-0d34-0410-b5e6-96231b3b80d8

docs/LibASTMatchersReference.html

index 50ff38edfade47e48949d139db66de172a20570d..7b70f118454864b11bf55a2c0038ec32c73153ae 100644 (file)
@@ -57,6 +57,18 @@ find all matchers that can be used to match on Stmt nodes.</p>
 <p>The exception to that rule are matchers that can match on any node. Those
 are marked with a * and are listed in the beginning of each category.</p>
 
+<p>Note that the categorization of matchers is a great help when you combine
+them into matcher expressions. You will usually want to form matcher expressions
+that read like english sentences by alternating between node matchers and
+narrowing or traversal matchers, like this:
+<pre>
+recordDecl(hasDescendant(
+    ifStmt(hasTrueExpression(
+        expr(hasDescendant(
+            ifStmt()))))))
+</pre>
+</p>
+
 <!-- ======================================================================= -->
 <h2 id="decl-matchers">Node Matchers</h2>
 <!-- ======================================================================= -->
@@ -73,6 +85,17 @@ and implicitly act as allOf matchers.</p>
 bind the matched node to the given string, to be later retrieved from the
 match callback.</p>
 
+<p>It is important to remember that the arguments to node matchers are
+predicates on the same node, just with additional information about the type.
+This is often useful to make matcher expression more readable by inlining bind
+calls into redundant node matchers inside another node matcher:
+<pre>
+// This binds the CXXRecordDecl to "id", as the decl() matcher will stay on
+// the same node.
+recordDecl(decl().bind("id"), hasName("::MyClass"))
+</pre>
+</p>
+
 <table>
 <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
 <!-- START_DECL_MATCHERS -->