From 8977123f25baba838d2d16f8a40e78563c4ebf4a Mon Sep 17 00:00:00 2001 From: sigmaSd Date: Fri, 21 Jul 2023 20:50:08 +0100 Subject: feat: resolve code action (#7677) --- helix-lsp/src/client.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'helix-lsp') 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::(completion_item)) } + pub fn resolve_code_action( + &self, + code_action: lsp::CodeAction, + ) -> Option>> { + 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::(code_action)) + } + pub fn text_document_signature_help( &self, text_document: lsp::TextDocumentIdentifier, -- cgit v1.2.3-70-g09d2