summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/ClangdLSPServer.cpp
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2019-06-04 09:36:59 +0000
committerIlya Biryukov <ibiryukov@google.com>2019-06-04 09:36:59 +0000
commit4ef0f82b71dedeb11d2ff40c6a68ac2737f07f59 (patch)
tree7a46f384bd75b6a6be92f929a7429ae5f3fc2857 /clang-tools-extra/clangd/ClangdLSPServer.cpp
parent63846039f574a584714ef10777a6ea4c4e5706fd (diff)
downloadbcm5719-llvm-4ef0f82b71dedeb11d2ff40c6a68ac2737f07f59.tar.gz
bcm5719-llvm-4ef0f82b71dedeb11d2ff40c6a68ac2737f07f59.zip
[clangd] Support offsets for parameters in signatureHelp
Summary: Added to LSP in version 3.14 Reviewers: hokein Reviewed By: hokein Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D62476 llvm-svn: 362481
Diffstat (limited to 'clang-tools-extra/clangd/ClangdLSPServer.cpp')
-rw-r--r--clang-tools-extra/clangd/ClangdLSPServer.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index 53326296a68..6a4d2f3dbfc 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -360,6 +360,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
Params.capabilities.HierarchicalDocumentSymbol;
SupportFileStatus = Params.initializationOptions.FileStatus;
HoverContentFormat = Params.capabilities.HoverContentFormat;
+ SupportsOffsetsInSignatureHelp = Params.capabilities.OffsetsInSignatureHelp;
llvm::json::Object Result{
{{"capabilities",
llvm::json::Object{
@@ -761,7 +762,22 @@ void ClangdLSPServer::onCompletion(const CompletionParams &Params,
void ClangdLSPServer::onSignatureHelp(const TextDocumentPositionParams &Params,
Callback<SignatureHelp> Reply) {
Server->signatureHelp(Params.textDocument.uri.file(), Params.position,
- std::move(Reply));
+ Bind(
+ [this](decltype(Reply) Reply,
+ llvm::Expected<SignatureHelp> Signature) {
+ if (!Signature)
+ return Reply(Signature.takeError());
+ if (SupportsOffsetsInSignatureHelp)
+ return Reply(std::move(*Signature));
+ // Strip out the offsets from signature help for
+ // clients that only support string labels.
+ for (auto &Signature : Signature->signatures) {
+ for (auto &Param : Signature.parameters)
+ Param.labelOffsets.reset();
+ }
+ return Reply(std::move(*Signature));
+ },
+ std::move(Reply)));
}
// Go to definition has a toggle function: if def and decl are distinct, then
OpenPOWER on IntegriCloud