Change default traversal in AST Matchers to ignore invisible nodes

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
This commit is contained in:
Stephen Kelly 2020-01-12 09:38:11 +00:00
parent 51dec88c5d
commit d0da5d2bbe
2 changed files with 9 additions and 2 deletions

View File

@ -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
------------

View File

@ -67,7 +67,7 @@ public:
private:
ASTContext &ASTCtx;
class ParentMap;
TraversalKind Traversal = TK_AsIs;
TraversalKind Traversal = TK_IgnoreUnlessSpelledInSource;
std::unique_ptr<ParentMap> Parents;
};