on master help sign in
chore(lsp): check rename capabilities before send rename action (#2203)
19d042dttys3
helix-lsp/src/client.rs+14
@@ -3,6 +3,7 @@ use crate::{
3 Call, Error, OffsetEncoding, Result,
3 Call, Error, OffsetEncoding, Result,
4};
4};
5
5
6+use anyhow::anyhow;
6use helix_core::{find_root, ChangeSet, Rope};
7use helix_core::{find_root, ChangeSet, Rope};
7use jsonrpc_core as jsonrpc;
8use jsonrpc_core as jsonrpc;
8use lsp_types as lsp;
9use lsp_types as lsp;
@@ -861,6 +862,19 @@ impl Client {
861 position: lsp::Position,
862 position: lsp::Position,
862 new_name: String,
863 new_name: String,
863 ) -> anyhow::Result<lsp::WorkspaceEdit> {
864 ) -> anyhow::Result<lsp::WorkspaceEdit> {
865+ let capabilities = self.capabilities.get().unwrap();
866+
867+ // check if we're able to rename
868+ match capabilities.rename_provider {
869+ Some(lsp::OneOf::Left(true)) | Some(lsp::OneOf::Right(_)) => (),
870+ // None | Some(false)
871+ _ => {
872+ let err = "The server does not support rename";
873+ log::warn!("rename_symbol failed: {}", err);
874+ return Err(anyhow!(err));
875+ }
876+ };
877+
864 let params = lsp::RenameParams {
878 let params = lsp::RenameParams {
865 text_document_position: lsp::TextDocumentPositionParams {
879 text_document_position: lsp::TextDocumentPositionParams {
866 text_document,
880 text_document,
helix-term/src/commands/lsp.rs+4−2
@@ -674,8 +674,10 @@ pub fn rename_symbol(cx: &mut Context) {
674 let pos = doc.position(view.id, offset_encoding);
674 let pos = doc.position(view.id, offset_encoding);
675
675
676 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
676 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
677− let edits = block_on(task).unwrap_or_default();
677+ match block_on(task) {
678− apply_workspace_edit(cx.editor, offset_encoding, &edits);
678+ Ok(edits) => apply_workspace_edit(cx.editor, offset_encoding, &edits),
679+ Err(err) => cx.editor.set_error(err.to_string()),
680+ }
679 },
681 },
680 );
682 );
681}
683}