aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp/src
diff options
context:
space:
mode:
authorBen Dennis2024-01-17 14:49:25 +0000
committerGitHub2024-01-17 14:49:25 +0000
commitdcdecaab22e87ae8046e15aa461dc2604b1c67ad (patch)
treec059c1edb32512b864ebd35f8f885baf057047e4 /helix-lsp/src
parentf41727cc9c3a71ccaec837f358cb3b2362c4c303 (diff)
Exit a language server if it sends a message with invalid json (#9332)
* Keep lsp event listener thread alive when malformed json is encountered from the lsp server * Update unexpected error flow in recv() to close outstanding requests and close the language server * Log malformed notifications as info instead of error * Make close_language_server a nested function inside recv, similar to what's done in send * Update malformed notification log text * Clean up new log text a bit * Initialize recv_buffer closer to where it's used * Use "exit" instead of "close" * Remove whitespace * Remove the need for a helper method to exit the language server * Match on Unhandled error explicitly and keep catch-all error case around
Diffstat (limited to 'helix-lsp/src')
-rw-r--r--helix-lsp/src/transport.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/helix-lsp/src/transport.rs b/helix-lsp/src/transport.rs
index 9fdd30aa..f2f35d6a 100644
--- a/helix-lsp/src/transport.rs
+++ b/helix-lsp/src/transport.rs
@@ -270,7 +270,14 @@ impl Transport {
}
};
}
- Err(Error::StreamClosed) => {
+ Err(err) => {
+ if !matches!(err, Error::StreamClosed) {
+ error!(
+ "Exiting {} after unexpected error: {err:?}",
+ &transport.name
+ );
+ }
+
// Close any outstanding requests.
for (id, tx) in transport.pending_requests.lock().await.drain() {
match tx.send(Err(Error::StreamClosed)).await {
@@ -300,10 +307,6 @@ impl Transport {
}
break;
}
- Err(err) => {
- error!("{} err: <- {err:?}", transport.name);
- break;
- }
}
}
}