Unnamed repository; edit this file 'description' to name the repository.
prevent panic when receiving malformed LSP PublishDiagnostic (#2160)
Instead of panicing we can discard the malformed diagnostic. This `.parse()` fails commonly when a non-conformant language server gives a diagnostic with a location that breaks the spec: { "character": 0, "line": -1 } can currently be returned by ElixirLS and the python LS. Other messages in this block are discarded but this one feels special enough to log.
Michael Davis 2022-04-18
parent 4b1fe36 · commit 449d1df
-rw-r--r--helix-lsp/src/lib.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index 13ac32ff..47a376bb 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -276,7 +276,13 @@ impl Notification {
lsp::notification::PublishDiagnostics::METHOD => {
let params: lsp::PublishDiagnosticsParams = params
.parse()
- .expect("Failed to parse PublishDiagnostics params");
+ .map_err(|err| {
+ log::error!(
+ "received malformed PublishDiagnostic from Language Server: {}",
+ err
+ )
+ })
+ .ok()?;
// TODO: need to loop over diagnostics and distinguish them by URI
Self::PublishDiagnostics(params)