on master help sign in
Check language server symbol renaming support before prompting (#6257)

Co-authored-by: Poliorcetics <poliorcetics@users.noreply.github.com>

commitdb8e9f5bb2e2b9412cb1cc4688ad2febb726e48c authormisiasty3 <85675213+misiasty3@users.noreply.github.com> dateMon 13 Mar 2023, 16:29 (4 years ago) parentdc418bb
2 files changed+17−8
helix-lsp/src/client.rs+11−8 helix-term/src/commands/lsp.rs+6
helix-lsp/src/client.rs+11−8
@@ -1136,20 +1136,23 @@ impl Client {
11361136 Some(self.call::<lsp::request::CodeActionRequest>(params))
11371137 }
11381138
1139+ pub fn supports_rename(&self) -> bool {
1140+ let capabilities = self.capabilities.get().unwrap();
1141+ matches!(
1142+ capabilities.rename_provider,
1143+ Some(lsp::OneOf::Left(true) | lsp::OneOf::Right(_))
1144+ )
1145+ }
1146+
11391147 pub fn rename_symbol(
11401148 &self,
11411149 text_document: lsp::TextDocumentIdentifier,
11421150 position: lsp::Position,
11431151 new_name: String,
11441152 ) -> Option<impl Future<Output = Result<lsp::WorkspaceEdit>>> {
1145− let capabilities = self.capabilities.get().unwrap();
1146−
1147− // Return early if the language server does not support renaming.
1148− match capabilities.rename_provider {
1149− Some(lsp::OneOf::Left(true)) | Some(lsp::OneOf::Right(_)) => (),
1150− // None | Some(false)
1151− _ => return None,
1152− };
1153+ if !self.supports_rename() {
1154+ return None;
1155+ }
11531156
11541157 let params = lsp::RenameParams {
11551158 text_document_position: lsp::TextDocumentPositionParams {
helix-term/src/commands/lsp.rs+6
@@ -1316,6 +1316,12 @@ pub fn rename_symbol(cx: &mut Context) {
13161316 let language_server = language_server!(cx.editor, doc);
13171317 let offset_encoding = language_server.offset_encoding();
13181318
1319+ if !language_server.supports_rename() {
1320+ cx.editor
1321+ .set_error("Language server does not support symbol renaming");
1322+ return;
1323+ }
1324+
13191325 let pos = doc.position(view.id, offset_encoding);
13201326
13211327 match language_server.prepare_rename(doc.identifier(), pos) {