[PATCH] Introduce clang-query tool.
Samuel Benzaquen
sbenza at google.com
Wed Nov 6 09:29:06 PST 2013
================
Comment at: clang-query/QueryParser.h:20
@@ +19,3 @@
+///
+/// \return A reference to the parsed query object, which may be an
+/// \c InvalidQuery if a parse error occurs.
----------------
There should be a comment somewhere specifying the valid commands and their syntax.
It could in the parser, or somewhere in ClangQuery.cpp (possibly printing it to the user with a --help option).
================
Comment at: clang-query/Query.cpp:55-65
@@ +54,13 @@
+ CollectBoundNodes Collect(Matches);
+ if (Matcher.canConvertTo<Decl>()) {
+ DeclarationMatcher M = Matcher.convertTo<Decl>();
+ if (QS.BindRoot)
+ M = decl(M).bind("root");
+ Finder.addMatcher(decl(forEachDescendant(M)), &Collect);
+ } else if (Matcher.canConvertTo<Stmt>()) {
+ StatementMatcher M = Matcher.convertTo<Stmt>();
+ if (QS.BindRoot)
+ M = stmt(M).bind("root");
+ Finder.addMatcher(decl(forEachDescendant(M)), &Collect);
+ }
+ Finder.match(*AST->getASTContext().getTranslationUnitDecl(),
----------------
Manuel Klimek wrote:
> Yea, we really need addDynamicMatcher ...
If I remember correctly, I added one, then we decide to remove it again.
This tool would be the first use case that would require it.
================
Comment at: clang-query/Query.cpp:58
@@ +57,3 @@
+ if (QS.BindRoot)
+ M = decl(M).bind("root");
+ Finder.addMatcher(decl(forEachDescendant(M)), &Collect);
----------------
You can bind at the DynTypedMatcher level using DynTypedMatcher::tryBind(). No need to do it for every type.
================
Comment at: clang-query/Query.cpp:59
@@ +58,3 @@
+ M = decl(M).bind("root");
+ Finder.addMatcher(decl(forEachDescendant(M)), &Collect);
+ } else if (Matcher.canConvertTo<Stmt>()) {
----------------
What is the purpose of forEachDescendant() here?
Finder will recursively try to match the provided matchers already.
Doing it this way will match the topmost node if something in it matches, instead of returning the actual node that matched.
http://llvm-reviews.chandlerc.com/D2098
BRANCH
clangquery
ARCANIST PROJECT
clang-tools-extra
More information about the cfe-commits
mailing list