mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-24 11:01:54 +00:00
Fix LSP violation when dismissing server notifications (#23531)
Part of https://github.com/zed-industries/zed/issues/22606 Closes https://github.com/zed-industries/zed/issues/23509 When a user sees an odd notification from the language server like <img width="508" alt="image" src="https://github.com/user-attachments/assets/6f5ef1aa-0f09-4705-a02a-aaf81dd8620c" /> they usually dismiss that. Zed uses channels to wait and handle user interactions with such notifications, and, due to `?`, sends back ```json {"jsonrpc":"2.0","id":1,"error":{"message":"receiving from an empty and closed channel"}} ``` which is not spec-compliant: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_showMessageRequest > Response: > > * result: the selected [MessageActionItem](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#messageActionItem) | null if none got selected. > * error: code and message set in case an exception happens during showing a message. Unfortunately, vtsls (and, potentially, others) crash if receive such non-compliant requests, and do not get back. After the fix, the message is correct: ```json {"jsonrpc":"2.0","id":1,"result":null} ``` Release Notes: - Fixed vtsls crashing on notification dismiss Co-authored-by: Piotr Osiewicz <piotr@zed.dev>
This commit is contained in:
parent
f9e354ee9b
commit
95c045ad93
1 changed files with 2 additions and 3 deletions
|
@ -792,9 +792,8 @@ impl LocalLspStore {
|
|||
})
|
||||
.is_ok();
|
||||
if did_update {
|
||||
let response = rx.recv().await?;
|
||||
|
||||
Ok(Some(response))
|
||||
let response = rx.recv().await.ok();
|
||||
Ok(response)
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue