Skip to content

Better error reporting in raw hls (no wrapper) of invalid project config file (package.yaml, .cabal, stack yaml or cabal.project) #1757

Open
@sullyj3

Description

@sullyj3

Your environment

Output of haskell-language-server --probe-tools or haskell-language-server-wrapper --probe-tools:

haskell-language-server version: 1.1.0.0 (GHC: 8.10.4) (PATH: /home/james/.local/bin/haskell-language-server-8.10.4) (GIT hash: f1c096927186a93d8e3ccd4fe8385cc1b070350b)
Tool versions found on the $PATH
cabal:          3.4.0.0
stack:          2.5.1
ghc:            8.10.4

Which OS do you use: Linux (WSL ubuntu)

Which lsp-client do you use: Neovim with CoC

Describe your project (alternative: link to the project): stack new test-hls

Contents of hie.yaml: n/a

Steps to reproduce

  1. Create a new project with stack new test-hls
  2. Make package.yaml invalid in some way, for example, add the line dependencies: under library:, without listing any dependencies.
  3. Open app/Main.hs in your editor. For me, with nvim/CoC, I get
    [coc.nvim] The "languageserver.haskell" server crashed 5 times in the last 3 minutes. The server will not be restarted.

Expected behaviour

Server launches successfully and provides a diagnostic indicating that package.yaml is invalid

Actual behaviour

Server crashes

Include debug information

Execute in the root of your project the command haskell-language-server --debug . and paste the logs here:

Debug output:
james@SurfaceLaptop ~/d/test-hls> haskell-language-server-8.10.4 --debug
haskell-language-server version: 1.1.0.0 (GHC: 8.10.4) (PATH: /home/james/.local/bin/haskell-language-server-8.10.4) (GIT hash: f1c096927186a93d8e3ccd4fe8385cc1b070350b)
 ghcide setup tester in /home/james/dev/test-hls.
Report bugs at https://github.com/haskell/haskell-language-server/issues

Step 1/4: Finding files to test in /home/james/dev/test-hls
Found 4 files

Step 2/4: Looking for hie.yaml files that control setup
Found 1 cradle
  ()

Step 3/4: Initializing the IDE

Step 4/4: Type checking the files
2021-04-19 12:48:19.2446783 [ThreadId 4] DEBUG hls:     Set files of interest to: [(NormalizedFilePath "/home/james/dev/test-hls/app/Main.hs",OnDisk),(NormalizedFilePath "/home/james/dev/test-hls/test/Spec.hs",OnDisk),(NormalizedFilePath "/home/james/dev/test-hls/src/Lib.hs",OnDisk),(NormalizedFilePath "/home/james/dev/test-hls/Setup.hs",OnDisk)]
2021-04-19 12:48:19.2519641 [ThreadId 24] DEBUG hls:    hlint:getIdeas:file:NormalizedFilePath "/home/james/dev/test-hls/src/Lib.hs"
2021-04-19 12:48:19.2519777 [ThreadId 23] DEBUG hls:    hlint:getIdeas:file:NormalizedFilePath "/home/james/dev/test-hls/app/Main.hs"
2021-04-19 12:48:19.252389 [ThreadId 22] DEBUG hls:     hlint:getIdeas:file:NormalizedFilePath "/home/james/dev/test-hls/test/Spec.hs"
2021-04-19 12:48:19.2526386 [ThreadId 24] DEBUG hls:    hlint:getIdeas:file:NormalizedFilePath "/home/james/dev/test-hls/Setup.hs"
2021-04-19 12:48:19.2588852 [ThreadId 30] INFO hls:     Consulting the cradle for "test/Spec.hs"
2021-04-19 12:48:19.2594873 [ThreadId 30] WARNING hls:  No [cradle](https://github.com/mpickering/hie-bios#hie-bios) found for test/Spec.hs.
 Proceeding with [implicit cradle](https://hackage.haskell.org/package/implicit-hie).
You should ignore this message, unless you see a 'Multi Cradle: No prefixes matched' error.
Output from setting up the cradle Cradle {cradleRootDir = "/home/james/dev/test-hls", cradleOptsProg = CradleAction: Stack}
> /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null
> /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null
2021-04-19 12:48:20.183659 [ThreadId 30] DEBUG hls:     Session loading result: Left [CradleError {cradleErrorDependencies = ["test-hls.cabal","package.yaml","stack.yaml"], cradleErrorExitCode = ExitFailure 1, cradleErrorStderr = ["Failed to parse result of calling stack","/home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null"]}]
2021-04-19 12:48:20.1848198 [ThreadId 42] INFO hls:     Consulting the cradle for "app/Main.hs"
2021-04-19 12:48:20.1850276 [ThreadId 42] WARNING hls:  No [cradle](https://github.com/mpickering/hie-bios#hie-bios) found for app/Main.hs.
 Proceeding with [implicit cradle](https://hackage.haskell.org/package/implicit-hie).
You should ignore this message, unless you see a 'Multi Cradle: No prefixes matched' error.
Output from setting up the cradle Cradle {cradleRootDir = "/home/james/dev/test-hls", cradleOptsProg = CradleAction: Stack}
> /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null
> /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null
2021-04-19 12:48:20.6961111 [ThreadId 42] DEBUG hls:    Session loading result: Left [CradleError {cradleErrorDependencies = ["test-hls.cabal","package.yaml","stack.yaml"], cradleErrorExitCode = ExitFailure 1, cradleErrorStderr = ["Failed to parse result of calling stack","/home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null"]}]
2021-04-19 12:48:20.6979682 [ThreadId 54] INFO hls:     Consulting the cradle for "Setup.hs"
2021-04-19 12:48:20.6983063 [ThreadId 54] WARNING hls:  No [cradle](https://github.com/mpickering/hie-bios#hie-bios) found for Setup.hs.
 Proceeding with [implicit cradle](https://hackage.haskell.org/package/implicit-hie).
You should ignore this message, unless you see a 'Multi Cradle: No prefixes matched' error.
2021-04-19 12:48:20.6983419 [ThreadId 29] INFO hls:     File:     /home/james/dev/test-hls/test/Spec.hs
Hidden:   no
Range:    1:1-2:1
Source:   cradle
Severity: DsError
Message:
  Failed to parse result of calling stack
  /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected
  Array, Object, or String, but encountered Null
2021-04-19 12:48:20.7042744 [ThreadId 29] INFO hls:     File:     /home/james/dev/test-hls/app/Main.hs
Hidden:   no
Range:    1:1-2:1
Source:   cradle
Severity: DsError
Message:
  Failed to parse result of calling stack
  /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected
  Array, Object, or String, but encountered Null
Output from setting up the cradle Cradle {cradleRootDir = "/home/james/dev/test-hls", cradleOptsProg = CradleAction: Stack}
2021-04-19 12:48:20.7097394 [ThreadId 54] DEBUG hls:    Session loading result: Left [CradleError {cradleErrorDependencies = [], cradleErrorExitCode = ExitSuccess, cradleErrorStderr = ["Multi Cradle: No prefixes matched","pwd: /home/james/dev/test-hls","filepath: /home/james/dev/test-hls/Setup.hs","prefixes:","(\"./src\",Stack {component = Just \"test-hls:lib\", stackYaml = Nothing})","(\"./app/Main.hs\",Stack {component = Just \"test-hls:exe:test-hls-exe\", stackYaml = Nothing})","(\"./app/Paths_test_hls.hs\",Stack {component = Just \"test-hls:exe:test-hls-exe\", stackYaml = Nothing})","(\"./test\",Stack {component = Just \"test-hls:test:test-hls-test\", stackYaml = Nothing})"]}]
2021-04-19 12:48:20.7108085 [ThreadId 23] INFO hls:     File:     /home/james/dev/test-hls/Setup.hs
Hidden:   no
Range:    1:1-2:1
Source:   cradle
Severity: DsError
Message:
  Multi Cradle: No prefixes matched
  pwd: /home/james/dev/test-hls
  filepath: /home/james/dev/test-hls/Setup.hs
  prefixes:
  ("./src",Stack {component = Just "test-hls:lib", stackYaml = Nothing})
  ("./app/Main.hs",Stack {component = Just "test-hls:exe:test-hls-exe", stackYaml = Nothing})
  ("./app/Paths_test_hls.hs",Stack {component = Just "test-hls:exe:test-hls-exe", stackYaml =
  Nothing})
  ("./test",Stack {component = Just "test-hls:test:test-hls-test", stackYaml = Nothing})
2021-04-19 12:48:20.711803 [ThreadId 59] INFO hls:      Consulting the cradle for "src/Lib.hs"
2021-04-19 12:48:20.7127651 [ThreadId 59] WARNING hls:  No [cradle](https://github.com/mpickering/hie-bios#hie-bios) found for src/Lib.hs.
 Proceeding with [implicit cradle](https://hackage.haskell.org/package/implicit-hie).
You should ignore this message, unless you see a 'Multi Cradle: No prefixes matched' error.
Output from setting up the cradle Cradle {cradleRootDir = "/home/james/dev/test-hls", cradleOptsProg = CradleAction: Stack}
> /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null
> /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null
2021-04-19 12:48:21.2348523 [ThreadId 59] DEBUG hls:    Session loading result: Left [CradleError {cradleErrorDependencies = ["test-hls.cabal","package.yaml","stack.yaml"], cradleErrorExitCode = ExitFailure 1, cradleErrorStderr = ["Failed to parse result of calling stack","/home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected Array, Object, or String, but encountered Null"]}]
2021-04-19 12:48:21.2354208 [ThreadId 22] INFO hls:     File:     /home/james/dev/test-hls/src/Lib.hs
Hidden:   no
Range:    1:1-2:1
Source:   cradle
Severity: DsError
Message:
  Failed to parse result of calling stack
  /home/james/dev/test-hls/package.yaml: Error while parsing $.library.dependencies - expected
  Array, Object, or String, but encountered Null
Files that failed:
 * /home/james/dev/test-hls/Setup.hs
 * /home/james/dev/test-hls/app/Main.hs
 * /home/james/dev/test-hls/src/Lib.hs
 * /home/james/dev/test-hls/test/Spec.hs

Completed (0 files worked, 4 files failed)
2021-04-19 12:48:21.2368608 [ThreadId 78] INFO hls:     finish: User TypeCheck (took 1.99s)
2021-04-19 12:48:21.2375275 [ThreadId 76] INFO hls:     finish: GetHie (took 0.00s)
2021-04-19 12:48:21.238492 [ThreadId 17] INFO hls:      finish: GenerateCore (took 0.00s)

Paste the logs from the lsp-client, e.g. for VS Code

LSP logs: output of `:CocOpenLog`:
2021-04-19T12:50:30.829 INFO (pid:23136) [services] - registered service "languageserver.haskell"
2021-04-19T12:50:30.840 INFO (pid:23136) [services] - haskell state change: stopped => starting
2021-04-19T12:50:30.843 INFO (pid:23136) [plugin] - coc.nvim 0.0.80-2cece2600a initialized with node: v15.14.0 after 74ms
2021-04-19T12:50:30.988 INFO (pid:23136) [language-client-index] - Language server "languageserver.haskell" started with 23147
2021-04-19T12:50:31.963 INFO (pid:23136) [services] - haskell state change: starting => stopped
2021-04-19T12:50:31.963 INFO (pid:23136) [services] - haskell state change: stopped => starting
2021-04-19T12:50:32.087 INFO (pid:23136) [language-client-index] - Language server "languageserver.haskell" started with 23172
2021-04-19T12:50:32.399 INFO (pid:23136) [services] - haskell state change: starting => stopped
2021-04-19T12:50:32.399 INFO (pid:23136) [services] - haskell state change: stopped => starting
2021-04-19T12:50:32.508 INFO (pid:23136) [language-client-index] - Language server "languageserver.haskell" started with 23197
2021-04-19T12:50:32.830 INFO (pid:23136) [services] - haskell state change: starting => stopped
2021-04-19T12:50:32.830 INFO (pid:23136) [services] - haskell state change: stopped => starting
2021-04-19T12:50:32.956 INFO (pid:23136) [language-client-index] - Language server "languageserver.haskell" started with 23222
2021-04-19T12:50:33.278 INFO (pid:23136) [services] - haskell state change: starting => stopped
2021-04-19T12:50:33.278 INFO (pid:23136) [services] - haskell state change: stopped => starting
2021-04-19T12:50:33.387 INFO (pid:23136) [language-client-index] - Language server "languageserver.haskell" started with 23247
2021-04-19T12:50:33.699 INFO (pid:23136) [services] - haskell state change: starting => stopped
2021-04-19T12:50:54.032 INFO (pid:23136) [attach] - receive notification: openLog []

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions