From 6a02475b4064c39458deea11947a85e6823ccd58 Mon Sep 17 00:00:00 2001 From: misiasty3 <85675213+misiasty3@users.noreply.github.com> Date: Mon, 13 Mar 2023 16:29:23 +0100 Subject: [PATCH] Check language server symbol renaming support before prompting (#6257) Co-authored-by: Poliorcetics --- helix-lsp/src/client.rs | 19 +++++++++++-------- helix-term/src/commands/lsp.rs | 6 ++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index 9cb7c14700498..c46bdd8cb5f8d 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -1136,20 +1136,23 @@ impl Client { Some(self.call::(params)) } + pub fn supports_rename(&self) -> bool { + let capabilities = self.capabilities.get().unwrap(); + matches!( + capabilities.rename_provider, + Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_)) + ) + } + pub fn rename_symbol( &self, text_document: lsp::TextDocumentIdentifier, position: lsp::Position, new_name: String, ) -> Option>> { - let capabilities = self.capabilities.get().unwrap(); - - // Return early if the language server does not support renaming. - match capabilities.rename_provider { - Some(lsp::OneOf::Left(true)) | Some(lsp::OneOf::Right(_)) => (), - // None | Some(false) - _ => return None, - }; + if !self.supports_rename() { + return None; + } let params = lsp::RenameParams { text_document_position: lsp::TextDocumentPositionParams { diff --git a/helix-term/src/commands/lsp.rs b/helix-term/src/commands/lsp.rs index f9d9856f58c75..f71aacf0de55b 100644 --- a/helix-term/src/commands/lsp.rs +++ b/helix-term/src/commands/lsp.rs @@ -1316,6 +1316,12 @@ pub fn rename_symbol(cx: &mut Context) { let language_server = language_server!(cx.editor, doc); let offset_encoding = language_server.offset_encoding(); + if !language_server.supports_rename() { + cx.editor + .set_error("Language server does not support symbol renaming"); + return; + } + let pos = doc.position(view.id, offset_encoding); match language_server.prepare_rename(doc.identifier(), pos) {