haskell-language-server icon indicating copy to clipboard operation
haskell-language-server copied to clipboard

wrapper: find exe named h-l-s-<ghcVersion>~<hlsVersion> like GHCUP names it

Open adamse opened this issue 1 year ago • 4 comments

adamse avatar Dec 03 '24 19:12 adamse

Hi, thank you for the PR!

What's the motivation for this change? You want the hls-wrapper to automatically pick up any installed HLS binary? I take it, this is not related to https://github.com/haskell/ghcup-hs/issues/1150?

fendor avatar Dec 05 '24 15:12 fendor

I simply noticed that ghcup names the hls binary in a certain way, and I wished the hls wrapper to find it! This PR is unrelated to anything else, at least to my knowledge :)

$ dirname `which ghc`
/home/a/.ghcup/bin

$ ls -l $(dirname `which ghc`)
total 53209
...
lrwxrwxrwx 1 a users       49 Dec  3 19:21 haskell-language-server-9.10.1~2.9.0.1 -> ../hls/2.9.0.1/bin/haskell-language-server-9.10.1*
lrwxrwxrwx 1 a users       48 Dec  3 19:21 haskell-language-server-9.2.8~2.9.0.1 -> ../hls/2.9.0.1/bin/haskell-language-server-9.2.8*
lrwxrwxrwx 1 a users       48 Dec  3 19:21 haskell-language-server-9.4.8~2.9.0.1 -> ../hls/2.9.0.1/bin/haskell-language-server-9.4.8*
lrwxrwxrwx 1 a users       48 Dec  3 19:21 haskell-language-server-9.6.5~2.9.0.1 -> ../hls/2.9.0.1/bin/haskell-language-server-9.6.5*
lrwxrwxrwx 1 a users       48 Dec  3 19:21 haskell-language-server-9.6.6~2.9.0.1 -> ../hls/2.9.0.1/bin/haskell-language-server-9.6.6*
lrwxrwxrwx 1 a users       48 Dec  3 19:21 haskell-language-server-9.8.2~2.9.0.1 -> ../hls/2.9.0.1/bin/haskell-language-server-9.8.2*
lrwxrwxrwx 1 a users       86 Dec  3 19:21 haskell-language-server-wrapper-2.9.0.1 -> ../hls/2.9.0.1/lib/haskell-language-server-2.9.0.1/bin/haskell-language-server-wrapper*
...

adamse avatar Dec 05 '24 17:12 adamse

Ok, so this feature would allow the wrapper haskell-language-server-wrapper-2.9.0.1 (the -2.9.0.1 is not required) to additionally find HLS binaries such as haskell-language-server-<ghc-ver>~2.9.0.1?

I think I see two use-cases here, this allows you to use haskell-language-server-wrapper-2.9.0.1 even when no HLS version is set, and it allows you to change the HLS version per project? E.g., you can specify haskell-language-server-wrapper-<ghc-ver>~2.8.0.0 to use HLS-2.8.0.0 even when it is not set. Is that part of the motivation?

fendor avatar Dec 06 '24 11:12 fendor

I noticed that ghcup installed haskell-language-server-wrapper-2.9.0.1 so I made my LSP client (vim 9 with coc-nvim) use that, but the current wrapper doesn't find the h-l-s-<ghc>~<hls> named exes. Having the wrapper pick up the right exe here is my only motivation.

The error I got was similar too this (but shorter, only the very end was shown inside vim):

$ haskell-language-server-wrapper-2.9.0.1
No 'hie.yaml' found. Try to discover the project type!
Run entered for haskell-language-server-wrapper(haskell-language-server-wrapper-2.9.0.1) Version 2.9.0.1 x86_64 ghc-9.10.1
Current directory: /home/a/p/arr-hs
Operating system: linux
Arguments: []
Cradle directory: /home/a/p/arr-hs
Cradle type: Default

Tool versions found on the $PATH
cabal:          3.12.1.0
stack:          2.15.5
ghc:            9.6.6


Consulting the cradle to get project GHC version...
2024-12-06T21:44:46.338742Z | Debug | ghc --numeric-version
Project GHC version: 9.6.6
haskell-language-server exe candidates: ["haskell-language-server-9.6.6","haskell-language-server"]
Failed to find a HLS version for GHC 9.6.6
Executable names we failed to find: haskell-language-server-9.6.6,haskell-language-server

adamse avatar Dec 06 '24 21:12 adamse