No definition found for
milesfrain opened this issue · 16 comments
I'm having issues with unreliable [F12] - go to definition
behavior. I tried various rebuilds and IDE restarts with no success.
In one of my projects:
F12
on functions from spago-installed modules produces aNo definition found for ...
error.F12
on functions from local modules works.- "Hover for definition" and autocomplete work for all functions.
In another project:
F12
works on functions from both local and spago-installed modules.
I believe each project is configured similarly. I could go down a troubleshooting path of bisecting differences between each project, but would rather troubleshoot this more directly.
Is there a dev guide with workflow tips to help me get to the root of this problem quickly?
Edit: Found dev guide in language-server
repo. Perhaps this should be linked to from this repo: https://github.com/nwolverson/purescript-language-server/blob/master/README.md#development
Did you set the addSpagoSources
setting in both cases? That's what lets the language server know about the location of spago installed dependencies.
Yes, that setting is enabled in both cases (set globally via user settings).
Interestingly, the previously-broken project now works. Only difference I can think of is that my machine was suspended overnight.
But it would be great to gain some more insight into what leads to these No definition found
errors because this happens fairly regularly, and right now it just seems like random chance whether I'll have all IDE features working on any given day.
I also notice lots of purs ide server
processes running even after all vscode instances are shut down. Not sure if that's related.
Go to definition is linked to the source file globs that purs ide server
is started with, so any installed packages after starting the server etc will not be picked up - you can see if the command line is correct on the running instance.
Lots of servers running sounds bad - are you on windows by any chance? A close command is issued on shutdown but these should otherwise exit by virtue of their parent going away
are you on windows by any chance?
Ubuntu 20.04
so any installed packages after starting the server etc will not be picked up
But restarting the server within vscode should refresh things, right?
you can see if the command line is correct on the running instance.
I'll report back with logs from Output / IDE PureScript
when I encounter this problem again.
But restarting the server within vscode should refresh things, right?
Yes, the restart IDE server command should refresh goto-def and friends after installing new packages
If you're able to reproduce stale purs ide server
instances and create an issue for that with requisite detail, would also be appreciated, there may be either something in your setup or the way the editor closed/project closed/reloaded/whatever that is leading to the behaviour
Finally figured out how to reproduce this issue!
The summary is:
- Clone project
- Open in vscode - F12 works fine
- Close and reopen project - F12 now broken
Here are the specific steps to reproduce:
git clone https://github.com/milesfrain/tps-save-gist.git
cd tps-save-gist
spago build
code .
open src/Main.purs
move cursor on to runHalogenAff
F12
- success!
purs ide
process correctly points to spago paths
pgrep purs | xargs ps -ww
PID TTY STAT TIME COMMAND
24518 ? Sl 0:14 /home/miles/.local/bin/purs ide server -p 15847 --editor-mode src/**/*.purs .spago/ace/master/src/**/*.purs .spago/aff/v5.1.2/src/**/*.purs ...
Close vscode
No dangling purs ide
processes:
pgrep purs # shows nothing. Indicates successful exit.
Reopen vscode
code .
open src/Main.purs
move cursor on to runHalogenAff
F12
- failure!
purs ide
uses bower paths now :(
pgrep purs | xargs ps -ww
PID TTY STAT TIME COMMAND
24980 ? Sl 0:08 /home/miles/.local/bin/purs ide server -p 15557 src/**/*.purs bower_components/**/*.purs
Close vscode
purs ide
processes still running
pgrep purs
24980
Those steps do not reproduce the issue for me. Is the parent of that purs still running? (check its ppid)
If you can reproduce the "purs ide with wrong paths" issue, please include the output window messages - it looks like for some reason the vscode config is not applied
Processes and parents.
Initial state, no purs
processes running.
pgrep purs | xargs ps -f -ww
Setup:
git clone https://github.com/milesfrain/tps-save-gist.git p1
cd p1
spago build
code .
Logs in vscode.
Initial working state.
Launching new language client for file:///home/miles/temp/tt/p1
PureScript Language Server started
[Info - 10:18:19 AM] {"processId":55075,"clientInfo":{"name":"vscode","version":"1.45.1"},"rootPath":"/home/miles/temp/tt/p1","rootUri":"file:///home/miles/temp/tt/p1","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional"},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":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]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]}},"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]}},"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]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":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},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":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},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["comment","keyword","number","regexp","operator","namespace","type","struct","class","interface","enum","typeParameter","function","member","macro","variable","parameter","property","label"],"tokenModifiers":["declaration","documentation","static","abstract","deprecated","async","readonly"]}},"window":{"workDoneProgress":true}},"initializationOptions":{"executeCommandProvider":false},"trace":"off","workspaceFolders":[{"uri":"file:///home/miles/temp/tt/p1","name":"p1"}]}
Starting with args: ["/usr/share/code/code","/home/miles/.vscode/extensions/nwolverson.ide-purescript-0.21.1/node_modules/purescript-language-server/server.js","--node-ipc","--clientProcessId=55075"]
Starting with cwd: /home/miles/temp/tt/p1 and using root path: /home/miles/temp/tt/p1
Activated lc for file:///home/miles/temp/tt/p1
Got updated settings (client push)
[Info - 10:18:19 AM] Starting IDE server
[Info - 10:18:19 AM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 10:18:19 AM] Resolved IDE server paths (npm-bin: true) from PATH of /home/miles/temp/tt/p1/node_modules/.bin:/home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 10:18:19 AM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 10:18:19 AM] Starting IDE server on port 15732 with cwd /home/miles/temp/tt/p1
Started IDE server (port 15732)
[Info - 10:18:21 AM] The --editor-mode flag is deprecated and ignored. It's now the default behaviour and the flag will be removed in a future version
[Info] cachedb was changed from: Nothing, to: Just 2020-07-22 17:18:07.213930898 UTC @(main:Command.Ide app/Command/Ide.hs:205:25)
[Info - 10:18:22 AM] [Warn] Failed to resolve reexports for Type.Data.BooleanPrim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "False"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "True"}) (Just [])Prim.BooleanKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "Boolean"})
[Warn] Failed to resolve reexports for Type.Data.OrderingPrim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "EQ"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "GT"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "LT"}) (Just [])Prim.OrderingKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "Ordering"})
[Warn] Failed to resolve reexports for Type.Data.SymbolPrim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Append"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Compare"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Cons"})
[Warn] Failed to resolve reexports for Type.PreludePrim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "EQ"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "False"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "GT"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "LT"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "True"}) (Just [])Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Append"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Compare"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Lacks"})Prim.RowListTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "RowToList"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Union"})Prim.BooleanKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Boolean"})Prim.OrderingKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Ordering"})
[Warn] Failed to resolve reexports for Type.RowPrim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Cons"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Lacks"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Nub"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Union"})
[Info - 10:18:22 AM] [Warn] Failed to resolve reexports for Type.RowListPrim.RowListTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "Cons"}) (Just [])Prim.RowListTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "Nil"}) (Just [])Prim.RowListTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "RowToList"})Prim.RowListKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "RowList"})
Processes and parents.
Working state (initial launch), two purs
processes running.
➜ p1 git:(master) pgrep purs | xargs ps -f -ww
UID PID PPID C STIME TTY STAT TIME CMD
miles 54730 2796 9 10:16 ? Sl 0:14 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15736 src/**/*.purs bower_components/**/*.purs
miles 55494 55439 25 10:18 ? Sl 0:09 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15732 --editor-mode src/**/*.purs .spago/ace/master/src/**/*.purs .spago/aff/v5.1.2/src/**/*.purs ...
➜ p1 git:(master) ps -f -ww 2796
UID PID PPID C STIME TTY STAT TIME CMD
miles 2796 1 0 Jul21 ? Ss 0:01 /lib/systemd/systemd --user
➜ p1 git:(master) ps -f -ww 55439
UID PID PPID C STIME TTY STAT TIME CMD
miles 55439 55075 0 10:18 ? Sl 0:00 /usr/share/code/code /home/miles/.vscode/extensions/nwolverson.ide-purescript-0.21.1/node_modules/purescript-language-server/server.js --node-ipc --clientProcessId=55075
Shutdown vscode.
Processes and parents.
After initial working state, one purs
process running.
➜ p1 git:(master) pgrep purs | xargs ps -f -ww
UID PID PPID C STIME TTY STAT TIME CMD
miles 54730 2796 5 10:16 ? Sl 0:14 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15736 src/**/*.purs bower_components/**/*.purs
➜ p1 git:(master) ps -f -ww 2796
UID PID PPID C STIME TTY STAT TIME CMD
miles 2796 1 0 Jul21 ? Ss 0:01 /lib/systemd/systemd --user
Second vscode launch
Logs in vscode.
Broken state.
(Compare in diff viewer - I like meld
)
Launching new language client for file:///home/miles/temp/tt/p1
PureScript Language Server started
[Info - 10:22:05 AM] {"processId":55843,"clientInfo":{"name":"vscode","version":"1.45.1"},"rootPath":"/home/miles/temp/tt/p1","rootUri":"file:///home/miles/temp/tt/p1","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional"},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":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]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]}},"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]}},"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]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":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},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":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},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["comment","keyword","number","regexp","operator","namespace","type","struct","class","interface","enum","typeParameter","function","member","macro","variable","parameter","property","label"],"tokenModifiers":["declaration","documentation","static","abstract","deprecated","async","readonly"]}},"window":{"workDoneProgress":true}},"initializationOptions":{"executeCommandProvider":false},"trace":"off","workspaceFolders":[{"uri":"file:///home/miles/temp/tt/p1","name":"p1"}]}
Starting with args: ["/usr/share/code/code","/home/miles/.vscode/extensions/nwolverson.ide-purescript-0.21.1/node_modules/purescript-language-server/server.js","--node-ipc","--clientProcessId=55843"]
Starting with cwd: /home/miles/temp/tt/p1 and using root path: /home/miles/temp/tt/p1
Activated lc for file:///home/miles/temp/tt/p1
Got updated settings (client push)
[Info - 10:22:06 AM] Starting IDE server
[Info - 10:22:06 AM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
Got updated settings (by request)
[Info - 10:22:06 AM] Starting IDE server
[Info - 10:22:06 AM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 10:22:06 AM] Resolved IDE server paths (npm-bin: false) from PATH of /home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 10:22:06 AM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 10:22:06 AM] Starting IDE server on port 15762 with cwd /home/miles/temp/tt/p1
Started IDE server (port 15762)
[Info - 10:22:07 AM] Resolved IDE server paths (npm-bin: true) from PATH of /home/miles/temp/tt/p1/node_modules/.bin:/home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 10:22:07 AM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 10:22:09 AM] [Info] cachedb was changed from: Nothing, to: Just 2020-07-22 17:18:07.213930898 UTC @(main:Command.Ide app/Command/Ide.hs:205:25)
[Info - 10:22:09 AM] Found existing port from file: 15762, cwd: /home/miles/temp/tt/p1
[Info - 10:22:09 AM] Found IDE server on port 15762 with correct path: /home/miles/temp/tt/p1
[Info - 10:22:09 AM] Found existing IDE server with correct path on port 15762
[Info - 10:22:10 AM] [Warn] Failed to resolve reexports for Type.Data.BooleanPrim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "False"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "True"}) (Just [])Prim.BooleanKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "Boolean"})
[Warn] Failed to resolve reexports for Type.Data.OrderingPrim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "EQ"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "GT"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "LT"}) (Just [])Prim.OrderingKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "Ordering"})
[Warn] Failed to resolve reexports for Type.Data.SymbolPrim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Append"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Compare"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Cons"})
[Warn] Failed to resolve reexports for Type.PreludePrim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "EQ"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "False"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "GT"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "LT"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "True"}) (Just [])Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Append"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Compare"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Lacks"})Prim.RowListTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "RowToList"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Union"})Prim.BooleanKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Boolean"})Prim.OrderingKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Ordering"})
[Warn] Failed to resolve reexports for Type.RowPrim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Cons"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Lacks"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Nub"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Union"})
[Info - 10:22:10 AM] [Warn] Failed to resolve reexports for Type.RowListPrim.RowListTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "Cons"}) (Just [])Prim.RowListTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "Nil"}) (Just [])Prim.RowListTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "RowToList"})Prim.RowListKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "RowList"})
[Info - 10:22:11 AM] [Warn] Failed to resolve reexports for Type.Data.BooleanPrim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "False"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "True"}) (Just [])Prim.BooleanKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Boolean.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 77, sourcePosColumn = 18}}) (ProperName {runProperName = "Boolean"})
[Warn] Failed to resolve reexports for Type.Data.OrderingPrim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "EQ"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "GT"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "LT"}) (Just [])Prim.OrderingKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Ordering.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 76, sourcePosColumn = 20}}) (ProperName {runProperName = "Ordering"})
[Warn] Failed to resolve reexports for Type.Data.SymbolPrim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Append"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Compare"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Data/Symbol.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 37, sourcePosColumn = 20}}) (ProperName {runProperName = "Cons"})
[Warn] Failed to resolve reexports for Type.PreludePrim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "EQ"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "False"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "GT"}) (Just [])Prim.OrderingTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "LT"}) (Just [])Prim.BooleanTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "True"}) (Just [])Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Append"})Prim.SymbolTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Compare"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Lacks"})Prim.RowListTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "RowToList"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Union"})Prim.BooleanKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Boolean"})Prim.OrderingKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Prelude.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 17, sourcePosColumn = 68}}) (ProperName {runProperName = "Ordering"})
[Warn] Failed to resolve reexports for Type.RowPrim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Cons"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Lacks"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Nub"})Prim.RowTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/Row.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 23, sourcePosColumn = 28}}) (ProperName {runProperName = "Union"})
[Info - 10:22:16 AM] [Warn] Failed to resolve reexports for Type.RowListPrim.RowListTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "Cons"}) (Just [])Prim.RowListTypeRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "Nil"}) (Just [])Prim.RowListTypeClassRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "RowToList"})Prim.RowListKindRef (SourceSpan {spanName = ".spago/typelevel-prelude/v5.0.2/src/Type/RowList.purs", spanStart = SourcePos {sourcePosLine = 1, sourcePosColumn = 1}, spanEnd = SourcePos {sourcePosLine = 94, sourcePosColumn = 50}}) (ProperName {runProperName = "RowList"})
Processes and parents.
Broken state (2nd launch), two purs
processes running.
➜ p1 git:(master) pgrep purs | xargs ps -f -ww
UID PID PPID C STIME TTY STAT TIME CMD
miles 54730 2796 3 10:16 ? Sl 0:14 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15736 src/**/*.purs bower_components/**/*.purs
miles 56003 55929 30 10:22 ? Sl 0:12 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15762 src/**/*.purs bower_components/**/*.purs
➜ p1 git:(master) ps -f -ww 2796
UID PID PPID C STIME TTY STAT TIME CMD
miles 2796 1 0 Jul21 ? Ss 0:01 /lib/systemd/systemd --user
➜ p1 git:(master) ps -f -ww 55929
UID PID PPID C STIME TTY STAT TIME CMD
miles 55929 55843 0 10:22 ? Sl 0:00 /usr/share/code/code /home/miles/.vscode/extensions/nwolverson.ide-purescript-0.21.1/node_modules/purescript-language-server/server.js --node-ipc --clientProcessId=55843
Shutdown vscode
Processes and parents.
After broken state, purs
process still running.
➜ p1 git:(master) pgrep purs | xargs ps -f -ww
UID PID PPID C STIME TTY STAT TIME CMD
miles 54730 2796 3 10:16 ? Sl 0:14 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15736 src/**/*.purs bower_components/**/*.purs
miles 56003 2796 12 10:22 ? Sl 0:12 /home/miles/.nvm/versions/node/v13.12.0/bin/purs ide server -p 15762 src/**/*.purs bower_components/**/*.purs
➜ p1 git:(master) ps -f -ww 2796
UID PID PPID C STIME TTY STAT TIME CMD
miles 2796 1 0 Jul21 ? Ss 0:01 /lib/systemd/systemd --user
This looks like a race condition with the config
Ref:
https://github.com/nwolverson/purescript-language-server/blob/0466d755aaca131d96e18ad17f3a8df019c55ea8/src/LanguageServer/IdePurescript/Main.purs#L95
There are lots of places where this might be read or written to in Aff
, and interestingly, when I add spy messages to all these ref access points, I cannot reproduce the issue. Likely due to change in timings. I don't know the best way to fix this.
Here's a debugging build with fewer prints, which can reproduce the issue (at least on my system), and generates some interesting logs:
milesfrain/purescript-language-server@edfdc7c
Some things to observe in the below snippet:
addSpagoSources
is set totrue
for both logs ofsettings
withspy
- One of the settings is nested in a
purescript
key, but the other isn't. I assume this means one of the settings is not parsed correctly. addSpagoSources
is interpreted as disabled one out of two times.npm-bin
is interpreted asfalse
one out of two times.
Log snippet:
settings: : {
purescript: {
...
addSpagoSources: �[33mtrue�[39m,
...
}
}
settings: : {
...
addSpagoSources: �[33mtrue�[39m,
...
}
Got updated settings (client push)
[Info - 10:03:49 PM] Starting IDE server
[Info - 10:03:49 PM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 10:03:49 PM] spago IS enabled in getPackagerPaths
Got updated settings (by request)
[Info - 10:03:49 PM] Starting IDE server
[Info - 10:03:49 PM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 10:03:49 PM] spago not enabled in getPackagerPaths
[Info - 10:03:49 PM] spagoGlob []
[Info - 10:03:49 PM] Resolved IDE server paths (npm-bin: false) from PATH of /home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 10:03:49 PM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 10:03:49 PM] Starting IDE server on port 15150 with cwd /home/miles/temp/tt/p1
Started IDE server (port 15150)
[Info - 10:03:50 PM] spagoGlob [".spago/ace/master/src/**/*.purs",".spago/aff/v5.1.2/src/**/*.purs",...
[Info - 10:03:50 PM] Resolved IDE server paths (npm-bin: true) from PATH of /home/miles/temp/tt/p1/node_modules/.bin:/home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
Full logs:
Launching new language client for file:///home/miles/temp/tt/p1
Debugger listening on ws://127.0.0.1:6009/90c24c34-6fb5-434d-b9f7-c4745dd7d822
For help, see: https://nodejs.org/en/docs/inspector
PureScript Language Server started
[Info - 10:03:49 PM] {"processId":141372,"clientInfo":{"name":"vscode","version":"1.47.2"},"rootPath":"/home/miles/temp/tt/p1","rootUri":"file:///home/miles/temp/tt/p1","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional"},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":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]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]}},"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]}},"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]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":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},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":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},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["comment","keyword","number","regexp","operator","namespace","type","struct","class","interface","enum","typeParameter","function","member","macro","variable","parameter","property","label"],"tokenModifiers":["declaration","documentation","static","abstract","deprecated","async","readonly"]}},"window":{"workDoneProgress":true}},"initializationOptions":{"executeCommandProvider":false},"trace":"off","workspaceFolders":[{"uri":"file:///home/miles/temp/tt/p1","name":"p1"}]}
Starting with args: ["/snap/code/38/usr/share/code/code","/home/miles/projects/purescript/language-server/server.js","--node-ipc","--clientProcessId=141372"]
Starting with cwd: /home/miles/temp/tt/p1 and using root path: /home/miles/temp/tt/p1
Activated lc for file:///home/miles/temp/tt/p1
settings: : {
purescript: {
pursExe: �[32m'purs'�[39m,
pscIdePort: �[1mnull�[22m,
autoStartPscIde: �[33mtrue�[39m,
packagePath: �[32m''�[39m,
addPscPackageSources: �[33mfalse�[39m,
addSpagoSources: �[33mtrue�[39m,
sourcePath: �[32m'src'�[39m,
buildCommand: �[32m'spago build --purs-args --json-errors'�[39m,
fastRebuild: �[33mtrue�[39m,
censorWarnings: [],
autocompleteAllModules: �[33mtrue�[39m,
autocompleteAddImport: �[33mtrue�[39m,
autocompleteLimit: �[1mnull�[22m,
autocompleteGrouped: �[33mtrue�[39m,
importsPreferredModules: [ �[32m'Prelude'�[39m ],
preludeModule: �[32m'Prelude'�[39m,
addNpmPath: �[33mtrue�[39m,
pscIdelogLevel: �[32m''�[39m,
editorMode: �[33mfalse�[39m,
polling: �[33mfalse�[39m,
outputDirectory: �[32m''�[39m,
trace: { server: �[32m'off'�[39m },
codegenTargets: �[1mnull�[22m
}
}
settings: : {
pursExe: �[32m'purs'�[39m,
pscIdePort: �[1mnull�[22m,
autoStartPscIde: �[33mtrue�[39m,
packagePath: �[32m''�[39m,
addPscPackageSources: �[33mfalse�[39m,
addSpagoSources: �[33mtrue�[39m,
sourcePath: �[32m'src'�[39m,
buildCommand: �[32m'spago build --purs-args --json-errors'�[39m,
fastRebuild: �[33mtrue�[39m,
censorWarnings: [],
autocompleteAllModules: �[33mtrue�[39m,
autocompleteAddImport: �[33mtrue�[39m,
autocompleteLimit: �[1mnull�[22m,
autocompleteGrouped: �[33mtrue�[39m,
importsPreferredModules: [ �[32m'Prelude'�[39m ],
preludeModule: �[32m'Prelude'�[39m,
addNpmPath: �[33mtrue�[39m,
pscIdelogLevel: �[32m''�[39m,
editorMode: �[33mfalse�[39m,
polling: �[33mfalse�[39m,
outputDirectory: �[32m''�[39m,
trace: { server: �[32m'off'�[39m },
codegenTargets: �[1mnull�[22m
}
Got updated settings (client push)
[Info - 10:03:49 PM] Starting IDE server
[Info - 10:03:49 PM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 10:03:49 PM] psc-package not enabled in getPackagerPaths
[Info - 10:03:49 PM] pscpGlob []
[Info - 10:03:49 PM] spago IS enabled in getPackagerPaths
Got updated settings (by request)
[Info - 10:03:49 PM] Starting IDE server
[Info - 10:03:49 PM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 10:03:49 PM] psc-package not enabled in getPackagerPaths
[Info - 10:03:49 PM] pscpGlob []
[Info - 10:03:49 PM] spago not enabled in getPackagerPaths
[Info - 10:03:49 PM] spagoGlob []
[Info - 10:03:49 PM] Resolved IDE server paths (npm-bin: false) from PATH of /home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 10:03:49 PM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 10:03:49 PM] Starting IDE server on port 15150 with cwd /home/miles/temp/tt/p1
Started IDE server (port 15150)
[Info - 10:03:50 PM] spagoGlob [".spago/ace/master/src/**/*.purs",".spago/aff/v5.1.2/src/**/*.purs",".spago/affjax/v10.1.0/src/**/*.purs",".spago/argonaut/v6.0.0/src/**/*.purs",".spago/argonaut-codecs/v6.1.0/src/**/*.purs",".spago/argonaut-core/v5.0.2/src/**/*.purs",".spago/argonaut-traversals/v7.0.0/src/**/*.purs",".spago/arraybuffer-types/v2.0.0/src/**/*.purs",".spago/arrays/v5.3.1/src/**/*.purs",".spago/avar/v3.0.0/src/**/*.purs",".spago/bifunctors/v4.0.0/src/**/*.purs",".spago/catenable-lists/v5.0.1/src/**/*.purs",".spago/colors/v5.0.0/src/**/*.purs",".spago/console/v4.4.0/src/**/*.purs",".spago/const/v4.1.0/src/**/*.purs",".spago/contravariant/v4.0.1/src/**/*.purs",".spago/control/v4.2.0/src/**/*.purs",".spago/coroutines/v5.0.1/src/**/*.purs",".spago/css/v4.0.0/src/**/*.purs",".spago/datetime/v4.1.1/src/**/*.purs",".spago/distributive/v4.0.0/src/**/*.purs",".spago/dom-indexed/v7.0.0/src/**/*.purs",".spago/effect/v2.0.1/src/**/*.purs",".spago/either/v4.1.1/src/**/*.purs",".spago/enums/v4.0.1/src/**/*.purs",".spago/exceptions/v4.0.0/src/**/*.purs",".spago/exists/v4.0.0/src/**/*.purs",".spago/foldable-traversable/v4.1.1/src/**/*.purs",".spago/foreign/v5.0.0/src/**/*.purs",".spago/foreign-object/v2.0.3/src/**/*.purs",".spago/fork/v4.0.0/src/**/*.purs",".spago/form-urlencoded/v5.0.0/src/**/*.purs",".spago/free/v5.2.0/src/**/*.purs",".spago/freeap/v5.0.1/src/**/*.purs",".spago/freet/v5.0.0/src/**/*.purs",".spago/functions/v4.0.0/src/**/*.purs",".spago/functors/v3.1.1/src/**/*.purs",".spago/gen/v2.1.1/src/**/*.purs",".spago/generics-rep/v6.1.1/src/**/*.purs",".spago/globals/v4.1.0/src/**/*.purs",".spago/halogen/v5.0.1/src/**/*.purs",".spago/halogen-css/v8.0.0/src/**/*.purs",".spago/halogen-hooks/v0.4.2/src/**/*.purs",".spago/halogen-hooks-extra/v0.6.0/src/**/*.purs",".spago/halogen-vdom/v6.1.3/src/**/*.purs",".spago/http-methods/v4.0.2/src/**/*.purs",".spago/identity/v4.1.0/src/**/*.purs",".spago/indexed-monad/v1.2.0/src/**/*.purs",".spago/integers/v4.0.0/src/**/*.purs",".spago/invariant/v4.1.0/src/**/*.purs",".spago/js-date/v6.0.0/src/**/*.purs",".spago/lazy/v4.0.0/src/**/*.purs",".spago/lists/v5.4.1/src/**/*.purs",".spago/math/v2.1.1/src/**/*.purs",".spago/maybe/v4.0.1/src/**/*.purs",".spago/media-types/v4.0.1/src/**/*.purs",".spago/newtype/v3.0.0/src/**/*.purs",".spago/nonempty/v5.0.0/src/**/*.purs",".spago/now/v4.0.0/src/**/*.purs",".spago/nullable/v4.1.1/src/**/*.purs",".spago/ordered-collections/v1.6.1/src/**/*.purs",".spago/orders/v4.0.0/src/**/*.purs",".spago/parallel/v4.0.0/src/**/*.purs",".spago/partial/v2.0.1/src/**/*.purs",".spago/prelude/v4.1.1/src/**/*.purs",".spago/profunctor/v4.1.0/src/**/*.purs",".spago/profunctor-lenses/v6.3.0/src/**/*.purs",".spago/proxy/v3.0.0/src/**/*.purs",".spago/psci-support/v4.0.0/src/**/*.purs",".spago/record/v2.0.2/src/**/*.purs",".spago/refs/v4.1.0/src/**/*.purs",".spago/routing/v9.0.1/src/**/*.purs",".spago/semirings/v5.0.0/src/**/*.purs",".spago/st/v4.1.1/src/**/*.purs",".spago/strings/v4.0.2/src/**/*.purs",".spago/tailrec/v4.1.1/src/**/*.purs",".spago/these/v4.0.0/src/**/*.purs",".spago/transformers/v4.2.0/src/**/*.purs",".spago/tuples/v5.1.0/src/**/*.purs",".spago/type-equality/v3.0.0/src/**/*.purs",".spago/typelevel-prelude/v5.0.2/src/**/*.purs",".spago/unfoldable/v4.1.0/src/**/*.purs",".spago/unsafe-coerce/v4.0.0/src/**/*.purs",".spago/unsafe-reference/v3.0.1/src/**/*.purs",".spago/validation/v4.2.0/src/**/*.purs",".spago/web-clipboard/v2.0.0/src/**/*.purs",".spago/web-dom/v4.1.0/src/**/*.purs",".spago/web-events/v2.0.1/src/**/*.purs",".spago/web-file/v2.3.0/src/**/*.purs",".spago/web-html/v2.3.0/src/**/*.purs",".spago/web-storage/v3.0.0/src/**/*.purs",".spago/web-touchevents/v2.0.0/src/**/*.purs",".spago/web-uievents/v2.0.0/src/**/*.purs",".spago/web-xhr/v3.0.2/src/**/*.purs","src/**/*.purs","test/**/*.purs",""]
[Info - 10:03:50 PM] Resolved IDE server paths (npm-bin: true) from PATH of /home/miles/temp/tt/p1/node_modules/.bin:/home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 10:03:50 PM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 10:03:52 PM] [Info] cachedb was changed from: Nothing, to: Just 2020-07-25 22:50:54.957409907 UTC @(main:Command.Ide app/Command/Ide.hs:205:25)
[Info - 10:03:52 PM] Found existing port from file: 15150, cwd: /home/miles/temp/tt/p1
[Info - 10:03:52 PM] Found IDE server on port 15150 with correct path: /home/miles/temp/tt/p1
[Info - 10:03:52 PM] Found existing IDE server with correct path on port 15150
Oh, I could see the race condition on your 2nd run, but nothing logs starting a 2nd server on the first run.
But yes it looks like one of the settings mechanisms is busted (and I bet I know which one)
OK, so I have a way forward.
- I check the various settings mechanisms are actually setting the right config
- I move the "have we started up yet" logic to 1 place (ie that
onConfig
) and make it actually work
Would it be safer to parse the settings
/config
object with Argonaut (or similar) to ensure all expected fields exist? It looks like one of these issues is that if addSpagoSources
is not found, then it's simply interpreted as false
, rather than throwing an error.
it's simply interpreted as false, rather than throwing an error
I think that is in fact the correct behaviour, I think in terms of a generic LSP client sending config all are optional.
@milesfrain I've updated but not released purescript-language-server, as I think you have a dev setup working, would you mind testing it works for you?
Hoping the use of AVar
means we have a reliable single-start now, intentionally leaving the config as a Ref
to avoid changes roaming too far, and basically the behaviour is already in that sense as desired - the config is updated to the latest pushed, some of which may be read and used next time something happens (other parts being "sticky" as they are read once).
Looks good. Here are logs with my debugging prints added to your change, which shows a single start:
Launching new language client for file:///home/miles/temp/tt/p1
Debugger listening on ws://127.0.0.1:6009/ba40e3b7-dee9-4416-a918-6c744f544ed9
For help, see: https://nodejs.org/en/docs/inspector
[Info - 11:22:57 AM] {"processId":167033,"clientInfo":{"name":"vscode","version":"1.47.2"},"rootPath":"/home/miles/temp/tt/p1","rootUri":"file:///home/miles/temp/tt/p1","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional"},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":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]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]}},"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]}},"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]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":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},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":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},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["comment","keyword","number","regexp","operator","namespace","type","struct","class","interface","enum","typeParameter","function","member","macro","variable","parameter","property","label"],"tokenModifiers":["declaration","documentation","static","abstract","deprecated","async","readonly"]}},"window":{"workDoneProgress":true}},"initializationOptions":{"executeCommandProvider":false},"trace":"off","workspaceFolders":[{"uri":"file:///home/miles/temp/tt/p1","name":"p1"}]}
Starting with args: ["/snap/code/38/usr/share/code/code","/home/miles/projects/purescript/language-server/server.js","--node-ipc","--clientProcessId=167033"]
Starting with cwd: /home/miles/temp/tt/p1 and using root path: /home/miles/temp/tt/p1
Activated lc for file:///home/miles/temp/tt/p1
settings: : {
purescript: {
pursExe: �[32m'purs'�[39m,
pscIdePort: �[1mnull�[22m,
autoStartPscIde: �[33mtrue�[39m,
packagePath: �[32m''�[39m,
addPscPackageSources: �[33mfalse�[39m,
addSpagoSources: �[33mtrue�[39m,
sourcePath: �[32m'src'�[39m,
buildCommand: �[32m'spago build --purs-args --json-errors'�[39m,
fastRebuild: �[33mtrue�[39m,
censorWarnings: [],
autocompleteAllModules: �[33mtrue�[39m,
autocompleteAddImport: �[33mtrue�[39m,
autocompleteLimit: �[1mnull�[22m,
autocompleteGrouped: �[33mtrue�[39m,
importsPreferredModules: [ �[32m'Prelude'�[39m ],
preludeModule: �[32m'Prelude'�[39m,
addNpmPath: �[33mtrue�[39m,
pscIdelogLevel: �[32m''�[39m,
editorMode: �[33mfalse�[39m,
polling: �[33mfalse�[39m,
outputDirectory: �[32m''�[39m,
trace: { server: �[32m'off'�[39m },
codegenTargets: �[1mnull�[22m
}
}
Got new config (client push)
[Info - 11:22:57 AM] Starting IDE server
[Info - 11:22:57 AM] Using sources from psc-package/spago packages (PURS_IDE_SOURCES not set)
[Info - 11:22:57 AM] psc-package not enabled in getPackagerPaths
[Info - 11:22:57 AM] pscpGlob []
[Info - 11:22:57 AM] spago IS enabled in getPackagerPaths
PureScript Language Server started
[Info - 11:22:58 AM] spagoGlob [".spago/ace/master/src/**/*.purs",".spago/aff/v5.1.2/src/**/*.purs",".spago/affjax/v10.1.0/src/**/*.purs",".spago/argonaut/v6.0.0/src/**/*.purs",".spago/argonaut-codecs/v6.1.0/src/**/*.purs",".spago/argonaut-core/v5.0.2/src/**/*.purs",".spago/argonaut-traversals/v7.0.0/src/**/*.purs",".spago/arraybuffer-types/v2.0.0/src/**/*.purs",".spago/arrays/v5.3.1/src/**/*.purs",".spago/avar/v3.0.0/src/**/*.purs",".spago/bifunctors/v4.0.0/src/**/*.purs",".spago/catenable-lists/v5.0.1/src/**/*.purs",".spago/colors/v5.0.0/src/**/*.purs",".spago/console/v4.4.0/src/**/*.purs",".spago/const/v4.1.0/src/**/*.purs",".spago/contravariant/v4.0.1/src/**/*.purs",".spago/control/v4.2.0/src/**/*.purs",".spago/coroutines/v5.0.1/src/**/*.purs",".spago/css/v4.0.0/src/**/*.purs",".spago/datetime/v4.1.1/src/**/*.purs",".spago/distributive/v4.0.0/src/**/*.purs",".spago/dom-indexed/v7.0.0/src/**/*.purs",".spago/effect/v2.0.1/src/**/*.purs",".spago/either/v4.1.1/src/**/*.purs",".spago/enums/v4.0.1/src/**/*.purs",".spago/exceptions/v4.0.0/src/**/*.purs",".spago/exists/v4.0.0/src/**/*.purs",".spago/foldable-traversable/v4.1.1/src/**/*.purs",".spago/foreign/v5.0.0/src/**/*.purs",".spago/foreign-object/v2.0.3/src/**/*.purs",".spago/fork/v4.0.0/src/**/*.purs",".spago/form-urlencoded/v5.0.0/src/**/*.purs",".spago/free/v5.2.0/src/**/*.purs",".spago/freeap/v5.0.1/src/**/*.purs",".spago/freet/v5.0.0/src/**/*.purs",".spago/functions/v4.0.0/src/**/*.purs",".spago/functors/v3.1.1/src/**/*.purs",".spago/gen/v2.1.1/src/**/*.purs",".spago/generics-rep/v6.1.1/src/**/*.purs",".spago/globals/v4.1.0/src/**/*.purs",".spago/halogen/v5.0.1/src/**/*.purs",".spago/halogen-css/v8.0.0/src/**/*.purs",".spago/halogen-hooks/v0.4.2/src/**/*.purs",".spago/halogen-hooks-extra/v0.6.0/src/**/*.purs",".spago/halogen-vdom/v6.1.3/src/**/*.purs",".spago/http-methods/v4.0.2/src/**/*.purs",".spago/identity/v4.1.0/src/**/*.purs",".spago/indexed-monad/v1.2.0/src/**/*.purs",".spago/integers/v4.0.0/src/**/*.purs",".spago/invariant/v4.1.0/src/**/*.purs",".spago/js-date/v6.0.0/src/**/*.purs",".spago/lazy/v4.0.0/src/**/*.purs",".spago/lists/v5.4.1/src/**/*.purs",".spago/math/v2.1.1/src/**/*.purs",".spago/maybe/v4.0.1/src/**/*.purs",".spago/media-types/v4.0.1/src/**/*.purs",".spago/newtype/v3.0.0/src/**/*.purs",".spago/nonempty/v5.0.0/src/**/*.purs",".spago/now/v4.0.0/src/**/*.purs",".spago/nullable/v4.1.1/src/**/*.purs",".spago/ordered-collections/v1.6.1/src/**/*.purs",".spago/orders/v4.0.0/src/**/*.purs",".spago/parallel/v4.0.0/src/**/*.purs",".spago/partial/v2.0.1/src/**/*.purs",".spago/prelude/v4.1.1/src/**/*.purs",".spago/profunctor/v4.1.0/src/**/*.purs",".spago/profunctor-lenses/v6.3.0/src/**/*.purs",".spago/proxy/v3.0.0/src/**/*.purs",".spago/psci-support/v4.0.0/src/**/*.purs",".spago/record/v2.0.2/src/**/*.purs",".spago/refs/v4.1.0/src/**/*.purs",".spago/routing/v9.0.1/src/**/*.purs",".spago/semirings/v5.0.0/src/**/*.purs",".spago/st/v4.1.1/src/**/*.purs",".spago/strings/v4.0.2/src/**/*.purs",".spago/tailrec/v4.1.1/src/**/*.purs",".spago/these/v4.0.0/src/**/*.purs",".spago/transformers/v4.2.0/src/**/*.purs",".spago/tuples/v5.1.0/src/**/*.purs",".spago/type-equality/v3.0.0/src/**/*.purs",".spago/typelevel-prelude/v5.0.2/src/**/*.purs",".spago/unfoldable/v4.1.0/src/**/*.purs",".spago/unsafe-coerce/v4.0.0/src/**/*.purs",".spago/unsafe-reference/v3.0.1/src/**/*.purs",".spago/validation/v4.2.0/src/**/*.purs",".spago/web-clipboard/v2.0.0/src/**/*.purs",".spago/web-dom/v4.1.0/src/**/*.purs",".spago/web-events/v2.0.1/src/**/*.purs",".spago/web-file/v2.3.0/src/**/*.purs",".spago/web-html/v2.3.0/src/**/*.purs",".spago/web-storage/v3.0.0/src/**/*.purs",".spago/web-touchevents/v2.0.0/src/**/*.purs",".spago/web-uievents/v2.0.0/src/**/*.purs",".spago/web-xhr/v3.0.2/src/**/*.purs","src/**/*.purs","test/**/*.purs",""]
[Info - 11:22:58 AM] Resolved IDE server paths (npm-bin: true) from PATH of /home/miles/temp/tt/p1/node_modules/.bin:/home/miles/.nvm/versions/node/v13.12.0/bin:/home/miles/.nix-profile/bin:/home/miles/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin (1st is used):
[Info - 11:22:58 AM] /home/miles/.nvm/versions/node/v13.12.0/bin/purs: 0.13.8
[Info - 11:22:58 AM] Found existing port from file: 15150, cwd: /home/miles/temp/tt/p1
[Info - 11:22:58 AM] Found IDE server on port 15150 with correct path: /home/miles/temp/tt/p1
[Info - 11:22:58 AM] Found existing IDE server with correct path on port 1515
Above fix released in 0.21.2 - thanks for the work tracking down the issue
When I did my testing, I was only looking for a single start with the correct spago glob, and didn't actually test if F12 worked or not.
Turns out that now F12 doesn't work for either the official release, or the built-from-source extension.