diff options
Diffstat (limited to 'clang-query/QueryParser.h')
-rw-r--r-- | clang-query/QueryParser.h | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/clang-query/QueryParser.h b/clang-query/QueryParser.h index 00c95fcf..cfba0266 100644 --- a/clang-query/QueryParser.h +++ b/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 |