haskell / haskell-language-server

Official haskell ide support via language server (LSP). Successor of ghcide & haskell-ide-engine.
Apache License 2.0
2.71k stars 368 forks source link

Use stack/cabal cradle if no project config + ghc not in PATH + stack/cabal in PATH #692

Open jneira opened 3 years ago

jneira commented 3 years ago

//cc @Avi-D-coder @fendor

Avi-D-coder commented 3 years ago

I can take a look on Christmas.

jneira commented 3 years ago

Thinking in it twice, there exists the possibility of use cabal, as you can set in cabal global config the path to ghc without having it in the global PATH. Not sure if that is a common setup though. Maybe we should check if cabal exec ghc -- --version works (and in a similar way stack exec ghc -- --version, maybe with --skip-ghc-check to avoid its download?) and proceed to use cabal or stack if ghc is set.

Ailrun commented 3 years ago

Awesome, this is exactly what I have hoped for a few weeks, but couldn't come up with some specification. Thank you for raising this issue!

jneira commented 3 years ago

I have to say that it arose in a conversation with a haskell beginner (@hieung1401 in the fp discord channel), who was using directly stack for fire a repl. He had to create a stack project only to make hls work. But even experienced haskell developers work with standalone files so it can be handy for everybody.

Ailrun commented 3 years ago

Yes, true. I installed system GHC only to make HLS work for small scripts that I need to use from time to time. If HLS supports such a stack detection mechanism, it would allow much compact setting for Haskell dev.

jneira commented 3 years ago

I would say that cabal could not be as useful as stack cause you can configure the stack global project as you want, including dependencies, but afaik you cant do the same in the global cabal config, only set the path to ghc. So in this case i would choose stack first if both tools are available.

jneira commented 3 years ago

@Avi-D-coder has you the opportunity to make some progress on this?

Avi-D-coder commented 3 years ago

I took a look, but I have not had time to finish.

jneira commented 3 years ago

it is a common issue among beginners so probably we should add it as known issue in troubleshooting section

July541 commented 3 years ago

it is a common issue among beginners so probably we should add it as konwn issue in troubleshooting section

I did really met some students with this problem, especially some of them following the instruction from the class but not installed correctly(they thought they had made it), which cause HLS unable to work.

RedTachyon commented 3 years ago

Is there an end-user solution for this? I'm trying to setup Haskell on a new machine and running into this problem again

jneira commented 3 years ago

I am afraid that no other than set ghc in path (f.e. with PATH=$(stack path --compiler-exe):PATH && code .) Or if you are using ghcup: https://ghcup.readthedocs.io/en/latest/guide/#with_ghc-wrapper-eg-for-hls

ruifengx commented 2 years ago

It seems using the following explicit cradle works:

cradle:
  stack:

Save this as hie.yaml into the directory, and just use open VSCode without custom PATH. I assumed this configuration should be able to force hls to call stack, and it works pretty well.