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.
This commit is contained in:
parent
4a2337d828
commit
d3f8e0592b
1 changed files with 6 additions and 1 deletions
|
@ -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…
Add table
Reference in a new issue