summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/index/Index.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/index/Index.cpp')
-rw-r--r--clang-tools-extra/clangd/index/Index.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/index/Index.cpp b/clang-tools-extra/clangd/index/Index.cpp
index a01c49f6573..013ba5cf9e7 100644
--- a/clang-tools-extra/clangd/index/Index.cpp
+++ b/clang-tools-extra/clangd/index/Index.cpp
@@ -175,6 +175,33 @@ std::shared_ptr<SymbolIndex> SwapIndex::snapshot() const {
return Index;
}
+bool fromJSON(const llvm::json::Value &Parameters, FuzzyFindRequest &Request) {
+ json::ObjectMapper O(Parameters);
+ llvm::Optional<int64_t> MaxCandidateCount;
+ bool OK =
+ O && O.map("Query", Request.Query) && O.map("Scopes", Request.Scopes) &&
+ O.map("RestrictForCodeCompletion", Request.RestrictForCodeCompletion) &&
+ O.map("ProximityPaths", Request.ProximityPaths) &&
+ O.map("MaxCandidateCount", MaxCandidateCount);
+ if (MaxCandidateCount)
+ Request.MaxCandidateCount = MaxCandidateCount.getValue();
+ return OK;
+}
+
+llvm::json::Value toJSON(const FuzzyFindRequest &Request) {
+ auto Result = json::Object{
+ {"Query", Request.Query},
+ {"Scopes", json::Array{Request.Scopes}},
+ {"RestrictForCodeCompletion", Request.RestrictForCodeCompletion},
+ {"ProximityPaths", json::Array{Request.ProximityPaths}},
+ };
+ // A huge limit means no limit, leave it out.
+ if (Request.MaxCandidateCount <= std::numeric_limits<int64_t>::max())
+ Result["MaxCandidateCount"] =
+ static_cast<int64_t>(Request.MaxCandidateCount);
+ return Result;
+}
+
bool SwapIndex::fuzzyFind(const FuzzyFindRequest &R,
llvm::function_ref<void(const Symbol &)> CB) const {
return snapshot()->fuzzyFind(R, CB);
OpenPOWER on IntegriCloud