diff options
author | Stephen Kelly <steveire@gmail.com> | 2018-10-20 09:13:59 +0000 |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2018-10-20 09:13:59 +0000 |
commit | 4a5b01ddd7dd12f9a5826741e57104e8bf54748b (patch) | |
tree | 2f0ca8c7ec49a337b095c90827577c0ee9ec26d1 /clang-tools-extra/clang-query/QueryParser.cpp | |
parent | d0e5eca0fdd54ca9dc896843781abb46656c17be (diff) | |
download | bcm5719-llvm-4a5b01ddd7dd12f9a5826741e57104e8bf54748b.tar.gz bcm5719-llvm-4a5b01ddd7dd12f9a5826741e57104e8bf54748b.zip |
[clang-query] Add option to print matcher expression
Summary:
This is useful if using clang-query -f with a file containing multiple
matchers.
Reviewers: aaron.ballman
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D52859
llvm-svn: 344840
Diffstat (limited to 'clang-tools-extra/clang-query/QueryParser.cpp')
-rw-r--r-- | clang-tools-extra/clang-query/QueryParser.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/clang-tools-extra/clang-query/QueryParser.cpp b/clang-tools-extra/clang-query/QueryParser.cpp index 55504f70c2b..e7312d8d58d 100644 --- a/clang-tools-extra/clang-query/QueryParser.cpp +++ b/clang-tools-extra/clang-query/QueryParser.cpp @@ -142,7 +142,12 @@ enum ParsedQueryKind { PQK_Quit }; -enum ParsedQueryVariable { PQV_Invalid, PQV_Output, PQV_BindRoot }; +enum ParsedQueryVariable { + PQV_Invalid, + PQV_Output, + PQV_BindRoot, + PQV_PrintMatcher +}; QueryRef makeInvalidQueryFromDiagnostics(const Diagnostics &Diag) { std::string ErrStr; @@ -214,21 +219,23 @@ QueryRef QueryParser::doParse() { return completeMatcherExpression(); Diagnostics Diag; + auto MatcherSource = StringRef(Begin, End - Begin).trim(); Optional<DynTypedMatcher> Matcher = Parser::parseMatcherExpression( - StringRef(Begin, End - Begin), nullptr, &QS.NamedValues, &Diag); + MatcherSource, nullptr, &QS.NamedValues, &Diag); if (!Matcher) { return makeInvalidQueryFromDiagnostics(Diag); } - return new MatchQuery(*Matcher); + return new MatchQuery(MatcherSource, *Matcher); } case PQK_Set: { StringRef VarStr; - ParsedQueryVariable Var = LexOrCompleteWord<ParsedQueryVariable>(this, - VarStr) - .Case("output", PQV_Output) - .Case("bind-root", PQV_BindRoot) - .Default(PQV_Invalid); + ParsedQueryVariable Var = + LexOrCompleteWord<ParsedQueryVariable>(this, VarStr) + .Case("output", PQV_Output) + .Case("bind-root", PQV_BindRoot) + .Case("print-matcher", PQV_PrintMatcher) + .Default(PQV_Invalid); if (VarStr.empty()) return new InvalidQuery("expected variable name"); if (Var == PQV_Invalid) @@ -242,6 +249,9 @@ QueryRef QueryParser::doParse() { case PQV_BindRoot: Q = parseSetBool(&QuerySession::BindRoot); break; + case PQV_PrintMatcher: + Q = parseSetBool(&QuerySession::PrintMatcher); + break; case PQV_Invalid: llvm_unreachable("Invalid query kind"); } |