on master help sign in
chore(lsp): check rename capabilities before send rename action (#2203)
commit19d042dde6ac7aad5b597c791c1f142f5c7f7198 authorttys3 <41882455+ttys3@users.noreply.github.com> dateSat 23 Apr 2022, 16:09 (5 years ago) parentc1d3d49
2 files changed+18−2
helix-lsp/src/client.rs+14 helix-term/src/commands/lsp.rs+4−2
helix-lsp/src/client.rs+14
@@ -3,6 +3,7 @@ use crate::{
33 Call, Error, OffsetEncoding, Result,
44};
55
6+use anyhow::anyhow;
67use helix_core::{find_root, ChangeSet, Rope};
78use jsonrpc_core as jsonrpc;
89use lsp_types as lsp;
@@ -861,6 +862,19 @@ impl Client {
861862 position: lsp::Position,
862863 new_name: String,
863864 ) -> 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+
864878 let params = lsp::RenameParams {
865879 text_document_position: lsp::TextDocumentPositionParams {
866880 text_document,
helix-term/src/commands/lsp.rs+4−2
@@ -674,8 +674,10 @@ pub fn rename_symbol(cx: &mut Context) {
674674 let pos = doc.position(view.id, offset_encoding);
675675
676676 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
677− let edits = block_on(task).unwrap_or_default();
678− apply_workspace_edit(cx.editor, offset_encoding, &edits);
677+ match block_on(task) {
678+ Ok(edits) => apply_workspace_edit(cx.editor, offset_encoding, &edits),
679+ Err(err) => cx.editor.set_error(err.to_string()),
680+ }
679681 },
680682 );
681683}