elixir-lsp / elixir-ls

A frontend-independent IDE "smartness" server for Elixir. Implements the "Language Server Protocol" standard and provides debugger support via the "Debug Adapter Protocol"
https://elixir-lsp.github.io/elixir-ls/
Apache License 2.0
1.5k stars 198 forks source link

New crash in Emacs lsp-mode for 0.17.2 #1009

Closed wkirschbaum closed 1 year ago

wkirschbaum commented 1 year ago

Environment

Elixir 1.15.7 (compiled with Erlang/OTP 26) lsp-mode 8.0.1

Current behavior

After a setup working for 0.17.1, I update lsp-mode to use 1.17.2 and the following crash appears the the lsp-log buffer, even after deleting the elixir_ls folder.

client/registerCapability succeeded
Received workspace/didChangeConfiguration
Received client configuration via workspace/didChangeConfiguration
%{"dialyzerEnabled" => true, "dialyzerFormat" => "dialyxir_long", "enableTestLenses" => false, "fetchDeps" => false, "mixEnv" => "test", "signatureAfterComplete" => false, "suggestSpecs" => false}
Loaded DETS databases in 554ms
Starting build with MIX_ENV: test MIX_TARGET: host
[ElixirLS WorkspaceSymbols] Indexing...
[ElixirLS WorkspaceSymbols] Module discovery complete
Terminating: an exception was raised:
    ** (KeyError) key 4 not found in: %{
  7 => {#PID<0.543.0>, "textDocument/codeLens", -576460743573},
  9 => {#PID<0.545.0>, "textDocument/documentSymbol", -576460743573},
  10 => {#PID<0.546.0>, "textDocument/hover", -576460743573}
}
        (elixir 1.15.7) lib/map.ex:732: Map.pop!/2
        (language_server 0.17.2) lib/language_server/server.ex:161: ElixirLS.LanguageServer.Server.handle_call/3
        (stdlib 5.1.1) gen_server.erl:1113: :gen_server.try_handle_call/4
        (stdlib 5.1.1) gen_server.erl:1142: :gen_server.handle_msg/6
        (stdlib 5.1.1) proc_lib.erl:241: :proc_lib.init_p_do_apply/3

I will be happy to update lsp-mode if this is a client-only problem, but not exactly sure what the issue is.

When I revert to 0.17.1 it works again as expected.

lukaszsamson commented 1 year ago

I suspect race conditions between a cancelled request and it's response