Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nimlangsever + nimsuggest processes non being killed when using choosenim #184

Open
arkanoid87 opened this issue Feb 7, 2024 · 23 comments
Assignees

Comments

@arkanoid87
Copy link

arkanoid87 commented Feb 7, 2024

TLDR; each vscode instance runs a nimlangserver process, each nim tab file runs two nimsuggest processes, when vscode is closed nimlangserver is not killed and one nimsuggest goes defunct. Repeatable steps until OOM

OS

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

VSCode via official repo .deb

$ type code
code is /usr/bin/code
$ code --version
1.86.0
05047486b6df5eb8d44b2ecd70ea3bdf775fd937
x64

nimlangserver installed/upgraded via nimble

$ type nimlangserver 
nimlangserver is /home/arkanoid/.nimble/bin/nimlangserver
$ nimlangserver --version
1.2.0

nimsuggest installed/upgraded via nimble

$ type nimsuggest 
nimsuggest is /home/arkanoid/.nimble/bin/nimsuggest
$ nimsuggest --version
Nim Compiler Version 2.0.2 [Linux: amd64]
Compiled at 2023-12-15
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: c4c44d10df8a14204a75c34e499def200589cb7c
active boot switches: -d:release -d:danger --gc:markAndSweep

minimal project (karax frontend, prologue backend, atlas scaffold): https://github.com/arkanoid87/nim_vscode_playground

Test scenario setup:

$ git clone https://github.com/arkanoid87/nim_vscode_playground
$ cd nim_vscode_playground
$ atlas install vscode_playground.nimble
$ nim frontend
$ nim backend
(optional nim run_backend)

Monitor processes (optional) run in different windows:

`watch -c "ps -ae | grep nimlangserver" `
`watch -c "ps -ae | grep nimsuggest"`
  1. killall nimlangserver && killall nimsuggest && killall code && code .: nimlangserver =+ 1
  2. open new tab for src/front/front.nim: nimsuggest += 2
  3. open new tab for src/back/back.nim: nimsuggest += 2
  4. close vscode (ensure code process not running)
  5. final: nimlangserver = 1, nimsuggest = 4 (one is )
  6. reopen vscode code . nimlangserver =+ 1
  7. open new tab for src/front/front.nim: nimsuggest += 2
  8. open new tab for src/back/back.nim: nimsuggest += 2
  9. final: nimlangserver = 2, nimsuggest = 8 (2 are )
@supremestranger
Copy link

Same thing happens on Windows 11

@nickysn
Copy link
Collaborator

nickysn commented Feb 7, 2024

What are the command line options of nimsuggest, i.e. what does
ps ax | grep nimsuggest
print exactly, while VS code is running?

@arkanoid87
Copy link
Author

What are the command line options of nimsuggest, i.e. what does ps ax | grep nimsuggest print exactly, while VS code is running?

By doing so, I realized that using watch -c "ps -ae | grep *" was not giving a good picture.
Moving from watch -c "ps -ae | grep *" to pstree -a <nimlangserver pid>

After opening VSCode: no nimlangserver/nimsuggest processes
After opening src/front/front.nim:

nimlangserver --stdio
  ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │   └─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │       └─2*[{nimsuggest}]
  └─2*[{nimlangserver}]

After opening src/back/back.nim:

nimlangserver --stdio
  ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │   └─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │       └─2*[{nimsuggest}]
  ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/back/back.nim --v4 --autobind --clientProcessId:530580
  │   └─nimsuggest /home/arkanoid/nim/vscode_playground/src/back/back.nim --v4 --autobind --clientProcessId:530580
  │       └─2*[{nimsuggest}]
  └─3*[{nimlangserver}]

after closing vscode (one of the two nimsuggest goes defunct)

nimlangserver --stdio
  ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │   └─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │       └─2*[{nimsuggest}]
  ├─(nimsuggest)
  └─2*[{nimlangserver}]

after reopoening vscode on src/front/front.nim I have 2 nimlangserver processes:
n1 (old one)

nimlangserver --stdio
  ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │   └─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:530580
  │       └─2*[{nimsuggest}]
  ├─(nimsuggest)
  └─2*[{nimlangserver}]

n2 (new one)

nimlangserver --stdio
  ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:566371
  │   └─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:566371
  │       └─2*[{nimsuggest}]
  └─2*[{nimlangserver}]

I see two points here:

  • nim.project setting in .vscode/settings.json seems honored as I see one nimsuggest process for each independent Nim source import tree
  • for some reason, only one of the two nimsuggest processes is killed and goes defunct possibly because parent is monitoring children processes

@nickysn
Copy link
Collaborator

nickysn commented Feb 8, 2024

Can you make the following changes in nimlangserver.nim.cfg:

  • uncomment the line --define:"chronicles_log_level=TRACE"
  • comment the line --define:"chronicles_log_level=DEBUG"
  • uncomment the line --define:"chronicles_sinks=textlines[file]"
    Finally, it should look like that:
--threads:on
--define:"async_backend=asyncdispatch"
--define:"chronicles_default_output_device=stderr"
--define:"chronicles_colors=None"
--define:"chronicles_disable_thread_id"
--define:"debugLogging"
--define:"chronicles_log_level=TRACE"
#--define:"chronicles_log_level=DEBUG"
--define:"chronicles_timestamps=None"
--define:"chronicles_sinks=textlines[file]"

Then recompile nimlangserver using nimble build. This will produce a nimlangserver binary that produces a debug log in a file, called nimlangserver.log. Can you attach the log that is produced, after doing the following:

  1. open VS code
  2. open a Nim file, wait until nimsuggest is initalized
  3. close VS code
    Another thing you can check is whether Visual Studio Code is leaving other processes. Also, when sampling the processes left, wait at least a second or two, before checking, as some of these processes may require some extra time, until they terminate.

@nickysn nickysn self-assigned this Feb 8, 2024
@arkanoid87
Copy link
Author

arkanoid87 commented Feb 8, 2024

↓ VSCode open

TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"initialize\",\"params\":{\"processId\":1042484,\"clientInfo\":{\"name\":\"Visual Studio Code\",\"version\":\"1.86.0\"},\"locale\":\"en\",\"rootPath\":\"/home/arkanoid/nim/vscode_playground\",\"rootUri\":\"file:///home/arkanoid/nim/vscode_playground\",\"capabilities\":{\"workspace\":{\"applyEdit\":true,\"workspaceEdit\":{\"documentChanges\":true,\"resourceOperations\":[\"create\",\"rename\",\"delete\"],\"failureHandling\":\"textOnlyTransactional\",\"normalizesLineEndings\":true,\"changeAnnotationSupport\":{\"groupsOnLabel\":true}},\"configuration\":true,\"didChangeWatchedFiles\":{\"dynamicRegistration\":true,\"relativePatternSupport\":true},\"symbol\":{\"dynamicRegistration\":true,\"symbolKind\":{\"valueSet\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},\"tagSupport\":{\"valueSet\":[1]},\"resolveSupport\":{\"properties\":[\"location.range\"]}},\"codeLens\":{\"refreshSupport\":true},\"executeCommand\":{\"dynamicRegistration\":true},\"didChangeConfiguration\":{\"dynamicRegistration\":true},\"workspaceFolders\":true,\"foldingRange\":{\"refreshSupport\":true},\"semanticTokens\":{\"refreshSupport\":true},\"fileOperations\":{\"dynamicRegistration\":true,\"didCreate\":true,\"didRename\":true,\"didDelete\":true,\"willCreate\":true,\"willRename\":true,\"willDelete\":true},\"inlineValue\":{\"refreshSupport\":true},\"inlayHint\":{\"refreshSupport\":true},\"diagnostics\":{\"refreshSupport\":true}},\"textDocument\":{\"publishDiagnostics\":{\"relatedInformation\":true,\"versionSupport\":false,\"tagSupport\":{\"valueSet\":[1,2]},\"codeDescriptionSupport\":true,\"dataSupport\":true},\"synchronization\":{\"dynamicRegistration\":true,\"willSave\":true,\"willSaveWaitUntil\":true,\"didSave\":true},\"completion\":{\"dynamicRegistration\":true,\"contextSupport\":true,\"completionItem\":{\"snippetSupport\":true,\"commitCharactersSupport\":true,\"documentationFormat\":[\"markdown\",\"plaintext\"],\"deprecatedSupport\":true,\"preselectSupport\":true,\"tagSupport\":{\"valueSet\":[1]},\"insertReplaceSupport\":true,\"resolveSupport\":{\"properties\":[\"documentation\",\"detail\",\"additionalTextEdits\"]},\"insertTextModeSupport\":{\"valueSet\":[1,2]},\"labelDetailsSupport\":true},\"insertTextMode\":2,\"completionItemKind\":{\"valueSet\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},\"completionList\":{\"itemDefaults\":[\"commitCharacters\",\"editRange\",\"insertTextFormat\",\"insertTextMode\",\"data\"]}},\"hover\":{\"dynamicRegistration\":true,\"contentFormat\":[\"markdown\",\"plaintext\"]},\"signatureHelp\":{\"dynamicRegistration\":true,\"signatureInformation\":{\"documentationFormat\":[\"markdown\",\"plaintext\"],\"parameterInformation\":{\"labelOffsetSupport\":true},\"activeParameterSupport\":true},\"contextSupport\":true},\"definition\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"references\":{\"dynamicRegistration\":true},\"documentHighlight\":{\"dynamicRegistration\":true},\"documentSymbol\":{\"dynamicRegistration\":true,\"symbolKind\":{\"valueSet\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},\"hierarchicalDocumentSymbolSupport\":true,\"tagSupport\":{\"valueSet\":[1]},\"labelSupport\":true},\"codeAction\":{\"dynamicRegistration\":true,\"isPreferredSupport\":true,\"disabledSupport\":true,\"dataSupport\":true,\"resolveSupport\":{\"properties\":[\"edit\"]},\"codeActionLiteralSupport\":{\"codeActionKind\":{\"valueSet\":[\"\",\"quickfix\",\"refactor\",\"refactor.extract\",\"refactor.inline\",\"refactor.rewrite\",\"source\",\"source.organizeImports\"]}},\"honorsChangeAnnotations\":true},\"codeLens\":{\"dynamicRegistration\":true},\"formatting\":{\"dynamicRegistration\":true},\"rangeFormatting\":{\"dynamicRegistration\":true,\"rangesSupport\":true},\"onTypeFormatting\":{\"dynamicRegistration\":true},\"rename\":{\"dynamicRegistration\":true,\"prepareSupport\":true,\"prepareSupportDefaultBehavior\":1,\"honorsChangeAnnotations\":true},\"documentLink\":{\"dynamicRegistration\":true,\"tooltipSupport\":true},\"typeDefinition\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"implementation\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"colorProvider\":{\"dynamicRegistration\":true},\"foldingRange\":{\"dynamicRegistration\":true,\"rangeLimit\":5000,\"lineFoldingOnly\":true,\"foldingRangeKind\":{\"valueSet\":[\"comment\",\"imports\",\"region\"]},\"foldingRange\":{\"collapsedText\":false}},\"declaration\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"selectionRange\":{\"dynamicRegistration\":true},\"callHierarchy\":{\"dynamicRegistration\":true},\"semanticTokens\":{\"dynamicRegistration\":true,\"tokenTypes\":[\"namespace\",\"type\",\"class\",\"enum\",\"interface\",\"struct\",\"typeParameter\",\"parameter\",\"variable\",\"property\",\"enumMember\",\"event\",\"function\",\"method\",\"macro\",\"keyword\",\"modifier\",\"comment\",\"string\",\"number\",\"regexp\",\"operator\",\"decorator\"],\"tokenModifiers\":[\"declaration\",\"definition\",\"readonly\",\"static\",\"deprecated\",\"abstract\",\"async\",\"modification\",\"documentation\",\"defaultLibrary\"],\"formats\":[\"relative\"],\"requests\":{\"range\":true,\"full\":{\"delta\":true}},\"multilineTokenSupport\":false,\"overlappingTokenSupport\":false,\"serverCancelSupport\":true,\"augmentsSyntaxTokens\":true},\"linkedEditingRange\":{\"dynamicRegistration\":true},\"typeHierarchy\":{\"dynamicRegistration\":true},\"inlineValue\":{\"dynamicRegistration\":true},\"inlayHint\":{\"dynamicRegistration\":true,\"resolveSupport\":{\"properties\":[\"tooltip\",\"textEdits\",\"label.tooltip\",\"label.location\",\"label.command\"]}},\"diagnostic\":{\"dynamicRegistration\":true,\"relatedDocumentSupport\":false}},\"window\":{\"showMessage\":{\"messageActionItem\":{\"additionalPropertiesSupport\":true}},\"showDocument\":{\"support\":true},\"workDoneProgress\":true},\"general\":{\"staleRequestSupport\":{\"cancel\":true,\"retryOnContentModified\":[\"textDocument/semanticTokens/full\",\"textDocument/semanticTokens/range\",\"textDocument/semanticTokens/full/delta\"]},\"regularExpressions\":{\"engine\":\"ECMAScript\",\"version\":\"ES2020\"},\"markdown\":{\"parser\":\"marked\",\"version\":\"1.1.0\"},\"positionEncodings\":[\"utf-16\"]},\"notebookDocument\":{\"synchronization\":{\"dynamicRegistration\":true,\"executionSummarySupport\":true}}},\"trace\":\"off\",\"workspaceFolders\":[{\"uri\":\"file:///home/arkanoid/nim/vscode_playground\",\"name\":\"vscode_playground\"}]}}"
DBG Router: dispatching                        method=initialize id=0
DBG Initialize received...                    
DBG Registering monitor for process            pid=1042484
DBG Router: sending response                   method=initialize id=0
TRC Router: response                           response="{\"capabilities\":{\"textDocumentSync\":{\"openClose\":true,\"change\":1,\"willSave\":false,\"willSaveWaitUntil\":false,\"save\":{\"includeText\":true}},\"completionProvider\":{\"resolveProvider\":false,\"triggerCharacters\":[\".\"]},\"hoverProvider\":true,\"signatureHelpProvider\":{\"triggerCharacters\":[\"(\",\",\"]},\"declarationProvider\":true,\"definitionProvider\":true,\"typeDefinitionProvider\":true,\"implementationProvider\":null,\"referencesProvider\":true,\"documentHighlightProvider\":true,\"documentSymbolProvider\":true,\"workspaceSymbolProvider\":true,\"codeActionProvider\":true,\"codeLensProvider\":null,\"documentLinkProvider\":null,\"colorProvider\":null,\"documentFormattingProvider\":null,\"documentRangeFormattingProvider\":null,\"documentOnTypeFormattingProvider\":null,\"renameProvider\":{\"prepareProvider\":true},\"executeCommandProvider\":{\"commands\":[\"nimlangserver.restart\",\"nimlangserver.recompile\",\"nimlangserver.checkProject\"]},\"inlayHintProvider\":{\"resolveProvider\":false},\"workspace\":{\"workspaceFolders\":{\"supported\":null,\"changeNotifications\":null}},\"experimental\":null}}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"initialized\",\"params\":{}}"
DBG Router: dispatching                        method=initialized id=null
DBG Client initialized.                       
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didOpen\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"languageId\":\"nim\",\"version\":1,\"text\":\"import karax/[karax, karaxdsl, vdom]\\n\\nproc main() =\\n  proc createDom(data: Routerdata): VNode =\\n    buildHtml(tdiv):\\n      text \\\"Hello, world!\\\"\\n\\n  setRenderer createDom, \\\"ROOT\\\"\\n\\nif isMainModule:\\n  main()\\n\"}}}"
DBG Router: dispatching                        method=textDocument/didOpen id=null
DBG New document opened for URI:               uri=file:///home/arkanoid/nim/vscode_playground/src/front/front.nim
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":null}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"textDocument/documentSymbol\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\"}}}"
DBG Router: dispatching                        method=textDocument/documentSymbol id=1
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"textDocument/inlayHint\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":11,\"character\":0}}}}"
DBG Router: dispatching                        method=textDocument/inlayHint id=2
DBG inlayHint received...                     
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":2,\"result\":[{\"project\":[\"src/back/back.nim\",\"src/front/front.nim\"],\"projectMapping\":[],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":false,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":80,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
DBG Got response for the didChangeConfiguration registration: res=null
DBG Received the following configuration       configuration="[{\"project\":[\"src/back/back.nim\",\"src/front/front.nim\"],\"projectMapping\":[],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":false,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":80,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
DBG getProjectFile                             project=/home/arkanoid/nim/vscode_playground/src/front/front.nim
INF Starting nimsuggest                        root=/home/arkanoid/nim/vscode_playground/src/front/front.nim timeout=120000 path=nimsuggest fullPath=/home/arkanoid/.nimble/bin/nimsuggest workingDir=/home/arkanoid/nim/vscode_playground
TRC Sending notification                       notification=$/progress params="{\"token\":\"Creating nimsuggest for /home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"value\":{\"kind\":\"begin\",\"title\":\"Creating nimsuggest for /home/arkanoid/nim/vscode_playground/src/front/front.nim\"}}"
DBG Document associated with the following projectFile uri=file:///home/arkanoid/nim/vscode_playground/src/front/front.nim projectFile=/home/arkanoid/nim/vscode_playground/src/front/front.nim
DBG Started nimsuggest                         port=33481 root=/home/arkanoid/nim/vscode_playground/src/front/front.nim
DBG ShowMessage                                message="Nimsuggest initialized for /home/arkanoid/nim/vscode_playground/src/front/front.nim"
TRC Sending notification                       notification=window/showMessage params="{\"type\":3,\"message\":\"Nimsuggest initialized for /home/arkanoid/nim/vscode_playground/src/front/front.nim\"}"
DBG Running diagnostics                        uri=file:///home/arkanoid/nim/vscode_playground/src/front/front.nim
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"value\":{\"kind\":\"begin\",\"title\":\"Checking project /home/arkanoid/nim/vscode_playground/src/front/front.nim\"}}"
DBG processQueue                               size=1
DBG Started...                                 benchmark="chk \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0" command="chk \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="chk \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
TRC Sending notification                       notification=$/progress params="{\"token\":\"Creating nimsuggest for /home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"value\":{\"kind\":\"end\",\"title\":\"\"}}"
DBG Sending result(s)                          length=75 command="chk \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG CPU Time                                   benchmark="chk \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0" time=0.251 command="chk \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG Started...                                 benchmark="inlayHints \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":1:0:12:0 +exceptionHints" command="inlayHints \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":1:0:12:0 +exceptionHints"
DBG timeoutCallback is set                     timeout=120000 command="inlayHints \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":1:0:12:0 +exceptionHints"
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"value\":{\"kind\":\"end\",\"title\":\"\"}}"
DBG Found diagnostics                          file={}
DBG Sending result(s)                          length=0 command="inlayHints \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":1:0:12:0 +exceptionHints"
DBG CPU Time                                   benchmark="inlayHints \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":1:0:12:0 +exceptionHints" time=0.249 command="inlayHints \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":1:0:12:0 +exceptionHints"
DBG Started...                                 benchmark="known \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0" command="known \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="known \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG Router: sending response                   method=textDocument/inlayHint id=2
TRC Router: response                           response=[]
DBG Sending result(s)                          length=1 command="known \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG CPU Time                                   benchmark="known \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0" time=0.250 command="known \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG Started...                                 benchmark="outline \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0" command="outline \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="outline \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG Sending result(s)                          length=2 command="outline \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG CPU Time                                   benchmark="outline \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0" time=0.250 command="outline \"/home/arkanoid/nim/vscode_playground/src/front/front.nim\":0:0"
DBG Router: sending response                   method=textDocument/documentSymbol id=1
TRC Router: response                           response="[{\"name\":\"main\",\"kind\":12,\"deprecated\":null,\"location\":{\"uri\":\"file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"range\":{\"start\":{\"line\":2,\"character\":5},\"end\":{\"line\":2,\"character\":9}}},\"containerName\":null},{\"name\":\"createDom\",\"kind\":12,\"deprecated\":null,\"location\":{\"uri\":\"file:///home/arkanoid/nim/vscode_playground/src/front/front.nim\",\"range\":{\"start\":{\"line\":3,\"character\":7},\"end\":{\"line\":3,\"character\":16}}},\"containerName\":null}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":3,\"result\":null}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":4,\"result\":null}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"shutdown\"}"
DBG Router: dispatching                        method=shutdown id=3
DBG Shutting down                             
DBG stopping child nimsuggest processes       
DBG Stopping nimsuggest for                    root=/home/arkanoid/nim/vscode_playground/src/front/front.nim

↑ VSCode closed

nimlangserver process still running here
code process(es) not running here

pstree -a at this moment (sorry created this on second run so PIDs may not be the same as in log above)

systemd splash
  ├─systemd --user
  │   ├─nimlangserver --stdio
  │   │   ├─(nimsuggest)
  │   │   └─{nimlangserver}
  │   ├─nimsuggest /home/arkanoid/nim/vscode_playground/src/front/front.nim --v4 --autobind --clientProcessId:1062269
  │   │   └─2*[{nimsuggest}]

↓ killall nimlangserger

DBG Terminated via signal                      sig=15
DBG child nimsuggest processes already stopped: CHECK!

EOF

@nickysn
Copy link
Collaborator

nickysn commented Feb 9, 2024

Hmm, here's what the end of the log is supposed to look after closing VS Code:

TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"shutdown\"}"
DBG Router: dispatching                        method=shutdown id=3
DBG Shutting down                             
DBG stopping child nimsuggest processes       
DBG Stopping nimsuggest for                    root=/home/nickysn/work/langserver/nimlangserver.nim
TRC Shutdown complete                         
DBG Router: sending response                   method=shutdown id=3
TRC Router: response                           response=null
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"exit\"}"
DBG Router: dispatching                        method=exit id=null
DBG Quitting process                          
DBG exiting main thread                        isShutdown=true

After that, I get no leftover processes - neither nimlangserver, nor nimsuggest. So, this means something in your setup is different, and we need to figure this out, so I can reproduce the bug. Can you provide more information about your VS Code plugins and versions, your desktop environment (I'm using GNOME), window manager, etc.

@arkanoid87
Copy link
Author

Interesting. Seems actually related to my environment.
I post my env again

OS

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

VSCode

$ type code
code is /usr/bin/code
$ code --version
1.86.0
05047486b6df5eb8d44b2ecd70ea3bdf775fd937
x64

Gnome 42.9

I'll try to repeat the experiment in a pristine VSCode environment (with just nim extension) and give feedback

@arkanoid87
Copy link
Author

arkanoid87 commented Feb 9, 2024

I've created a new VSCode profile (File > Preferences > Profiles) with nothing except nim-lang extension. Here's the full Nim.code-profile importable as profile:

{"name":"Nim","icon":"symbol-event","extensions":"[{\"identifier\":{\"id\":\"nimlang.nimlang\",\"uuid\":\"11cd9e22-9edc-411a-937c-9546d1c5b4b5\"},\"displayName\":\"nim-lang.org\"}]"}

but even using this I experience same behaviour:
nimlangserver.log stops at DBG Stopping nimsuggest for ... and process survives vscode shutdown.

This should help ruling out quite large group of possible causes

@arkanoid87
Copy link
Author

arkanoid87 commented Feb 9, 2024

I went print debugging langserver code

this

proc stop*(self: Nimsuggest) =
  debug "Stopping nimsuggest for ", root = self.root
  try:
    debug "A"
    self.process.kill()
    debug "B"
    self.process.close()
    debug "C"
  except Exception:
    debug "Err"
    debug getCurrentExceptionMsg()
    discard

prints this in log

DBG Stopping nimsuggest for                    root=/home/arkanoid/nim/vscode_playground/src/front/front.nim
DBG A                                         
DBG B

C is never reached, so something must be hanging inside self.process.close()

UPDATE: print debugging process.close()

import posix
import streams
proc stop*(self: Nimsuggest) =
  proc close(p: Process) =
    debug "CA ", pid=p.processID
    if poParentStreams notin p.options:
      if p.inStream != nil:
        debug "CB", pid=p.processID
        close(p.inStream)
      else:
        debug "CC", pid=p.processID
        discard close(p.inHandle)

      if p.outStream != nil:
        debug "CD", pid=p.processID
        close(p.outStream)
      else:
        debug "CE", pid=p.processID
        discard close(p.outHandle)

      if p.errStream != nil:
        debug "CF", pid=p.processID
        close(p.errStream)
      else:
        debug "CG", pid=p.processID
        discard close(p.errHandle)
    debug "CH", pid=p.processID

  debug "Stopping nimsuggest for ", root = self.root
  try:
    debug "A", pid=self.process.processID
    self.process.kill()
    debug "B", pid=self.process.processID
    self.process.close()
    debug "C", pid=self.process.processID
  except Exception:
    debug "Err", pid=self.process.processID
    debug getCurrentExceptionMsg()
    discard

log

DBG Stopping nimsuggest for                    root=/home/arkanoid/nim/vscode_playground/src/front/front.nim
DBG A                                          pid=333154
DBG B                                          pid=333154
DBG CA                                         pid=333154
DBG CC                                         pid=333154
DBG CD                                         pid=333154
DBG CF                                         pid=333154

so it seems to hang inside close(p.errStream) but

cat /proc/333154/status:

Name:   nimsuggest                                                                                                                                                                                                 
State:  Z (zombie)                                                                                                                                                                                                 
Tgid:   333154                                                                                                                                                                                                     
Ngid:   0                                                                                                                                                                                                          
Pid:    333154                                                                                                                                                                                                     
PPid:   333121                                                                                                                                                                                                     
TracerPid:      0                                                                                                                                                                                                  
Uid:    1000    1000    1000    1000                                                                                                                                                                               
Gid:    1000    1000    1000    1000                                                                                                                                                                               
FDSize: 0                                                                                                                                                                                                          
Groups: 4 20 24 27 29 30 46 122 134 135 137 140 999 1000                                                                                                                                                           
NStgid: 333154                                                                                                                                                                                                     
NSpid:  333154                                                                                                                                                                                                     
NSpgid: 332962                                                                                                                                                                                                     
NSsid:  332962                                                                                                                                                                                                     
Kthread:        0                                                                                                                                                                                                  
Threads:        1                                                                                                                                                                                                  
SigQ:   0/62820                                                                                                                                                                                                    
SigPnd: 0000000000000000                                                                                                                                                                                           
ShdPnd: 0000000000000100                                                                                                                                                                                           
SigBlk: 0000000000000000                                                                                                                                                                                           
SigIgn: 0000000000001000                                                                                                                                                                                           
SigCgt: 00000000000004aa                                                                                                                                                                                           
CapInh: 0000000000000000                                                                                                                                                                                           
CapPrm: 0000000000000000                                                                                                                                                                                           
CapEff: 0000000000000000
CapBnd: 000001ffffffffff 
CapAmb: 0000000000000000                         
NoNewPrivs:     0                                  
Seccomp:        0                                  
Seccomp_filters:        0                          
Speculation_Store_Bypass:       thread vulnerable                                                                                                                                                                  
SpeculationIndirectBranch:      conditional enabled                                                                                                                                                                
Cpus_allowed:   fff                                                                                                                                                                                                
Cpus_allowed_list:      0-11                                                                                                                                                                                       
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000
00,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0             
voluntary_ctxt_switches:        3     
nonvoluntary_ctxt_switches:     0

seems that langserver is waiting a close(p.errStream) on a Zombie process. My knowledge says that the parent should be responsible of cleaning it up. From wikipedia:

On Unix and Unix-like computer operating systems, a zombie process or defunct process is a process that has completed execution (via the exit system call) but still has an entry in the process table: it is a process in the "terminated state". This occurs for the child processes, where the entry is still needed to allow the parent process to read its child's exit status: once the exit status is read via the wait system call, the zombie's entry is removed from the process table and it is said to be "reaped".

UPDATE2:
I might end up as the most inefficient bug seeker ever, but here's the print debug dive into close(p.errStream)

import logging
var fileLog = newFileLogger("handler.log")
addHandler(fileLog)
proc fsClose(s: Stream) =
  {.cast(raises:[]).}:
    {.cast(tags: []).}:
      info "fsClose A " & $FileStream(s).f.repr
      if FileStream(s).f != nil:
        info "fsClose B " & $FileStream(s).f.repr
        close(FileStream(s).f)
        info "fsClose C " & $FileStream(s).f.repr
        FileStream(s).f = nil
        info "fsClose D " & $FileStream(s).f.repr

when vscode is closed, the following linea are appended to handler.log:

INFO fsClose A File()
INFO fsClose B File()
INFO fsClose C File()
INFO fsClose D nil
INFO fsClose A File()
INFO fsClose B File()

strace -p<nimlangserver_pid> -s 1000000 --decode-fds

...
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG Shutting down                             \n", 47) = 47
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG stopping child nimsuggest processes       \n", 47) = 47
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG Stopping nimsuggest for                    root=/home/arkanoid/nim/vscode_playground/src/front/front.nim\n", 105) = 105
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG A                                          pid=407183\n", 58) = 58
kill(407183, SIGKILL)                   = 0
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG B                                          pid=407183\n", 58) = 58
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG CA                                         pid=407183\n", 58) = 58
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG CC                                         pid=407183\n", 58) = 58
close(18<pipe:[2017455]>)               = 0
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG CD                                         pid=407183\n", 58) = 58
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG SA                                         asd=00005592CDF05B87\n", 68) = 68
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG SB                                         asd=00005592CDF05B87\n", 68) = 68
readlink("/proc/self/exe", "/home/arkanoid/bin/nimlangserver", 1024) = 28
write(3</home/arkanoid/nim/vscode_playground/handler.log>, "INFO fsClose A File()\n", 22) = 22
readlink("/proc/self/exe", "/home/arkanoid/bin/nimlangserver", 1024) = 28
write(3</home/arkanoid/nim/vscode_playground/handler.log>, "INFO fsClose B File()\n", 22) = 22
close(20<pipe:[2017456]>)               = 0
readlink("/proc/self/exe", "/home/arkanoid/bin/nimlangserver", 1024) = 28
write(3</home/arkanoid/nim/vscode_playground/handler.log>, "INFO fsClose C File()\n", 22) = 22
readlink("/proc/self/exe", "/home/arkanoid/bin/nimlangserver", 1024) = 28
write(3</home/arkanoid/nim/vscode_playground/handler.log>, "INFO fsClose D nil\n", 19) = 19
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG CF                                         pid=407183\n", 58) = 58
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG SA                                         asd=00005592CDF05B87\n", 68) = 68
write(7</home/arkanoid/nim/vscode_playground/nimlangserver.log>, "DBG SB                                         asd=00005592CDF05B87\n", 68) = 68
readlink("/proc/self/exe", "/home/arkanoid/bin/nimlangserver", 1024) = 28
write(3</home/arkanoid/nim/vscode_playground/handler.log>, "INFO fsClose A File()\n", 22) = 22
readlink("/proc/self/exe", "/home/arkanoid/bin/nimlangserver", 1024) = 28
write(3</home/arkanoid/nim/vscode_playground/handler.log>, "INFO fsClose B File()\n", 22) = 22
futex(0x7f9f84000c50, FUTEX_WAIT_PRIVATE, 2, NULL

UPDATE3:
if I skip close but wait (reap) the child process after kill, nimlangserver shutdows correctly in vscode, even in case of multiple nimsuggest processes. I am not aware of the consequece of not closing stdin/out/err between kill and wait

proc stop*(self: Nimsuggest) =
  debug "Stopping nimsuggest for ", root = self.root
  try:
    self.process.kill()
    # self.process.close()
    dicard self.process.waitForExit()
  except Exception:
    debug getCurrentExceptionMsg()
    discard

UPDATE4:
seems to be linked to stderrThread on Nimsuggest.process.
By commenting this line:

createThread(stderrThread, logStderr, (root: root, process: result.process))

leaving proc stop(...) as-is, the infinite wait doesn't happen.
Maybe this way to handle stdErr is not correct?

proc logStderr(param: tuple[root: string, process: Process]) {.thread.} =

UPDATE5:

I can confirm that the line that prevents nimlangserver to close stderr of Zombified nimsuggest process is:

var line = param.process.errorStream.readLine

I've tried some educated guess solution, but this problem goes beyond my knowledge of pipes, futexes, and cross-platform IPC I/O in general. Also I see some hacks I don't quite understand.
I'll fallback to NimLsp which avoids this problem completely while waiting this problem to be solved, as it leaks >100MB ram on each VSCode run, depending on the project complexity/import tree.

@nickysn
Copy link
Collaborator

nickysn commented Feb 13, 2024

Hmm, it's possible that the logStderr is causing this. It does a blocking read on the fd in another thread. While this blocking call is in progress, we call close() on the fd in the main thread. man close states the following about doing this:

Multithreaded processes and close()
It is probably unwise to close file descriptors while they may be in use by system calls in other threads in the same process. Since a file descriptor may be reused, there are some obscure race conditions that may cause un‐
intended side effects.

When dealing with sockets, you have to be sure that there is no recv(2) still blocking on it on another thread, otherwise it might block forever, since no more messages will be send via the socket. Be sure to use shutdown(2)
to shut down all parts the connection before closing the socket.

Furthermore, consider the following scenario where two threads are performing operations on the same file descriptor:

(1) One thread is blocked in an I/O system call on the file descriptor. For example, it is trying to write(2) to a pipe that is already full, or trying to read(2) from a stream socket which currently has no available data.

(2) Another thread closes the file descriptor.

The behavior in this situation varies across systems. On some systems, when the file descriptor is closed, the blocking system call returns immediately with an error.

On Linux (and possibly some other systems), the behavior is different: the blocking I/O system call holds a reference to the underlying open file description, and this reference keeps the description open until the I/O system
call completes. (See open(2) for a discussion of open file descriptions.) Thus, the blocking system call in the first thread may successfully complete after the close() in the second thread.

So, it looks like it could cause some nasty race condition. However, the documented behavior under Linux should not cause close() to block. And I'm not experiencing this under Fedora 39 (with kernel-6.7.4-200.fc39.x86_64 and glibc-2.38-16.fc39.x86_64). Could it be something Ubuntu-specific? I need to try this in a VM. Another question: Does it happen on every project, or just this one? Is there something special about https://github.com/arkanoid87/nim_vscode_playground or does it also happen in just an empty dir with hello.nim like this:

echo "Hello, world!"

?

@nickysn
Copy link
Collaborator

nickysn commented Feb 13, 2024

Same thing happens on Windows 11

Please file a separate bug report for Windows, with the exact steps to reproduce. Include, at least, Nim and nimsuggest version, how did you install them, VS Code version, vscode-nim plugin version, other plugins that you have installed, your VS Code config file, the project you're testing this on, etc.

@arkanoid87
Copy link
Author

Hmm, it's possible that the logStderr is causing this. It does a blocking read on the fd in another thread. While this blocking call is in progress, we call close() on the fd in the main thread. man close states the following about doing this:

Multithreaded processes and close()
It is probably unwise to close file descriptors while they may be in use by system calls in other threads in the same process. Since a file descriptor may be reused, there are some obscure race conditions that may cause un‐
intended side effects.
When dealing with sockets, you have to be sure that there is no recv(2) still blocking on it on another thread, otherwise it might block forever, since no more messages will be send via the socket. Be sure to use shutdown(2)
to shut down all parts the connection before closing the socket.
Furthermore, consider the following scenario where two threads are performing operations on the same file descriptor:
(1) One thread is blocked in an I/O system call on the file descriptor. For example, it is trying to write(2) to a pipe that is already full, or trying to read(2) from a stream socket which currently has no available data.
(2) Another thread closes the file descriptor.
The behavior in this situation varies across systems. On some systems, when the file descriptor is closed, the blocking system call returns immediately with an error.
On Linux (and possibly some other systems), the behavior is different: the blocking I/O system call holds a reference to the underlying open file description, and this reference keeps the description open until the I/O system
call completes. (See open(2) for a discussion of open file descriptions.) Thus, the blocking system call in the first thread may successfully complete after the close() in the second thread.

So, it looks like it could cause some nasty race condition. However, the documented behavior under Linux should not cause close() to block. And I'm not experiencing this under Fedora 39 (with kernel-6.7.4-200.fc39.x86_64 and glibc-2.38-16.fc39.x86_64). Could it be something Ubuntu-specific? I need to try this in a VM. Another question: Does it happen on every project, or just this one? Is there something special about https://github.com/arkanoid87/nim_vscode_playground or does it also happen in just an empty dir with hello.nim like this:

echo "Hello, world!"

?

it happens even with minimal project:

$ mkdir minimal
$ cd minimal
$ echo 'echo "hello world!"' > main.nim
$ code .
# (quit vscode)
$ ps -aux | grep nimsuggest
arkanoid      319123  0.0  0.0      0     0 ?        Z    22:23   0:00 [nimsuggest] <defunct>
arkanoid      319126  0.2  0.1  41272 32384 ?        Sl   22:23   0:00 /home/arkanoid/.choosenim/toolchains/nim-2.0.2/bin/nimsuggest /home/arkanoid/nim/minimal/main.nim --v4 --autobind --clientProcessId:319105
arkanoid      319753  0.0  0.0   9220  2432 pts/1    S+   22:25   0:00 grep --color=auto nimsuggest
$ ps -aux | grep nimlangserver
arkanoid      319105  0.0  0.0 218328 11948 ?        Sl   22:23   0:00 /home/arkanoid/.nimble/pkgs2/nimlangserver-1.2.0-95de85fae4485dcd850ada31e200d15671a00c4a/nimlangserver --stdio
arkanoid      319846  0.0  0.0   9220  2432 pts/1    S+   22:28   0:00 grep --color=auto nimlangserver

@nickysn
Copy link
Collaborator

nickysn commented Feb 15, 2024

Very strange. Tried this in a VM under Ubuntu 22.04.3 LTS (with latest updates) and I still couldn't reproduce it. What is your kernel version? The close and read calls are actually syscalls of the kernel, so it could be kernel version-related.

@arkanoid87
Copy link
Author

arkanoid87 commented Feb 15, 2024

$ uname -a
Linux 6.5.0-17-generic #17~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 16 14:32:32 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

from

linux-image-6.5.0-17-generic/jammy-updates,jammy-security,now 6.5.0-17.17~22.04.1 amd64 [installed,automatic]

I'm gonna test on a different machine, as this is getting spooky

@RokkuCode
Copy link

RokkuCode commented Feb 25, 2024

if this is relevant: i have the same problem under arch. dangling processes after closing vscode.

Linux 6.7.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 17 Feb 2024 14:02:33 +0000 x86_64 GNU/Linux

After closing vscode pstree says:

nimlangserver --stdio
  ├─nimsuggest /home/rokku/development/hikami-repos/Pyrol/pfadmin-cli/src/lib/dbhandler.nim --v4 --autobind --clientProcessId:346897
  │   └─nimsuggest /home/rokku/development/hikami-repos/Pyrol/pfadmin-cli/src/lib/dbhandler.nim --v4 --autobind --clientProcessId:346897
  │       └─2*[{nimsuggest}]
  ├─nimsuggest /home/rokku/development/hikami-repos/Pyrol/pfadmin-cli/src/lib/models/postfix/transport.nim --v4 --autobind --clientProcessId:346897
  │   └─nimsuggest /home/rokku/development/hikami-repos/Pyrol/pfadmin-cli/src/lib/models/postfix/transport.nim --v4 --autobind--clientProcessId:3468
  │       └─2*[{nimsuggest}]
  ├─(nimsuggest)
  └─3*[{nimlangserver}]

@nickysn
Copy link
Collaborator

nickysn commented Feb 25, 2024

if this is relevant: i have the same problem under arch. dangling processes after closing vscode.

Please provide nimsuggest.log (see above how to enable logging), your VS Code version, your Nim version, your nimsuggest version, and how did you install them.

@RokkuCode
Copy link

RokkuCode commented Feb 25, 2024

Here we go:

The OS (freshly updated)

❯ cat /etc/lsb-release
DISTRIB_ID="Arch"
DISTRIB_RELEASE="rolling"
DISTRIB_DESCRIPTION="Arch Linux"

The Kernel:

Linux 6.7.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 17 Feb 2024 14:02:33 +0000 x86_64 GNU/Linux

The Code

❯ type code
code is /usr/bin/code
❯ code --version
1.86.2
903b1e9d8990623e3d7da1df3d33db3e42d80eda
x64

The langserver

❯ type nimlangserver
nimlangserver is /home/rokku/.nimble/bin/nimlangserver
❯ nimlangserver --version
1.2.0

The nimsuggest

❯ type nimsuggest
nimsuggest is /home/rokku/.nimble/bin/nimsuggest
❯ nimsuggest --version
Nim Compiler Version 2.0.2 [Linux: amd64]
Compiled at 2023-12-15
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: c4c44d10df8a14204a75c34e499def200589cb7c
active boot switches: -d:release -d:danger --gc:markAndSweep

The nimsuggestlog with Debugging enabled:

❯ cat /home/rokku/development/hikami-repos/Assimilator/nim/example/nimlangserver.log
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"initialize\",\"params\":{\"processId\":405818,\"clientInfo\":{\"name\":\"Visual Studio Code\",\"version\":\"1.86.2\"},\"locale\":\"de\",\"rootPath\":\"/home/rokku/development/hikami-repos/Assimilator/nim/example\",\"rootUri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example\",\"capabilities\":{\"workspace\":{\"applyEdit\":true,\"workspaceEdit\":{\"documentChanges\":true,\"resourceOperations\":[\"create\",\"rename\",\"delete\"],\"failureHandling\":\"textOnlyTransactional\",\"normalizesLineEndings\":true,\"changeAnnotationSupport\":{\"groupsOnLabel\":true}},\"configuration\":true,\"didChangeWatchedFiles\":{\"dynamicRegistration\":true,\"relativePatternSupport\":true},\"symbol\":{\"dynamicRegistration\":true,\"symbolKind\":{\"valueSet\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},\"tagSupport\":{\"valueSet\":[1]},\"resolveSupport\":{\"properties\":[\"location.range\"]}},\"codeLens\":{\"refreshSupport\":true},\"executeCommand\":{\"dynamicRegistration\":true},\"didChangeConfiguration\":{\"dynamicRegistration\":true},\"workspaceFolders\":true,\"foldingRange\":{\"refreshSupport\":true},\"semanticTokens\":{\"refreshSupport\":true},\"fileOperations\":{\"dynamicRegistration\":true,\"didCreate\":true,\"didRename\":true,\"didDelete\":true,\"willCreate\":true,\"willRename\":true,\"willDelete\":true},\"inlineValue\":{\"refreshSupport\":true},\"inlayHint\":{\"refreshSupport\":true},\"diagnostics\":{\"refreshSupport\":true}},\"textDocument\":{\"publishDiagnostics\":{\"relatedInformation\":true,\"versionSupport\":false,\"tagSupport\":{\"valueSet\":[1,2]},\"codeDescriptionSupport\":true,\"dataSupport\":true},\"synchronization\":{\"dynamicRegistration\":true,\"willSave\":true,\"willSaveWaitUntil\":true,\"didSave\":true},\"completion\":{\"dynamicRegistration\":true,\"contextSupport\":true,\"completionItem\":{\"snippetSupport\":true,\"commitCharactersSupport\":true,\"documentationFormat\":[\"markdown\",\"plaintext\"],\"deprecatedSupport\":true,\"preselectSupport\":true,\"tagSupport\":{\"valueSet\":[1]},\"insertReplaceSupport\":true,\"resolveSupport\":{\"properties\":[\"documentation\",\"detail\",\"additionalTextEdits\"]},\"insertTextModeSupport\":{\"valueSet\":[1,2]},\"labelDetailsSupport\":true},\"insertTextMode\":2,\"completionItemKind\":{\"valueSet\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},\"completionList\":{\"itemDefaults\":[\"commitCharacters\",\"editRange\",\"insertTextFormat\",\"insertTextMode\",\"data\"]}},\"hover\":{\"dynamicRegistration\":true,\"contentFormat\":[\"markdown\",\"plaintext\"]},\"signatureHelp\":{\"dynamicRegistration\":true,\"signatureInformation\":{\"documentationFormat\":[\"markdown\",\"plaintext\"],\"parameterInformation\":{\"labelOffsetSupport\":true},\"activeParameterSupport\":true},\"contextSupport\":true},\"definition\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"references\":{\"dynamicRegistration\":true},\"documentHighlight\":{\"dynamicRegistration\":true},\"documentSymbol\":{\"dynamicRegistration\":true,\"symbolKind\":{\"valueSet\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},\"hierarchicalDocumentSymbolSupport\":true,\"tagSupport\":{\"valueSet\":[1]},\"labelSupport\":true},\"codeAction\":{\"dynamicRegistration\":true,\"isPreferredSupport\":true,\"disabledSupport\":true,\"dataSupport\":true,\"resolveSupport\":{\"properties\":[\"edit\"]},\"codeActionLiteralSupport\":{\"codeActionKind\":{\"valueSet\":[\"\",\"quickfix\",\"refactor\",\"refactor.extract\",\"refactor.inline\",\"refactor.rewrite\",\"source\",\"source.organizeImports\"]}},\"honorsChangeAnnotations\":true},\"codeLens\":{\"dynamicRegistration\":true},\"formatting\":{\"dynamicRegistration\":true},\"rangeFormatting\":{\"dynamicRegistration\":true,\"rangesSupport\":true},\"onTypeFormatting\":{\"dynamicRegistration\":true},\"rename\":{\"dynamicRegistration\":true,\"prepareSupport\":true,\"prepareSupportDefaultBehavior\":1,\"honorsChangeAnnotations\":true},\"documentLink\":{\"dynamicRegistration\":true,\"tooltipSupport\":true},\"typeDefinition\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"implementation\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"colorProvider\":{\"dynamicRegistration\":true},\"foldingRange\":{\"dynamicRegistration\":true,\"rangeLimit\":5000,\"lineFoldingOnly\":true,\"foldingRangeKind\":{\"valueSet\":[\"comment\",\"imports\",\"region\"]},\"foldingRange\":{\"collapsedText\":false}},\"declaration\":{\"dynamicRegistration\":true,\"linkSupport\":true},\"selectionRange\":{\"dynamicRegistration\":true},\"callHierarchy\":{\"dynamicRegistration\":true},\"semanticTokens\":{\"dynamicRegistration\":true,\"tokenTypes\":[\"namespace\",\"type\",\"class\",\"enum\",\"interface\",\"struct\",\"typeParameter\",\"parameter\",\"variable\",\"property\",\"enumMember\",\"event\",\"function\",\"method\",\"macro\",\"keyword\",\"modifier\",\"comment\",\"string\",\"number\",\"regexp\",\"operator\",\"decorator\"],\"tokenModifiers\":[\"declaration\",\"definition\",\"readonly\",\"static\",\"deprecated\",\"abstract\",\"async\",\"modification\",\"documentation\",\"defaultLibrary\"],\"formats\":[\"relative\"],\"requests\":{\"range\":true,\"full\":{\"delta\":true}},\"multilineTokenSupport\":false,\"overlappingTokenSupport\":false,\"serverCancelSupport\":true,\"augmentsSyntaxTokens\":true},\"linkedEditingRange\":{\"dynamicRegistration\":true},\"typeHierarchy\":{\"dynamicRegistration\":true},\"inlineValue\":{\"dynamicRegistration\":true},\"inlayHint\":{\"dynamicRegistration\":true,\"resolveSupport\":{\"properties\":[\"tooltip\",\"textEdits\",\"label.tooltip\",\"label.location\",\"label.command\"]}},\"diagnostic\":{\"dynamicRegistration\":true,\"relatedDocumentSupport\":false}},\"window\":{\"showMessage\":{\"messageActionItem\":{\"additionalPropertiesSupport\":true}},\"showDocument\":{\"support\":true},\"workDoneProgress\":true},\"general\":{\"staleRequestSupport\":{\"cancel\":true,\"retryOnContentModified\":[\"textDocument/semanticTokens/full\",\"textDocument/semanticTokens/range\",\"textDocument/semanticTokens/full/delta\"]},\"regularExpressions\":{\"engine\":\"ECMAScript\",\"version\":\"ES2020\"},\"markdown\":{\"parser\":\"marked\",\"version\":\"1.1.0\"},\"positionEncodings\":[\"utf-16\"]},\"notebookDocument\":{\"synchronization\":{\"dynamicRegistration\":true,\"executionSummarySupport\":true}}},\"trace\":\"off\",\"workspaceFolders\":[{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example\",\"name\":\"example\"}]}}"
DBG Router: dispatching                        method=initialize id=0
DBG Initialize received...                    
DBG Registering monitor for process            pid=405818
DBG Router: sending response                   method=initialize id=0
TRC Router: response                           response="{\"capabilities\":{\"textDocumentSync\":{\"openClose\":true,\"change\":1,\"willSave\":false,\"willSaveWaitUntil\":false,\"save\":{\"includeText\":true}},\"completionProvider\":{\"resolveProvider\":false,\"triggerCharacters\":[\".\"]},\"hoverProvider\":true,\"signatureHelpProvider\":{\"triggerCharacters\":[\"(\",\",\"]},\"declarationProvider\":true,\"definitionProvider\":true,\"typeDefinitionProvider\":true,\"implementationProvider\":null,\"referencesProvider\":true,\"documentHighlightProvider\":true,\"documentSymbolProvider\":true,\"workspaceSymbolProvider\":true,\"codeActionProvider\":true,\"codeLensProvider\":null,\"documentLinkProvider\":null,\"colorProvider\":null,\"documentFormattingProvider\":null,\"documentRangeFormattingProvider\":null,\"documentOnTypeFormattingProvider\":null,\"renameProvider\":{\"prepareProvider\":true},\"executeCommandProvider\":{\"commands\":[\"nimlangserver.restart\",\"nimlangserver.recompile\",\"nimlangserver.checkProject\"]},\"inlayHintProvider\":{\"resolveProvider\":false},\"workspace\":{\"workspaceFolders\":{\"supported\":null,\"changeNotifications\":null}},\"experimental\":null}}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"initialized\",\"params\":{}}"
DBG Router: dispatching                        method=initialized id=null
DBG Client initialized.                       
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didOpen\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"languageId\":\"nim\",\"version\":1,\"text\":\"import src/example\\nimport src/test\\n\\nproc main(): string =\\n  return testFunc() & \\\" >> \\\" & exampleFunc()\\n\\n\\nwhen isMainModule:\\n  echo main()\"}}}"
DBG Router: dispatching                        method=textDocument/didOpen id=null
DBG New document opened for URI:               uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":null}"
DBG Got response for the didChangeConfiguration registration: res=null
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":2,\"result\":[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
DBG Received the following configuration       configuration="[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Document associated with the following projectFile uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim projectFile=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
INF Starting nimsuggest                        root=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim timeout=120000 path=nimsuggest fullPath=/home/rokku/.nimble/bin/nimsuggest workingDir=/home/rokku/development/hikami-repos/Assimilator/nim/example
TRC Sending notification                       notification=$/progress params="{\"token\":\"Creating nimsuggest for /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"begin\",\"title\":\"Creating nimsuggest for /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}}"
DBG Started nimsuggest                         port=40383 root=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
DBG ShowMessage                                message="Nimsuggest initialized for /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim"
TRC Sending notification                       notification=window/showMessage params="{\"type\":3,\"message\":\"Nimsuggest initialized for /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}"
DBG Running diagnostics                        uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"begin\",\"title\":\"Checking project /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}}"
DBG processQueue                               size=1
DBG Started...                                 benchmark="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
TRC Sending notification                       notification=$/progress params="{\"token\":\"Creating nimsuggest for /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"end\",\"title\":\"\"}}"
DBG Sending result(s)                          length=75 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.251 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Started...                                 benchmark="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"end\",\"title\":\"\"}}"
DBG Found diagnostics                          file={}
DBG Sending result(s)                          length=1 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.249 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/setTrace\",\"params\":{\"value\":\"off\"}}"
DBG Router: dispatching                        method=$/setTrace id=null
DBG setTrace                                   value=off
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/setTrace\",\"params\":{\"value\":\"off\"}}"
DBG Router: dispatching                        method=$/setTrace id=null
DBG setTrace                                   value=off
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/setTrace\",\"params\":{\"value\":\"off\"}}"
DBG Router: dispatching                        method=$/setTrace id=null
DBG setTrace                                   value=off
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/setTrace\",\"params\":{\"value\":\"off\"}}"
DBG Router: dispatching                        method=$/setTrace id=null
DBG setTrace                                   value=off
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":3,\"result\":null}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"textDocument/inlayHint\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":8,\"character\":13}}}}"
DBG Router: dispatching                        method=textDocument/inlayHint id=1
DBG inlayHint received...                     
DBG processQueue                               size=1
DBG Started...                                 benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints" command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG timeoutCallback is set                     timeout=120000 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=2
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=2
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"workspace/didChangeConfiguration\",\"params\":{\"settings\":null}}"
DBG Router: dispatching                        method=workspace/didChangeConfiguration id=null
DBG Changed configuration:                     conf="{\"settings\":null}"
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=3
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=4
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"workspace/didChangeConfiguration\",\"params\":{\"settings\":null}}"
DBG Router: dispatching                        method=workspace/didChangeConfiguration id=null
DBG Changed configuration:                     conf="{\"settings\":null}"
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"workspace/didChangeConfiguration\",\"params\":{\"settings\":null}}"
DBG Router: dispatching                        method=workspace/didChangeConfiguration id=null
DBG Changed configuration:                     conf="{\"settings\":null}"
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"workspace/didChangeConfiguration\",\"params\":{\"settings\":null}}"
DBG Router: dispatching                        method=workspace/didChangeConfiguration id=null
DBG Changed configuration:                     conf="{\"settings\":null}"
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":2}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=2
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":3}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=3
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":4,\"result\":null}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":5,\"result\":[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
DBG Received the following configuration       configuration="[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=3
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
DBG Router: sending response                   method=textDocument/codeAction id=4
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":6,\"result\":[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":7,\"result\":[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
DBG Received the following configuration       configuration="[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
DBG Received the following configuration       configuration="[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":8,\"result\":[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
DBG Received the following configuration       configuration="[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
DBG Sending result(s)                          length=0 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG CPU Time                                   benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints" time=0.075 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG Router: sending response                   method=textDocument/inlayHint id=1
TRC Router: response                           response=[]
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":5,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=5
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=5
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":5}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=5
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":6,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=6
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=6
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":7,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=7
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=7
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":7}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=7
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":6}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=6
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":8,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=8
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=8
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":9,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=9
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=9
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":10,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=10
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=10
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":8}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=8
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":9}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=9
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":10}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=10
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/setTrace\",\"params\":{\"value\":\"off\"}}"
DBG Router: dispatching                        method=$/setTrace id=null
DBG setTrace                                   value=off
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":11,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=11
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=11
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":12,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=12
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=12
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":13,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=13
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=13
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"workspace/didChangeConfiguration\",\"params\":{\"settings\":null}}"
DBG Router: dispatching                        method=workspace/didChangeConfiguration id=null
DBG Changed configuration:                     conf="{\"settings\":null}"
DBG Requesting configuration from the client  
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":11}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=11
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":12}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=12
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":13}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=13
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":9,\"result\":[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]}"
DBG Received the following configuration       configuration="[{\"project\":[],\"projectMapping\":[{\"projectFile\":\"main.nim\",\"fileRegex\":\".*\\\\.nim\"}],\"test-project\":\"\",\"buildOnSave\":false,\"buildCommand\":\"c\",\"runOutputDirectory\":\"\",\"lintOnSave\":true,\"enableNimsuggest\":false,\"provider\":\"lsp\",\"useNimsuggestCheck\":false,\"logNimsuggest\":true,\"licenseString\":\"\",\"nimsuggestRestartTimeout\":60,\"nimprettyIndent\":2,\"nimprettyMaxLineLen\":100,\"lsp\":{\"path\":\"\"},\"inlayHints\":{\"typeHints\":{\"enable\":true},\"exceptionHints\":{\"enable\":true,\"hintStringLeft\":\"🔔\",\"hintStringRight\":\"\"}},\"debug\":{\"type\":\"lldb\"},\"notificationVerbosity\":\"info\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":14,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=14
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=14
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":15,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=15
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=15
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":16,\"method\":\"textDocument/documentSymbol\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}}}"
DBG Router: dispatching                        method=textDocument/documentSymbol id=16
DBG processQueue                               size=1
DBG Started...                                 benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Sending result(s)                          length=1 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.059 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Router: sending response                   method=textDocument/documentSymbol id=16
TRC Router: response                           response="[{\"name\":\"main\",\"kind\":12,\"deprecated\":null,\"location\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"range\":{\"start\":{\"line\":3,\"character\":5},\"end\":{\"line\":3,\"character\":9}}},\"containerName\":null}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":17,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=17
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=17
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didOpen\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\",\"languageId\":\"nim\",\"version\":1,\"text\":\"proc exampleFunc*(): string =\\n  return \\\"return from exampleFunc\\\"\"}}}"
DBG Router: dispatching                        method=textDocument/didOpen id=null
DBG New document opened for URI:               uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim matchedRegex=".*\\.nim"
DBG Document associated with the following projectFile uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim projectFile=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
DBG processQueue                               size=1
DBG Started...                                 benchmark="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0" command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":18,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":0,\"character\":0}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=18
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=18
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":19,\"method\":\"textDocument/documentSymbol\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\"}}}"
DBG Router: dispatching                        method=textDocument/documentSymbol id=19
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":20,\"method\":\"textDocument/inlayHint\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":1,\"character\":34}}}}"
DBG Router: dispatching                        method=textDocument/inlayHint id=20
DBG inlayHint received...                     
DBG Sending result(s)                          length=1 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
DBG CPU Time                                   benchmark="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0" time=0.199 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
DBG Started...                                 benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0" command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":21,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":17},\"end\":{\"line\":0,\"character\":17}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=21
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=21
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
DBG Sending result(s)                          length=1 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
DBG CPU Time                                   benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0" time=0.250 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":0:0"
DBG Started...                                 benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":1:0:2:34 +exceptionHints +parameterHints" command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":1:0:2:34 +exceptionHints +parameterHints"
DBG timeoutCallback is set                     timeout=120000 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":1:0:2:34 +exceptionHints +parameterHints"
DBG Router: sending response                   method=textDocument/documentSymbol id=19
TRC Router: response                           response="[{\"name\":\"exampleFunc\",\"kind\":12,\"deprecated\":null,\"location\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\",\"range\":{\"start\":{\"line\":0,\"character\":5},\"end\":{\"line\":0,\"character\":16}}},\"containerName\":null}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":20}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=20
DBG Future cancelled.                          id=20
DBG Future cancelled, throwing...              id=20
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didOpen\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\",\"languageId\":\"nim\",\"version\":1,\"text\":\"proc testFunc*(): string =\\n  return \\\"return from testFunc\\\"\"}}}"
DBG Router: dispatching                        method=textDocument/didOpen id=null
DBG New document opened for URI:               uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim matchedRegex=".*\\.nim"
DBG Document associated with the following projectFile uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim projectFile=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":22,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":0,\"character\":0}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=22
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=22
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":23,\"method\":\"textDocument/documentSymbol\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\"}}}"
DBG Router: dispatching                        method=textDocument/documentSymbol id=23
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":24,\"method\":\"textDocument/inlayHint\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":1,\"character\":31}}}}"
DBG Router: dispatching                        method=textDocument/inlayHint id=24
DBG inlayHint received...                     
DBG Call was cancelled before sending the result command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":1:0:2:34 +exceptionHints +parameterHints"
DBG CPU Time                                   benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":1:0:2:34 +exceptionHints +parameterHints" time=0.250 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/example.nim\":1:0:2:34 +exceptionHints +parameterHints"
DBG Started...                                 benchmark="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0" command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":25,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":14},\"end\":{\"line\":0,\"character\":14}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=25
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=25
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
DBG Sending result(s)                          length=1 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
DBG CPU Time                                   benchmark="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0" time=0.250 command="known \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
DBG Started...                                 benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0" command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":24}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=24
DBG Future cancelled.                          id=24
DBG Future cancelled, throwing...              id=24
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":23}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=23
DBG Future cancelled.                          id=23
DBG Future cancelled, throwing...              id=23
DBG Call was cancelled before sending the result command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
DBG CPU Time                                   benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0" time=0.250 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":0:0"
DBG Call cancelled before executed             command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/src/test.nim\":1:0:2:31 +exceptionHints +parameterHints"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":26,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":0,\"character\":0}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=26
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=26
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":27,\"method\":\"textDocument/inlayHint\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":8,\"character\":13}}}}"
DBG Router: dispatching                        method=textDocument/inlayHint id=27
DBG inlayHint received...                     
DBG processQueue                               size=1
DBG Started...                                 benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints" command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG timeoutCallback is set                     timeout=120000 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":28,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":44},\"end\":{\"line\":4,\"character\":44}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=28
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=28
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
DBG Sending result(s)                          length=0 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG CPU Time                                   benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints" time=0.236 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG Router: sending response                   method=textDocument/inlayHint id=27
TRC Router: response                           response=[]
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":29,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":8,\"character\":13},\"end\":{\"line\":8,\"character\":13}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=29
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=29
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":30,\"method\":\"textDocument/hover\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"position\":{\"line\":4,\"character\":23}}}"
DBG Router: dispatching                        method=textDocument/hover id=30
DBG processQueue                               size=1
DBG Started...                                 benchmark="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:23" command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:23"
DBG timeoutCallback is set                     timeout=120000 command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:23"
DBG Sending result(s)                          length=0 command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:23"
DBG CPU Time                                   benchmark="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:23" time=0.014 command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:23"
DBG Router: sending response                   method=textDocument/hover id=30
TRC Router: response                           response=null
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":31,\"method\":\"textDocument/hover\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"position\":{\"line\":4,\"character\":24}}}"
DBG Router: dispatching                        method=textDocument/hover id=31
DBG processQueue                               size=1
DBG Started...                                 benchmark="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:24" command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:24"
DBG timeoutCallback is set                     timeout=120000 command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:24"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"$/cancelRequest\",\"params\":{\"id\":31}}"
DBG Router: dispatching                        method=$/cancelRequest id=null
DBG Cancelling:                                id=31
DBG Future cancelled.                          id=31
DBG Future cancelled, throwing...              id=31
DBG Call was cancelled before sending the result command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:24"
DBG CPU Time                                   benchmark="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:24" time=0.249 command="def \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":5:24"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":32,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":25},\"end\":{\"line\":4,\"character\":25}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=32
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=32
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didChange\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"version\":2},\"contentChanges\":[{\"text\":\"import src/example\\nimport src/test\\n\\nproc main(): string =\\n  return testFunc() & \\\" > > \\\" & exampleFunc()\\n\\n\\nwhen isMainModule:\\n  echo main()\"}]}}"
DBG Router: dispatching                        method=textDocument/didChange id=null
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":33,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":4,\"character\":26},\"end\":{\"line\":4,\"character\":26}},\"context\":{\"diagnostics\":[],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=33
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=33
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":34,\"method\":\"textDocument/documentSymbol\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}}}"
DBG Router: dispatching                        method=textDocument/documentSymbol id=34
DBG processQueue                               size=1
DBG Started...                                 benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\";\"/tmp/nimlangserver/000000003EC25480.nim\":0:0" command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\";\"/tmp/nimlangserver/000000003EC25480.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\";\"/tmp/nimlangserver/000000003EC25480.nim\":0:0"
DBG Sending result(s)                          length=1 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\";\"/tmp/nimlangserver/000000003EC25480.nim\":0:0"
DBG CPU Time                                   benchmark="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\";\"/tmp/nimlangserver/000000003EC25480.nim\":0:0" time=0.203 command="outline \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\";\"/tmp/nimlangserver/000000003EC25480.nim\":0:0"
DBG Router: sending response                   method=textDocument/documentSymbol id=34
TRC Router: response                           response="[{\"name\":\"main\",\"kind\":12,\"deprecated\":null,\"location\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"range\":{\"start\":{\"line\":3,\"character\":5},\"end\":{\"line\":3,\"character\":9}}},\"containerName\":null}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didSave\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"text\":\"import src/example\\nimport src/test\\n\\nproc main(): string =\\n  return testFunc() & \\\" > > \\\" & exampleFunc()\\n\\n\\nwhen isMainModule:\\n  echo main()\"}}"
DBG Router: dispatching                        method=textDocument/didSave id=null
DBG processQueue                               size=1
DBG Started...                                 benchmark="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Checking project                           uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
DBG Running diagnostics                        uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"begin\",\"title\":\"Checking project /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":10,\"result\":null}"
DBG Sending result(s)                          length=0 command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.203 command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Started...                                 benchmark="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":35,\"method\":\"textDocument/inlayHint\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":8,\"character\":13}}}}"
DBG Router: dispatching                        method=textDocument/inlayHint id=35
DBG inlayHint received...                     
DBG Sending result(s)                          length=77 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.261 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Started...                                 benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints" command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG timeoutCallback is set                     timeout=120000 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"end\",\"title\":\"\"}}"
DBG Found diagnostics                          file={}
DBG Sending result(s)                          length=0 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG CPU Time                                   benchmark="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints" time=0.249 command="inlayHints \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":1:0:9:13 +exceptionHints +parameterHints"
DBG Router: sending response                   method=textDocument/inlayHint id=35
TRC Router: response                           response=[]
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":36,\"method\":\"textDocument/codeAction\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"range\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":8,\"character\":13}},\"context\":{\"diagnostics\":[],\"only\":[\"source.organizeImports\"],\"triggerKind\":2}}}"
DBG Router: dispatching                        method=textDocument/codeAction id=36
TRC getProjectFile                             project=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim uri=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim matchedRegex=".*\\.nim"
DBG Router: sending response                   method=textDocument/codeAction id=36
TRC Router: response                           response="[{\"command\":{\"title\":\"Clean build\",\"command\":\"nimlangserver.recompile\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Clean build\",\"kind\":\"source\"},{\"command\":{\"title\":\"Refresh project errors\",\"command\":\"nimlangserver.checkProject\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Refresh project errors\",\"kind\":\"source\"},{\"command\":{\"title\":\"Restart nimsuggest\",\"command\":\"nimlangserver.restart\",\"arguments\":[\"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"]},\"title\":\"Restart nimsuggest\",\"kind\":\"source\"}]"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"method\":\"textDocument/didSave\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"},\"text\":\"import src/example\\nimport src/test\\n\\nproc main(): string =\\n  return testFunc() & \\\" > > \\\" & exampleFunc()\\n\\n\\nwhen isMainModule:\\n  echo main()\"}}"
DBG Router: dispatching                        method=textDocument/didSave id=null
DBG processQueue                               size=1
DBG Started...                                 benchmark="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Checking project                           uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
DBG Running diagnostics                        uri=file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"begin\",\"title\":\"Checking project /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\"}}"
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":11,\"result\":null}"
DBG Sending result(s)                          length=0 command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.186 command="changed \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Started...                                 benchmark="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG timeoutCallback is set                     timeout=120000 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG Sending result(s)                          length=77 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
DBG CPU Time                                   benchmark="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0" time=0.251 command="chk \"/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\":0:0"
TRC Sending notification                       notification=$/progress params="{\"token\":\"Checking file:///home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim\",\"value\":{\"kind\":\"end\",\"title\":\"\"}}"
DBG Found diagnostics                          file={}
TRC Received message                           message="{\"jsonrpc\":\"2.0\",\"id\":37,\"method\":\"shutdown\"}"
DBG Router: dispatching                        method=shutdown id=37
DBG Shutting down                             
DBG stopping child nimsuggest processes       
DBG Stopping nimsuggest for                    root=/home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim

ps auxw

rokku     405886  0.2  0.0 220852 13896 ?        Sl   06:52   0:00 /home/rokku/.nimble/pkgs2/nimlangserver-1.2.0-95de85fae4485dcd850ada31e200d15671a00c4a/nimlangserver --stdio
rokku     405899  0.0  0.0      0     0 ?        Z    06:52   0:00 [nimsuggest] <defunct>
rokku     405902  0.3  0.0  41500 33356 ?        Sl   06:52   0:00 /home/rokku/.choosenim/toolchains/nim-2.0.2/bin/nimsuggest /home/rokku/development/hikami-repos/Assimilator/nim/example/main.nim --v4 --autobind --clientProcessId:405886 --log

pstree

pstree -a 405886
nimlangserver --stdio
  ├─(nimsuggest)
  └─{nimlangserver}

strace -p 405902 (nimsuggest on main.nim)

❯ sudo strace -p 405902
strace: Process 405902 attached
restart_syscall(<... resuming interrupted read ...>) = 0
nanosleep({tv_sec=0, tv_nsec=250000000}, 0x7fff9f0f7930) = 0
nanosleep({tv_sec=0, tv_nsec=250000000}, 0x7fff9f0f7930) = 0
nanosleep({tv_sec=0, tv_nsec=250000000}, 0x7fff9f0f7930) = 0
nanosleep({tv_sec=0, tv_nsec=250000000}, 0x7fff9f0f7930) = 0
nanosleep({tv_sec=0, tv_nsec=250000000}, 0x7fff9f0f7930) = 0
nanosleep({tv_sec=0, tv_nsec=250000000}, ^Cstrace: Process 405902 detached
 <detached ...>

Status on nimsuggest

❯ cat /proc/405902/status
Name:   nimsuggest
Umask:  0022
State:  S (sleeping)
Tgid:   405902
Ngid:   0
Pid:    405902
PPid:   1336
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    985     985     985     985
FDSize: 128
Groups: 108 970 985 991 993 998 
NStgid: 405902
NSpid:  405902
NSpgid: 405701
NSsid:  405701
Kthread:        0
VmPeak:    41504 kB
VmSize:    41500 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:     33356 kB
VmRSS:     33356 kB
RssAnon:           30412 kB
RssFile:            2944 kB
RssShmem:              0 kB
VmData:    37492 kB
VmStk:       136 kB
VmExe:      3828 kB
VmLib:         8 kB
VmPTE:       120 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
THP_enabled:    1
untag_mask:     0xffffffffffffffff
Threads:        3
SigQ:   1/256667
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 00000000000004aa
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Seccomp_filters:        0
Speculation_Store_Bypass:       thread vulnerable
SpeculationIndirectBranch:      conditional enabled
Cpus_allowed:   ffffffff
Cpus_allowed_list:      0-31
Mems_allowed:   00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        720
nonvoluntary_ctxt_switches:     66
x86_Thread_features:
x86_Thread_features_locked:

This is the nimsuggest zombie

cat /proc/405899/status
Name:   nimsuggest
State:  Z (zombie)
Tgid:   405899
Ngid:   0
Pid:    405899
PPid:   405886
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    985     985     985     985
FDSize: 0
Groups: 108 970 985 991 993 998 
NStgid: 405899
NSpid:  405899
NSpgid: 405701
NSsid:  405701
Kthread:        0
Threads:        1
SigQ:   1/256667
SigPnd: 0000000000000000
ShdPnd: 0000000000000100
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 00000000000004aa
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Seccomp_filters:        0
Speculation_Store_Bypass:       thread vulnerable
SpeculationIndirectBranch:      conditional enabled
Cpus_allowed:   ffffffff
Cpus_allowed_list:      0-31
Mems_allowed:   00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        3
nonvoluntary_ctxt_switches:     0
x86_Thread_features:
x86_Thread_features_locked:

This is the status of the nimlangserver

❯ cat /proc/405886/status
Name:   nimlangserver
Umask:  0022
State:  S (sleeping)
Tgid:   405886
Ngid:   0
Pid:    405886
PPid:   1336
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    985     985     985     985
FDSize: 128
Groups: 108 970 985 991 993 998 
NStgid: 405886
NSpid:  405886
NSpgid: 405701
NSsid:  405701
Kthread:        0
VmPeak:   276396 kB
VmSize:   220852 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:     13896 kB
VmRSS:     13896 kB
RssAnon:            8872 kB
RssFile:            5024 kB
RssShmem:              0 kB
VmData:    17864 kB
VmStk:       136 kB
VmExe:      2516 kB
VmLib:      2424 kB
VmPTE:       104 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
THP_enabled:    1
untag_mask:     0xffffffffffffffff
Threads:        2
SigQ:   1/256667
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 00000001000054af
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Seccomp_filters:        0
Speculation_Store_Bypass:       thread vulnerable
SpeculationIndirectBranch:      conditional enabled
Cpus_allowed:   ffffffff
Cpus_allowed_list:      0-31
Mems_allowed:   00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        114
nonvoluntary_ctxt_switches:     40
x86_Thread_features:
x86_Thread_features_locked:

@RokkuCode
Copy link

The nim project i use is a simple hello world projekt with 3 files: src/example.nim src/test.nim and main.nim. The settings.json of vscode is:

{
    "nim.projectMapping": [
        {
            "projectFile": "main.nim",
            "fileRegex": ".*\\.nim"
        }
    ],
}

@nickysn
Copy link
Collaborator

nickysn commented Feb 28, 2024

I think I found out what's causing this mysterious issue. It appears that the problem is being caused by choosenim. I'm not using choosenim and I don't have this problem. Can you try without choosenim to confirm?

@arkanoid87
Copy link
Author

you mean to use nimsuggest in PATH without choosenim shims?

@nickysn
Copy link
Collaborator

nickysn commented Feb 28, 2024

you mean to use nimsuggest in PATH without choosenim shims?

Yes, that's one way to test it without uninstalling choosenim completely.

@arkanoid87
Copy link
Author

I think you nailed it!

problem present:
$ code .

problem absent:
$ PATH=/home/arkanoid/Downloads/nim-2.0.2-linux_x64/nim-2.0.2/bin/:$PATH code .

@arkanoid87
Copy link
Author

arkanoid87 commented Feb 29, 2024

it is possible to reproduce this issue excluding nimlangserver and vscode extension completely
I'm baffled that I went so deep into the rabbit hole before realizing this.

from terminal with choosenim shims (nim 2.0.2)

$ md5sum "$(which nimsuggest)"
9d2c46b8ea6cc1288e959053b734d749  /home/arkanoid/.nimble/bin//nimsuggest
$ echo 'echo "Hello, World!"' > main.nim
$ nimsuggest main.nim

from other terminal

$ ps -fC nimsuggest
UID          PID    PPID  C STIME TTY          TIME CMD
arkanoid     1156404  488153  0 18:39 pts/8    00:00:00 nimsuggest main.nim
arkanoid     1156405 1156404  0 18:39 pts/8    00:00:00 /home/arkanoid/.choosenim/toolchains/nim-2.0.2/bin/nimsuggest main.nim
$ kill -TERM 1156404
$ ps -fC nimsuggest
UID          PID    PPID  C STIME TTY          TIME CMD
arkanoid     1156405    2412  0 18:39 pts/8    00:00:00 /home/arkanoid/.choosenim/toolchains/nim-2.0.2/bin/nimsuggest main.nim

sending SIGKILL or SIGINT instead of SIGTERM makes no difference

using nimsuggest directly without choosenim shims works as intended

EDIT:

there are quite some interesting differences between running and killing choosenim proxy manually and closing vscode

manual running choosenim proxy
killing proxy makes child nimsuggest process reparent and stay sleep

vscode
before close

$ ps -fC nimsuggest
UID          PID    PPID  C STIME TTY          TIME CMD
arkanoid     1162029 1162023  0 20:14 ?        00:00:00 nimsuggest /home/arkanoid/nim/nimsuggest_problem/main.nim --v4 --autobind --clientProcessId:1162023
arkanoid     1162032 1162029  0 20:14 ?        00:00:00 /home/arkanoid/.choosenim/toolchains/nim-2.0.2/bin/nimsuggest /home/arkanoid/nim/nimsuggest_problem/main.nim --v4 --autobind --clientProcessId:1162023

$ pstree -a -p 1162023
nimlangserver,1162023 --stdio
  ├─nimsuggest,1162029 /home/arkanoid/nim/nimsuggest_problem/main.nim --v4 --autobind --clientProcessId:1162023
  │   └─nimsuggest,1162032 /home/arkanoid/nim/nimsuggest_problem/main.nim --v4 --autobind --clientProcessId:1162023
  │       ├─{nimsuggest},1162051
  │       └─{nimsuggest},1162052
  ├─{nimlangserver},1162024
  └─{nimlangserver},1162031

after close

$ ps -fC nimsuggest
UID          PID    PPID  C STIME TTY          TIME CMD
arkanoid     1162029 1162023  0 20:14 ?        00:00:00 [nimsuggest] <defunct>
arkanoid     1162032    2412  0 20:14 ?        00:00:00 /home/arkanoid/.choosenim/toolchains/nim-2.0.2/bin/nimsuggest /home/arkanoid/nim/nimsuggest_problem/main.nim --v4 --autobind --clientProcessId:1162023

$ pstree -a -p 1162023
nimlangserver,1162023 --stdio
  ├─(nimsuggest,1162029)
  └─{nimlangserver},1162031

@arkanoid87 arkanoid87 changed the title Nimlangsever + nimsuggest processes non being killed Nimlangsever + nimsuggest processes non being killed when using choosenim Mar 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants