diff --git a/crates/gen_lsp_server/src/msg.rs b/crates/gen_lsp_server/src/msg.rs index 02c7a18585..dfd9eeeb40 100644 --- a/crates/gen_lsp_server/src/msg.rs +++ b/crates/gen_lsp_server/src/msg.rs @@ -120,6 +120,11 @@ impl RawResponse { let error = RawResponseError { code, message, data: None }; RawResponse { id, result: None, error: Some(error) } } + /// Returns an "empty" RawResponse + /// Empty response still has a value `()` in its `result` field. + pub fn empty(id: u64) -> RawResponse { + RawResponse { id, result: Some(to_value(&()).unwrap()), error: None } + } } impl RawNotification { diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index 06443bb761..1baeff2665 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs @@ -416,11 +416,17 @@ impl<'a> PoolDispatcher<'a> { } Err(e) => { if is_canceled(&e) { - RawResponse::err( - id, - ErrorCode::ContentModified as i32, - "content modified".to_string(), - ) + // FIXME: When https://github.com/Microsoft/vscode-languageserver-node/issues/457 + // gets fixed, we can return the proper response. + // This works around the issue where "content modified" error would continuously + // show an message pop-up in VsCode + // RawResponse::err( + // id, + // ErrorCode::ContentModified as i32, + // "content modified".to_string(), + // ) + RawResponse::empty(id) + } else { RawResponse::err( id,