summaryrefslogtreecommitdiffstats
path: root/clang-query/QueryParser.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang-query/QueryParser.h')
-rw-r--r--clang-query/QueryParser.h51
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