This PR addresses some non-critical but annoying issues that sometimes cause the language server to report an error: - When using global search and replace in VS Code, the language client sends `textDocument/didChange` notifications for documents that it never told the server to open first. Instead of emitting an error and crashing the language server when this occurs, we now instead ignore the notification. Fixes #4435. - When terminating the language server, VS Code sometimes still sends request to the language server even after emitting a `shutdown` request. The LSP spec explicitly forbids this, but instead of emitting an error when this occurs, we now error requests and ignore all other messages until receiving the final `exit` notification. Reported on Zulip several times over the years but never materialized as an issue, e.g. https://leanprover.zulipchat.com/#narrow/stream/270676-lean4/topic/Got.20.60shutdown.60.20request.2C.20expected.20an.20.60exit.60.20notification/near/441914289. - Some language clients attempt to reply to the file watcher registration request before completing the LSP initialization dance. To fix this, we now only send this request after the initialization dance has completed. Fixes #3904. --------- Co-authored-by: Sebastian Ullrich <sebasti@nullri.ch>
13 lines
385 B
Text
13 lines
385 B
Text
import Lean.Data.Lsp
|
|
open IO Lean Lsp
|
|
|
|
def main : IO Unit := do
|
|
Ipc.runWith (←IO.appPath) #["--server"] do
|
|
let hIn ← Ipc.stdin
|
|
hIn.write (←FS.readBinFile "init_vscode_1_47_2.log")
|
|
hIn.flush
|
|
let initResp ← Ipc.readResponseAs 0 InitializeResult
|
|
Ipc.writeNotification ⟨"initialized", InitializedParams.mk⟩
|
|
|
|
Ipc.shutdown 1
|
|
discard Ipc.waitForExit
|