aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp/src
diff options
context:
space:
mode:
authorMichael Davis2022-04-18 15:11:28 +0000
committerGitHub2022-04-18 15:11:28 +0000
commit449d1dfdfbf56ace564182dc85802e57b8494975 (patch)
treec63b0315c49384c44eb6fa63cab73db5ac6e9bb0 /helix-lsp/src
parent4b1fe367faa4d64f3823d3fee1f70762a4334e29 (diff)
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.
Diffstat (limited to 'helix-lsp/src')
-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)