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.
pull/7480/head
Michael Davis 1 year ago committed by GitHub
parent 4a2337d828
commit d3f8e0592b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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() {

Loading…
Cancel
Save