1 //===--- QueryParser.h - clang-query ----------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_PARSER_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_PARSER_H 11 12 #include "Query.h" 13 #include "QuerySession.h" 14 #include "llvm/LineEditor/LineEditor.h" 15 #include <cstddef> 16 17 namespace clang { 18 namespace query { 19 20 class QuerySession; 21 22 class QueryParser { 23 public: 24 /// Parse \a Line as a query. 25 /// 26 /// \return A QueryRef representing the query, which may be an InvalidQuery. 27 static QueryRef parse(StringRef Line, const QuerySession &QS); 28 29 /// Compute a list of completions for \a Line assuming a cursor at 30 /// \param Pos characters past the start of \a Line, ordered from most 31 /// likely to least likely. 32 /// 33 /// \return A vector of completions for \a Line. 34 static std::vector<llvm::LineEditor::Completion> 35 complete(StringRef Line, size_t Pos, const QuerySession &QS); 36 37 private: QueryParser(StringRef Line,const QuerySession & QS)38 QueryParser(StringRef Line, const QuerySession &QS) 39 : Line(Line), CompletionPos(nullptr), QS(QS) {} 40 41 StringRef lexWord(); 42 43 template <typename T> struct LexOrCompleteWord; 44 45 QueryRef parseSetBool(bool QuerySession::*Var); 46 QueryRef 47 parseSetTraversalKind(ast_type_traits::TraversalKind QuerySession::*Var); 48 template <typename QueryType> QueryRef parseSetOutputKind(); 49 QueryRef completeMatcherExpression(); 50 51 QueryRef endQuery(QueryRef Q); 52 53 /// Parse [\p Begin,\p End). 54 /// 55 /// \return A reference to the parsed query object, which may be an 56 /// \c InvalidQuery if a parse error occurs. 57 QueryRef doParse(); 58 59 StringRef Line; 60 61 const char *CompletionPos; 62 std::vector<llvm::LineEditor::Completion> Completions; 63 64 const QuerySession &QS; 65 }; 66 67 } // namespace query 68 } // namespace clang 69 70 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_PARSER_H 71