//===--- QueryParser.h - clang-query ----------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_PARSER_H #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_PARSER_H #include "Query.h" #include "QuerySession.h" #include "llvm/LineEditor/LineEditor.h" #include namespace clang { namespace query { class QuerySession; class QueryParser { public: /// Parse \a Line as a query. /// /// \return A QueryRef representing the query, which may be an InvalidQuery. static QueryRef parse(StringRef Line, const QuerySession &QS); /// Compute a list of completions for \a Line assuming a cursor at /// \param Pos characters past the start of \a Line, ordered from most /// likely to least likely. /// /// \return A vector of completions for \a Line. static std::vector complete(StringRef Line, size_t Pos, const QuerySession &QS); private: QueryParser(StringRef Line, const QuerySession &QS) : Begin(Line.begin()), End(Line.end()), CompletionPos(nullptr), QS(QS) {} StringRef lexWord(); template struct LexOrCompleteWord; template LexOrCompleteWord lexOrCompleteWord(StringRef &Str); QueryRef parseSetBool(bool QuerySession::*Var); QueryRef parseSetOutputKind(); QueryRef completeMatcherExpression(); 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 Completions; const QuerySession &QS; }; } // namespace query } // namespace clang #endif