nim-lang / langserver

The Nim language server implementation (based on nimsuggest)
204 stars 31 forks source link

Langserver stops responding to any requests (neovim lsp logs) #252

Closed armed closed 1 month ago

armed commented 2 months ago

Nim version: 2.0.8 Langserver version: compiled from HEAD ed6cc74 OS: macos, arm64

Getting this error:

Traceback (most recent call last)
../langserver/nimlangserver.nim(166) nimlangserver
../langserver/pkgs2/chronos-4.0.3-ba179f34b0513ebd1615076f07b61e2e217bd228/chronos/internal/asyncengine.nim(1210) runForever
../langserver/pkgs2/chronos-4.0.3-ba179f34b0513ebd1615076f07b61e2e217bd228/chronos/internal/asyncengine.nim(150) poll
../langserver/lstransports.nim(251) startStdioLoop
../langserver/lstransports.nim(188) processMessage
../langserver/lstransports.nim(160) runRpc
../langserver/lstransports.nim(143) writeOutput
../langserver/pkgs2/nim-2.0.8-46333e8f4bda41dd6d3852a3f5fa4975b96b66a2/lib/pure/streams.nim(381) write
../langserver/pkgs2/nim-2.0.8-46333e8f4bda41dd6d3852a3f5fa4975b96b66a2/lib/pure/streams.nim(343) writeData
../langserver/pkgs2/nim-2.0.8-46333e8f4bda41dd6d3852a3f5fa4975b96b66a2/lib/pure/streams.nim(1346) fsWriteData
SIGSEGV: Illegal storage access. (Attempt to read from nil?)

Have no idea how to debug, any advice?

jmgomez commented 1 month ago

Thanks, can you post the full log?

armed commented 1 month ago

Hey, @jmgomez. Sorry for late reply. So that log above is from neovim's lsp.log, nimlangserver also creates nimlangserver.log file in project directory. Here it is:

DBG CPU Time                                   benchmark="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0" time=0.258 command="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0"
DBG Found diagnostics                          file={}
DBG Stopping nimsuggest for                    root=/Users/armed/Dev/my-app/src/libsdk.nim
DBG Stopped nimsuggest                         res=ok()
DBG ShowMessage                                message="Nimsuggest initialized for /Users/armed/Dev/my-app/src/libsdk.nim"
DBG Running diagnostics                        uri=file:///Users/armed/Dev/my-app/src/libsdk.nim
DBG processQueue                               size=1
DBG Started...                                 benchmark="chk \"/Users/armed/Dev/my-app/src/libsdk.nim\":0:0" command="chk \"/Users/armed/Dev/my-app/src/libsdk.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="chk \"/Users/armed/Dev/my-app/src/libsdk.nim\":0:0"
ERR NimSuggest Error (stderr)                  err=
DBG NimSuggest needed to be restarted due to an error
WRN Server stopped.                            projectFile=/Users/armed/Dev/my-app/src/libsdk.nim
DBG ShowMessage                                message="Using Nim Compiler Version 2.2.0 [MacOSX: arm64]"
INF Starting nimsuggest                        root=/Users/armed/Dev/my-app/src/libsdk.nim timeout=120000 path=/Users/armed/.local/share/mise/installs/nim/2.2.0/bin/nimsuggest workingDir=/Users/armed/Dev/my-app
DBG Parsing nimsuggest capability              capability=con
DBG Parsing nimsuggest capability              capability=exceptionInlayHints
DBG Parsing nimsuggest capability              capability=unknownFile
DBG Nimsuggest Capabilities                    capabilities="{con, exceptionInlayHints, unknownFile}"
DBG Sending result(s)                          length=249 command="chk \"/Users/armed/Dev/my-app/src/libsdk.nim\":0:0"
DBG CPU Time                                   benchmark="chk \"/Users/armed/Dev/my-app/src/libsdk.nim\":0:0" time=0.256 command="chk \"/Users/armed/Dev/my-app/src/libsdk.nim\":0:0"
DBG Found diagnostics                          file={}
DBG Stopping nimsuggest for                    root=/Users/armed/Dev/my-app/src/libsdk.nim
DBG Stopped nimsuggest                         res=ok()
DBG ShowMessage                                message="Nimsuggest initialized for /Users/armed/Dev/my-app/src/libsdk.nim"
DBG Running diagnostics                        uri=file:///Users/armed/Dev/my-app/src/cli/mockscanner.nim
DBG processQueue                               size=1
DBG Started...                                 benchmark="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0" command="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0"
ERR NimSuggest Error (stderr)                  err=
DBG NimSuggest needed to be restarted due to an error
WRN Server stopped.                            projectFile=/Users/armed/Dev/my-app/src/libsdk.nim
DBG ShowMessage                                message="Using Nim Compiler Version 2.2.0 [MacOSX: arm64]"
INF Starting nimsuggest                        root=/Users/armed/Dev/my-app/src/libsdk.nim timeout=120000 path=/Users/armed/.local/share/mise/installs/nim/2.2.0/bin/nimsuggest workingDir=/Users/armed/Dev/my-app
DBG Parsing nimsuggest capability              capability=con
DBG Parsing nimsuggest capability              capability=exceptionInlayHints
DBG Parsing nimsuggest capability              capability=unknownFile
DBG Nimsuggest Capabilities                    capabilities="{con, exceptionInlayHints, unknownFile}"
DBG Sending result(s)                          length=249 command="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0"
DBG CPU Time                                   benchmark="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0" time=0.259 command="chk \"/Users/armed/Dev/my-app/src/cli/mockscanner.nim\":0:0"
DBG Found diagnostics                          file={}

Langserver got into infinite nimguggest restart state. It was restarting nimsuiggest until I kill nimlangserver process tree completely and then trigger editor to start it again.

also my editor adds following config upon starting LSP

{
  nim_langserver = {
    settings = {
      single_file_support = false,
      nim = {
        projectMapping = {
          {
            projectFile = "./src/libsdk.nim",
            fileRegex = ".*\\.nim",
          },
          {
            projectFile = "./src/cli.nim",
            fileRegex = ".*\\.nim",
          },
        },
      },
    },
  },
}
armed commented 1 month ago

UPDATE:

same error

jmgomez commented 1 month ago

This is a nimsuggest crash. You need to report it in the nim repro. If you open the the project with the vscode extension you will likely see the last cmd that made the code crash. Its probably chk \"/Users/armed/Dev/my-app/src/libsdk.nim\.

Alternatively, you can just use directly nimsuggest in the cmd line to reproduce it (https://nim-lang.org/docs/nimsuggest.html).