aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davis2023-06-28 20:59:13 +0000
committerGitHub2023-06-28 20:59:13 +0000
commitd3f8e0592bd577489369e5bd00cddf159f107a24 (patch)
treed7c2fbd901c7e53d3a4a80bcbf23fb1487a1a1a0
parent4a2337d828c6c2fa7c0e46052e4c8a62dbd4737d (diff)
LSP: Discard publishDiagnostic from uninitialized servers (#7467)
The spec explicitly disallows publishDiagnostic to be sent before the initialize response: > ... the server is not allowed to send any requests or notifications to > the client until it has responded with an InitializeResult ... (https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialize) But if a non-compliant server sends this we currently panic because we '.expect()' the server capabilities to be known to fetch the position encoding. Instead of panicking we can discard the notification and log the non-compliant behavior.
-rw-r--r--helix-term/src/application.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 7e968482..b0f9e3ac 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -746,7 +746,12 @@ impl Application {
return;
}
};
- let offset_encoding = language_server!().offset_encoding();
+ let language_server = language_server!();
+ if !language_server.is_initialized() {
+ log::error!("Discarding publishDiagnostic notification sent by an uninitialized server: {}", language_server.name());
+ return;
+ }
+ let offset_encoding = language_server.offset_encoding();
let doc = self.editor.document_by_path_mut(&path).filter(|doc| {
if let Some(version) = params.version {
if version != doc.version() {