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
This commit is contained in:
parent
03f0ef93ac
commit
7547a961bb
1 changed files with 6 additions and 1 deletions
|
@ -512,7 +512,12 @@ impl Application {
|
||||||
use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
|
use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
|
||||||
use lsp::DiagnosticSeverity;
|
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
|
// TODO: convert inside server
|
||||||
let start = if let Some(start) = lsp_pos_to_pos(
|
let start = if let Some(start) = lsp_pos_to_pos(
|
||||||
|
|
Loading…
Add table
Reference in a new issue