From 33cebe172459d1ae46556c7808411f1f539aa7cf Mon Sep 17 00:00:00 2001 From: Ville Penttinen Date: Wed, 27 Feb 2019 12:49:04 +0200 Subject: Work around for issue in vscode reporting a failure in request vscode would report "A request has failed" when it got "Content modified" message and this would cause a pop-up to appear. This works around the issue by returning an "empty" response that vscode can ignore. --- crates/gen_lsp_server/src/msg.rs | 5 +++++ crates/ra_lsp_server/src/main_loop.rs | 16 +++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'crates') diff --git a/crates/gen_lsp_server/src/msg.rs b/crates/gen_lsp_server/src/msg.rs index 02c7a1858..dfd9eeeb4 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 06443bb76..1baeff266 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, -- cgit v1.2.3