aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaojian Wu <hokein@google.com>2019-08-22 14:53:45 +0000
committerHaojian Wu <hokein@google.com>2019-08-22 14:53:45 +0000
commit08d93f1ed3b65d962552e5b3b9a288078a0b740e (patch)
tree8534d5e7c374bbe2ae4efd656e0013662c3879b4
parentb17d6c52fd4eaa5ae26b1ec5eea642d6d933ee37 (diff)
downloadllvm-08d93f1ed3b65d962552e5b3b9a288078a0b740e.zip
llvm-08d93f1ed3b65d962552e5b3b9a288078a0b740e.tar.gz
llvm-08d93f1ed3b65d962552e5b3b9a288078a0b740e.tar.bz2
[clangd] Send suppported codeActionKinds to the client.
Summary: This would make client know which codeActionKinds that clangd may return. VSCode will add a new entry "Refactor..." (which shows all refactoring-kind code actions) in the right-click menu. Reviewers: ilya-biryukov Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D66592 llvm-svn: 369656
-rw-r--r--clang-tools-extra/clangd/ClangdLSPServer.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index a838a90..928bd25 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -464,6 +464,16 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
if (!Params.capabilities.RenamePrepareSupport) // Only boolean allowed per LSP
RenameProvider = true;
+ // Per LSP, codeActionProvide can be either boolean or CodeActionOptions.
+ // CodeActionOptions is only valid if the client supports action literal
+ // via textDocument.codeAction.codeActionLiteralSupport.
+ llvm::json::Value CodeActionProvider = true;
+ if (Params.capabilities.CodeActionStructure)
+ CodeActionProvider = llvm::json::Object{
+ {"codeActionKinds",
+ {CodeAction::QUICKFIX_KIND, CodeAction::REFACTOR_KIND,
+ CodeAction::INFO_KIND}}};
+
llvm::json::Object Result{
{{"capabilities",
llvm::json::Object{
@@ -475,7 +485,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
{"firstTriggerCharacter", "\n"},
{"moreTriggerCharacter", {}},
}},
- {"codeActionProvider", true},
+ {"codeActionProvider", std::move(CodeActionProvider)},
{"completionProvider",
llvm::json::Object{
{"resolveProvider", false},