diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2014-02-01 01:42:46 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2014-02-01 01:42:46 +0000 |
commit | d9a0f254bcd7e550bd504358fcda7a8e5b9906b3 (patch) | |
tree | f5ade30942fa795900b328c42bcaa679530417fe /clang-tools-extra/clang-query/QueryParser.h | |
parent | c31176da0265ee3b47c76e3a6af8273d5dd26561 (diff) | |
download | bcm5719-llvm-d9a0f254bcd7e550bd504358fcda7a8e5b9906b3.tar.gz bcm5719-llvm-d9a0f254bcd7e550bd504358fcda7a8e5b9906b3.zip |
Add completion to the query parser, and hook it up to clang-query.
Differential Revision: http://llvm-reviews.chandlerc.com/D2263
llvm-svn: 200604
Diffstat (limited to 'clang-tools-extra/clang-query/QueryParser.h')
-rw-r--r-- | clang-tools-extra/clang-query/QueryParser.h | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/clang-tools-extra/clang-query/QueryParser.h b/clang-tools-extra/clang-query/QueryParser.h index 00c95fcf2c8..cfba0266c37 100644 --- a/clang-tools-extra/clang-query/QueryParser.h +++ b/clang-tools-extra/clang-query/QueryParser.h @@ -12,14 +12,55 @@ #include "Query.h" +#include <stddef.h> +#include "llvm/LineEditor/LineEditor.h" + namespace clang { namespace query { -/// \brief Parse \p Line. -/// -/// \return A reference to the parsed query object, which may be an -/// \c InvalidQuery if a parse error occurs. -QueryRef ParseQuery(StringRef Line); +class QuerySession; + +class QueryParser { +public: + /// Parse \param Line as a query. + /// + /// \return A QueryRef representing the query, which may be an InvalidQuery. + static QueryRef parse(StringRef Line); + + /// Compute a list of completions for \param Line assuming a cursor at + /// \param Pos characters past the start of \param Line, ordered from most + /// likely to least likely. + /// + /// \return A vector of completions for \param Line. + static std::vector<llvm::LineEditor::Completion> complete(StringRef Line, + size_t Pos); + +private: + QueryParser(StringRef Line) + : Begin(Line.data()), End(Line.data() + Line.size()), CompletionPos(0) {} + + StringRef lexWord(); + + template <typename T> struct LexOrCompleteWord; + template <typename T> LexOrCompleteWord<T> lexOrCompleteWord(StringRef &Str); + + QueryRef parseSetBool(bool QuerySession::*Var); + QueryRef parseSetOutputKind(); + + QueryRef endQuery(QueryRef Q); + + /// \brief Parse [\p Begin,\p End). + /// + /// \return A reference to the parsed query object, which may be an + /// \c InvalidQuery if a parse error occurs. + QueryRef doParse(); + + const char *Begin; + const char *End; + + const char *CompletionPos; + std::vector<llvm::LineEditor::Completion> Completions; +}; } // namespace query } // namespace clang |