Skip to content

Commit

Permalink
Change default traversal in AST Matchers to ignore invisible nodes
Browse files Browse the repository at this point in the history
This makes many scenarios simpler by not requiring the user to write
ignoringImplicit() all the time, nor to account for non-visible
cxxConstructExpr() and cxxMemberCalExpr() nodes. This is also, in part,
inclusive of the equivalent of adding a use of ignoringParenImpCasts()
between all expr()-related matchers in an expression.

The pre-existing traverse(TK_AsIs, ...) matcher can be used to explcitly
match on implicit/invisible nodes. See

  http://lists.llvm.org/pipermail/cfe-dev/2019-December/064143.html

for more

Reviewers: aaron.ballman

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D72534
  • Loading branch information
steveire committed May 24, 2020
1 parent 51dec88 commit d0da5d2
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
9 changes: 8 additions & 1 deletion clang/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,14 @@ release of Clang. Users of the build system should adjust accordingly.
AST Matchers
------------

- ...
- Traversal in AST Matchers was simplified to use the
``TK_IgnoreUnlessSpelledInSource`` mode by default, instead of ``TK_AsIs``.
This means that many uses of the ``ignoringImplicit()`` and similar matchers
is no longer necessary. Clients of AST Matchers which wish to match on
implicit AST nodes can wrap their matcher in ``traverse(TK_AsIs, ...)`` or
use ``TraversalKindScope`` if appropriate. The ``clang-query`` tool also
uses ``IgnoreUnlessSpelledInSource`` by default. The mode can be changed
using ``set traversal AsIs`` in the ``clang-query`` environment.

clang-format
------------
Expand Down
2 changes: 1 addition & 1 deletion clang/include/clang/AST/ParentMapContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class ParentMapContext {
private:
ASTContext &ASTCtx;
class ParentMap;
TraversalKind Traversal = TK_AsIs;
TraversalKind Traversal = TK_IgnoreUnlessSpelledInSource;
std::unique_ptr<ParentMap> Parents;
};

Expand Down

0 comments on commit d0da5d2

Please sign in to comment.