From 609f656767a965b8b6052a3f18b4caa0b48b1b57 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Mon, 16 Mar 2026 16:36:23 -0400 Subject: [PATCH 1/3] server: handle errors from handlers by converting to a lsp err response previously we'd bubble up the errors which would result in the server crashing and vscode restarting it. not ideal! --- crates/squawk_server/src/dispatch.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/crates/squawk_server/src/dispatch.rs b/crates/squawk_server/src/dispatch.rs index 76c926d6..0598f77f 100644 --- a/crates/squawk_server/src/dispatch.rs +++ b/crates/squawk_server/src/dispatch.rs @@ -57,12 +57,20 @@ impl<'a> RequestDispatcher<'a> { R: LspRequest, { if let Some((id, params)) = self.parse::() { - // TODO: we probably need to send an error here - let result = handler(self.system, params)?; - let resp = Response { - id, - result: Some(serde_json::to_value(result)?), - error: None, + let resp = match handler(self.system, params) { + Ok(result) => Response { + id, + result: Some(serde_json::to_value(result)?), + error: None, + }, + Err(err) => { + error!("Request handler failed: {err}"); + lsp_server::Response::new_err( + id, + lsp_server::ErrorCode::InternalError as i32, + err.to_string(), + ) + } }; self.connection.sender.send(Message::Response(resp))?; } From b3e62c78f6bb990355b0ce3bf243d4a64066df74 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Mon, 16 Mar 2026 16:42:24 -0400 Subject: [PATCH 2/3] more cleanup --- crates/squawk_server/src/dispatch.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/crates/squawk_server/src/dispatch.rs b/crates/squawk_server/src/dispatch.rs index 0598f77f..5686d127 100644 --- a/crates/squawk_server/src/dispatch.rs +++ b/crates/squawk_server/src/dispatch.rs @@ -36,7 +36,7 @@ impl<'a> RequestDispatcher<'a> { match req.extract(R::METHOD) { Ok((id, params)) => Some((id, params)), Err(err) => { - let response = lsp_server::Response::new_err( + let response = Response::new_err( id, lsp_server::ErrorCode::InvalidParams as i32, err.to_string(), @@ -58,14 +58,10 @@ impl<'a> RequestDispatcher<'a> { { if let Some((id, params)) = self.parse::() { let resp = match handler(self.system, params) { - Ok(result) => Response { - id, - result: Some(serde_json::to_value(result)?), - error: None, - }, + Ok(result) => Response::new_ok(id, result), Err(err) => { error!("Request handler failed: {err}"); - lsp_server::Response::new_err( + Response::new_err( id, lsp_server::ErrorCode::InternalError as i32, err.to_string(), From 27b3f0b065af75e12639a5107df4df9c26e9bb20 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Mon, 16 Mar 2026 16:43:19 -0400 Subject: [PATCH 3/3] change error --- crates/squawk_server/src/dispatch.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/squawk_server/src/dispatch.rs b/crates/squawk_server/src/dispatch.rs index 5686d127..44547602 100644 --- a/crates/squawk_server/src/dispatch.rs +++ b/crates/squawk_server/src/dispatch.rs @@ -38,7 +38,7 @@ impl<'a> RequestDispatcher<'a> { Err(err) => { let response = Response::new_err( id, - lsp_server::ErrorCode::InvalidParams as i32, + lsp_server::ErrorCode::ParseError as i32, err.to_string(), ); if let Err(err) = self.connection.sender.send(Message::Response(response)) {