]> git.lizzy.rs Git - rust.git/commitdiff
Don't show internal server error on rename
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 13 Jan 2021 11:09:51 +0000 (14:09 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 13 Jan 2021 12:07:30 +0000 (15:07 +0300)
Doesn't quite work due to https://github.com/microsoft/vscode-languageserver-node/issues/730

Note that this intentionally removes `impl std::Error for RenameError`
-- we nether want to blindly bubble the rename error.

crates/ide/src/references/rename.rs
crates/rust-analyzer/src/handlers.rs
crates/rust-analyzer/src/to_proto.rs

index 3edc43e0828c667793b92d8f32371700128765fb..3db08e84cfc46c0aeb79b648dd73d017b3faa36c 100644 (file)
@@ -1,7 +1,6 @@
 //! FIXME: write short doc here
 use std::{
     convert::TryInto,
-    error::Error,
     fmt::{self, Display},
 };
 
@@ -34,8 +33,6 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
     }
 }
 
-impl Error for RenameError {}
-
 macro_rules! format_err {
     ($fmt:expr) => {RenameError(format!($fmt))};
     ($fmt:expr, $($arg:tt)+) => {RenameError(format!($fmt, $($arg)+))}
index 29cc9051ee7c5f1fe427f25ce46c84cf677bdae9..a21571eea023b6dcad42e5701a2e722a9533cd40 100644 (file)
@@ -773,7 +773,8 @@ pub(crate) fn handle_prepare_rename(
     let _p = profile::span("handle_prepare_rename");
     let position = from_proto::file_position(&snap, params)?;
 
-    let change = snap.analysis.prepare_rename(position)??;
+    let change = snap.analysis.prepare_rename(position)?.map_err(to_proto::rename_error)?;
+
     let line_index = snap.analysis.file_line_index(position.file_id)?;
     let range = to_proto::range(&line_index, change.range);
     Ok(Some(PrepareRenameResponse::Range(range)))
@@ -786,15 +787,8 @@ pub(crate) fn handle_rename(
     let _p = profile::span("handle_rename");
     let position = from_proto::file_position(&snap, params.text_document_position)?;
 
-    if params.new_name.is_empty() {
-        return Err(LspError::new(
-            ErrorCode::InvalidParams as i32,
-            "New Name cannot be empty".into(),
-        )
-        .into());
-    }
-
-    let change = snap.analysis.rename(position, &*params.new_name)??;
+    let change =
+        snap.analysis.rename(position, &*params.new_name)?.map_err(to_proto::rename_error)?;
     let workspace_edit = to_proto::workspace_edit(&snap, change.info)?;
     Ok(Some(workspace_edit))
 }
index bdddca9daa2b41880d79a5bf429947f7b672ff2a..a7ff8975adfe17e900ba56bd9f65fa446fe20e92 100644 (file)
@@ -8,7 +8,8 @@
     Assist, AssistKind, CallInfo, CompletionItem, CompletionItemKind, Documentation, FileId,
     FileRange, FileSystemEdit, Fold, FoldKind, Highlight, HlMod, HlPunct, HlRange, HlTag, Indel,
     InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup, NavigationTarget, ReferenceAccess,
-    Runnable, Severity, SourceChange, SourceFileEdit, SymbolKind, TextEdit, TextRange, TextSize,
+    RenameError, Runnable, Severity, SourceChange, SourceFileEdit, SymbolKind, TextEdit, TextRange,
+    TextSize,
 };
 use itertools::Itertools;
 
@@ -855,6 +856,10 @@ pub(crate) fn markup_content(markup: Markup) -> lsp_types::MarkupContent {
     lsp_types::MarkupContent { kind: lsp_types::MarkupKind::Markdown, value }
 }
 
+pub(crate) fn rename_error(err: RenameError) -> crate::LspError {
+    crate::LspError { code: lsp_server::ErrorCode::InvalidParams as i32, message: err.to_string() }
+}
+
 #[cfg(test)]
 mod tests {
     use ide::Analysis;