diff --git a/crates/rust-analyzer/src/from_proto.rs b/crates/rust-analyzer/src/from_proto.rs index 712d5a9c277..28f3fa2786c 100644 --- a/crates/rust-analyzer/src/from_proto.rs +++ b/crates/rust-analyzer/src/from_proto.rs @@ -10,7 +10,7 @@ use crate::{ from_json, global_state::GlobalStateSnapshot, line_index::{LineIndex, OffsetEncoding}, - lsp_ext, Result, + lsp_ext, LspError, Result, }; pub(crate) fn abs_path(url: &lsp_types::Url) -> Result<AbsPathBuf> { @@ -85,7 +85,10 @@ pub(crate) fn annotation( snap: &GlobalStateSnapshot, code_lens: lsp_types::CodeLens, ) -> Result<Annotation> { - let data = code_lens.data.unwrap(); + let data = code_lens.data.ok_or_else(|| LspError { + code: lsp_server::ErrorCode::InvalidParams as i32, + message: "code lens without data".to_string(), + }); let resolve = from_json::<lsp_ext::CodeLensResolveData>("CodeLensResolveData", data)?; match resolve { diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index de96816f44b..ed912cb1602 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -1038,7 +1038,10 @@ pub(crate) fn handle_code_action_resolve( let _p = profile::span("handle_code_action_resolve"); let params = match code_action.data.take() { Some(it) => it, - None => Err("can't resolve code action without data")?, + None => Err(LspError { + code: lsp_server::ErrorCode::InvalidParams as i32, + message: format!("code action without data"), + })?, }; let file_id = from_proto::file_id(&snap, ¶ms.code_action_params.text_document.uri)?;