lexical-lsp / lexical

Lexical is a next-generation elixir language server
781 stars 77 forks source link

Emacs 29.1 + Eglot + Imenu timed out #667

Closed aymanosman closed 3 months ago

aymanosman commented 3 months ago

Building an imenu is timing out.

Building Imenu...
jsonrpc-error: "request id=2 failed:", (jsonrpc-error-message . "Timed out")

I'm using GNU Emacs 29.1 and eglot.

Here are the last few lines of eglot logs.

[client-request] (id:2) Thu Mar 28 14:17:01 2024:
(:jsonrpc "2.0" :id 2 :method "textDocument/documentSymbol" :params
          (:textDocument
           (:uri "file:///private/tmp/lexical-example/lib/example.ex")))
[client-request] (id:3) Thu Mar 28 14:17:12 2024:
(:jsonrpc "2.0" :id 3 :method "textDocument/hover" :params
          (:textDocument
           (:uri "file:///private/tmp/lexical-example/lib/example.ex")
           :position
           (:line 10 :character 0)))
[server-reply] (id:3) Thu Mar 28 14:17:12 2024:
(:id 3 :result nil :jsonrpc "2.0")
[stderr] warning: the log level :warn is deprecated, use :warning instead
[stderr]   (logger 1.15.7) lib/logger.ex:1137: Logger.elixir_level_to_erlang_level/1
[stderr]   (logger 1.15.7) lib/logger.ex:591: Logger.compare_levels/2
[stderr]   (logger_file_backend 0.0.13) lib/logger_file_backend.ex:36: LoggerFileBackend.handle_event/2
[stderr]   (stdlib 5.2) gen_event.erl:814: :gen_event.server_update/4
[stderr]   (stdlib 5.2) gen_event.erl:796: :gen_event.server_notify/4
[stderr]   (stdlib 5.2) gen_event.erl:538: :gen_event.handle_msg/6
[stderr] 
[client-request] (id:4) Thu Mar 28 14:19:18 2024:
(:jsonrpc "2.0" :id 4 :method "textDocument/hover" :params
          (:textDocument
           (:uri "file:///private/tmp/lexical-example/lib/example.ex")
           :position
           (:line 9 :character 0)))
[server-reply] (id:4) Thu Mar 28 14:19:18 2024:
(:id 4 :result nil :jsonrpc "2.0")
[stderr] warning: the log level :warn is deprecated, use :warning instead
[stderr]   (logger 1.15.7) lib/logger.ex:1137: Logger.elixir_level_to_erlang_level/1
[stderr]   (logger 1.15.7) lib/logger.ex:591: Logger.compare_levels/2
[stderr]   (logger_file_backend 0.0.13) lib/logger_file_backend.ex:36: LoggerFileBackend.handle_event/2
[stderr]   (stdlib 5.2) gen_event.erl:814: :gen_event.server_update/4
[stderr]   (stdlib 5.2) gen_event.erl:796: :gen_event.server_notify/4
[stderr]   (stdlib 5.2) gen_event.erl:538: :gen_event.handle_msg/6
[stderr] 
scohen commented 3 months ago

Does this keep happening, or does it clear up if you wait after the language server has started?

aymanosman commented 3 months ago

Does this keep happening, or does it clear up if you wait after the language server has started?

It happens every time.

scohen commented 3 months ago

What does the document look like?

scohen commented 3 months ago

Also, lexical emits log messages in your project directory, can you share those? Look in <project_root>/.lexical

aymanosman commented 3 months ago

What does the document look like?

Should have made it clear, but I can trigger the bug with a new project, i.e., mix new example.

Nothing useful in the lexical logs. It doesn't seem a log message is generated in the case the request times out.

# project.log
2024-03-29T02:59:23.417407+08:00 info: Resolved entity: {:call, Kernel, :def, 2}
2024-03-29T02:59:24.199371+08:00 info: Resolved entity: {:call, Kernel, :def, 2}
2024-03-29T02:59:25.033546+08:00 info: Resolved entity: {:call, Example, :hello, 0}

# lexical.log
02:59:21.443 [info] Resolved entity: {:call, Kernel, :def, 2}
02:59:23.417 [info] Resolved entity: {:call, Kernel, :def, 2}
02:59:24.199 [info] Resolved entity: {:call, Kernel, :def, 2}
02:59:25.033 [info] Resolved entity: {:call, Example, :hello, 0}
scohen commented 3 months ago

@aymanosman can you pull from main and see if that fixes it?

aymanosman commented 3 months ago

@aymanosman can you pull from main and see if that fixes it?

It works!