Check language server symbol renaming support before prompting (#6257)

Co-authored-by: Poliorcetics <poliorcetics@users.noreply.github.com>
pull/6295/head
misiasty3 2 years ago committed by GitHub
parent dc418bb507
commit db8e9f5bb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1136,20 +1136,23 @@ impl Client {
Some(self.call::<lsp::request::CodeActionRequest>(params)) Some(self.call::<lsp::request::CodeActionRequest>(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( pub fn rename_symbol(
&self, &self,
text_document: lsp::TextDocumentIdentifier, text_document: lsp::TextDocumentIdentifier,
position: lsp::Position, position: lsp::Position,
new_name: String, new_name: String,
) -> Option<impl Future<Output = Result<lsp::WorkspaceEdit>>> { ) -> Option<impl Future<Output = Result<lsp::WorkspaceEdit>>> {
let capabilities = self.capabilities.get().unwrap(); if !self.supports_rename() {
return None;
// 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,
};
let params = lsp::RenameParams { let params = lsp::RenameParams {
text_document_position: lsp::TextDocumentPositionParams { text_document_position: lsp::TextDocumentPositionParams {

@ -1316,6 +1316,12 @@ pub fn rename_symbol(cx: &mut Context) {
let language_server = language_server!(cx.editor, doc); let language_server = language_server!(cx.editor, doc);
let offset_encoding = language_server.offset_encoding(); 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); let pos = doc.position(view.id, offset_encoding);
match language_server.prepare_rename(doc.identifier(), pos) { match language_server.prepare_rename(doc.identifier(), pos) {

Loading…
Cancel
Save