aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorMichael Davis2022-08-31 08:47:18 +0000
committerGitHub2022-08-31 08:47:18 +0000
commit7547a961bb29b7619cf683a241781041aa208c37 (patch)
treec871cbdce06e4f51f3567fb96ee04530e1fdf11f /helix-term
parent03f0ef93ac6da58963b32034fd4681e428867d2a (diff)
Discard LSP publishDiagnostic when LS is not initialized (#3403)
This is invalid according to the [LSP spec]: > In addition the server is not allowed to send any requests > or notifications to the client until it has responded with an > InitializeResult, with the exception that during the initialize > request the server is allowed to send the notifications > window/showMessage, window/logMessage and telemetry/event as well > as the window/showMessageRequest request to the client. So we should discard the message when the language server is not yet initialized. This can happen if the server sends textDocument/publishDiagnostics before responding to the initialize request. clojure-lsp appears to exhibit this behavior in the wild. [LSP Spec]: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialize
Diffstat (limited to 'helix-term')
-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 3124beb0..fd1cfb2e 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -512,7 +512,12 @@ impl Application {
use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
use lsp::DiagnosticSeverity;
- let language_server = doc.language_server().unwrap();
+ let language_server = if let Some(language_server) = doc.language_server() {
+ language_server
+ } else {
+ log::warn!("Discarding diagnostic because language server is not initialized: {:?}", diagnostic);
+ return None;
+ };
// TODO: convert inside server
let start = if let Some(start) = lsp_pos_to_pos(