diff options
| author | Ilya Biryukov <ibiryukov@google.com> | 2019-06-04 09:36:59 +0000 |
|---|---|---|
| committer | Ilya Biryukov <ibiryukov@google.com> | 2019-06-04 09:36:59 +0000 |
| commit | 4ef0f82b71dedeb11d2ff40c6a68ac2737f07f59 (patch) | |
| tree | 7a46f384bd75b6a6be92f929a7429ae5f3fc2857 /clang-tools-extra/clangd/ClangdLSPServer.cpp | |
| parent | 63846039f574a584714ef10777a6ea4c4e5706fd (diff) | |
| download | bcm5719-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.cpp | 18 |
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 |

