aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp/src
diff options
context:
space:
mode:
authorsigmaSd2023-07-21 19:50:08 +0000
committerGitHub2023-07-21 19:50:08 +0000
commit8977123f25baba838d2d16f8a40e78563c4ebf4a (patch)
tree8f8b7187e817ca7175d194249cd77dd88ec7684e /helix-lsp/src
parentd52b790379ffc5646409a9972e0a4e70bcc8a981 (diff)
feat: resolve code action (#7677)
Diffstat (limited to 'helix-lsp/src')
-rw-r--r--helix-lsp/src/client.rs29
1 files changed, 27 insertions, 2 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index a3711317..92ab03db 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -7,8 +7,9 @@ use crate::{
use helix_core::{find_workspace, path, syntax::LanguageServerFeature, ChangeSet, Rope};
use helix_loader::{self, VERSION_AND_GIT_HASH};
use lsp::{
- notification::DidChangeWorkspaceFolders, DidChangeWorkspaceFoldersParams, OneOf,
- PositionEncodingKind, WorkspaceFolder, WorkspaceFoldersChangeEvent,
+ notification::DidChangeWorkspaceFolders, CodeActionCapabilityResolveSupport,
+ DidChangeWorkspaceFoldersParams, OneOf, PositionEncodingKind, WorkspaceFolder,
+ WorkspaceFoldersChangeEvent,
};
use lsp_types as lsp;
use parking_lot::Mutex;
@@ -609,6 +610,12 @@ impl Client {
.collect(),
},
}),
+ is_preferred_support: Some(true),
+ disabled_support: Some(true),
+ data_support: Some(true),
+ resolve_support: Some(CodeActionCapabilityResolveSupport {
+ properties: vec!["edit".to_owned(), "command".to_owned()],
+ }),
..Default::default()
}),
publish_diagnostics: Some(lsp::PublishDiagnosticsClientCapabilities {
@@ -954,6 +961,24 @@ impl Client {
Some(self.call::<lsp::request::ResolveCompletionItem>(completion_item))
}
+ pub fn resolve_code_action(
+ &self,
+ code_action: lsp::CodeAction,
+ ) -> Option<impl Future<Output = Result<Value>>> {
+ let capabilities = self.capabilities.get().unwrap();
+
+ // Return early if the server does not support resolving code action.
+ match capabilities.completion_provider {
+ Some(lsp::CompletionOptions {
+ resolve_provider: Some(true),
+ ..
+ }) => (),
+ _ => return None,
+ }
+
+ Some(self.call::<lsp::request::CodeActionResolveRequest>(code_action))
+ }
+
pub fn text_document_signature_help(
&self,
text_document: lsp::TextDocumentIdentifier,