sammccall created this revision. sammccall added a reviewer: kadircet. Herald added subscribers: usaxena95, arphaman. sammccall requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang.
This overrides the --limit-results command-line flag, and is not constrained by it. See https://github.com/clangd/clangd/issues/707 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D97801 Files: clang-tools-extra/clangd/ClangdLSPServer.cpp clang-tools-extra/clangd/Protocol.cpp clang-tools-extra/clangd/Protocol.h
Index: clang-tools-extra/clangd/Protocol.h =================================================================== --- clang-tools-extra/clangd/Protocol.h +++ clang-tools-extra/clangd/Protocol.h @@ -1047,8 +1047,13 @@ /// The parameters of a Workspace Symbol Request. struct WorkspaceSymbolParams { - /// A non-empty query string + /// A query string to filter symbols by. + /// Clients may send an empty string here to request all the symbols. std::string query; + + /// Max results to return, overriding global default. 0 means no limit. + /// Clangd extension. + llvm::Optional<int> limit; }; bool fromJSON(const llvm::json::Value &, WorkspaceSymbolParams &, llvm::json::Path); @@ -1097,6 +1102,10 @@ struct CompletionParams : TextDocumentPositionParams { CompletionContext context; + + /// Max results to return, overriding global default. 0 means no limit. + /// Clangd extension. + llvm::Optional<int> limit; }; bool fromJSON(const llvm::json::Value &, CompletionParams &, llvm::json::Path); Index: clang-tools-extra/clangd/Protocol.cpp =================================================================== --- clang-tools-extra/clangd/Protocol.cpp +++ clang-tools-extra/clangd/Protocol.cpp @@ -740,7 +740,8 @@ bool fromJSON(const llvm::json::Value &Params, WorkspaceSymbolParams &R, llvm::json::Path P) { llvm::json::ObjectMapper O(Params, P); - return O && O.map("query", R.query); + return O && O.map("query", R.query) && + mapOptOrNull(Params, "limit", R.limit, P); } llvm::json::Value toJSON(const Command &C) { @@ -841,7 +842,8 @@ bool fromJSON(const llvm::json::Value &Params, CompletionParams &R, llvm::json::Path P) { - if (!fromJSON(Params, static_cast<TextDocumentPositionParams &>(R), P)) + if (!fromJSON(Params, static_cast<TextDocumentPositionParams &>(R), P) || + !mapOptOrNull(Params, "limit", R.limit, P)) return false; if (auto *Context = Params.getAsObject()->get("context")) return fromJSON(*Context, R.context, P.field("context")); Index: clang-tools-extra/clangd/ClangdLSPServer.cpp =================================================================== --- clang-tools-extra/clangd/ClangdLSPServer.cpp +++ clang-tools-extra/clangd/ClangdLSPServer.cpp @@ -781,7 +781,7 @@ const WorkspaceSymbolParams &Params, Callback<std::vector<SymbolInformation>> Reply) { Server->workspaceSymbols( - Params.query, Opts.CodeComplete.Limit, + Params.query, Params.limit.getValueOr(Opts.CodeComplete.Limit), [Reply = std::move(Reply), this](llvm::Expected<std::vector<SymbolInformation>> Items) mutable { if (!Items) @@ -1055,21 +1055,24 @@ vlog("ignored auto-triggered completion, preceding char did not match"); return Reply(CompletionList()); } - Server->codeComplete( - Params.textDocument.uri.file(), Params.position, Opts.CodeComplete, - [Reply = std::move(Reply), - this](llvm::Expected<CodeCompleteResult> List) mutable { - if (!List) - return Reply(List.takeError()); - CompletionList LSPList; - LSPList.isIncomplete = List->HasMore; - for (const auto &R : List->Completions) { - CompletionItem C = R.render(Opts.CodeComplete); - C.kind = adjustKindToCapability(C.kind, SupportedCompletionItemKinds); - LSPList.items.push_back(std::move(C)); - } - return Reply(std::move(LSPList)); - }); + auto Opts = this->Opts.CodeComplete; + if (Params.limit && *Params.limit >= 0) + Opts.Limit = *Params.limit; + Server->codeComplete(Params.textDocument.uri.file(), Params.position, Opts, + [Reply = std::move(Reply), Opts, + this](llvm::Expected<CodeCompleteResult> List) mutable { + if (!List) + return Reply(List.takeError()); + CompletionList LSPList; + LSPList.isIncomplete = List->HasMore; + for (const auto &R : List->Completions) { + CompletionItem C = R.render(Opts); + C.kind = adjustKindToCapability( + C.kind, SupportedCompletionItemKinds); + LSPList.items.push_back(std::move(C)); + } + return Reply(std::move(LSPList)); + }); } void ClangdLSPServer::onSignatureHelp(const TextDocumentPositionParams &Params,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits