summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-query/QueryParser.h
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2014-02-01 01:42:46 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2014-02-01 01:42:46 +0000
commitd9a0f254bcd7e550bd504358fcda7a8e5b9906b3 (patch)
treef5ade30942fa795900b328c42bcaa679530417fe /clang-tools-extra/clang-query/QueryParser.h
parentc31176da0265ee3b47c76e3a6af8273d5dd26561 (diff)
downloadbcm5719-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.h51
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
OpenPOWER on IntegriCloud