diff options
author | Michael Davis | 2022-04-18 15:11:28 +0000 |
---|---|---|
committer | GitHub | 2022-04-18 15:11:28 +0000 |
commit | 449d1dfdfbf56ace564182dc85802e57b8494975 (patch) | |
tree | c63b0315c49384c44eb6fa63cab73db5ac6e9bb0 | |
parent | 4b1fe367faa4d64f3823d3fee1f70762a4334e29 (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.
-rw-r--r-- | helix-lsp/src/lib.rs | 8 |
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) |