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

Multiple Components HLS doesn't recompile on *.cabal change #4236

Open
konn opened this issue May 17, 2024 · 3 comments
Open

Multiple Components HLS doesn't recompile on *.cabal change #4236

konn opened this issue May 17, 2024 · 3 comments
Labels
build tool: cabal multi-component Issues relating to multi-component support status: needs triage type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc..

Comments

@konn
Copy link
Collaborator

konn commented May 17, 2024

Summary

When Multiple Component Support enabled, HLS won't update the state even when any *.cabal file update.

Your environment

Which OS do you use? macOS

Which version of GHC do you use and how did you install it? GHC 9.4.8

How is your project built (alternative: link to the project)? Cabal 3.11.0.0 prerelease (installed by ghcup --no-cache install cabal -u 'https://gitlab.haskell.org/haskell/cabal/-/jobs/1848320/artifacts/raw/out/cabal-install-3.11.0.0-x86_64-linux-alpine3_12.tar.xz' 3.12.0.0-prerelease )

Which LSP client (editor/plugin) do you use? VSCode

Which version of HLS do you use and how did you install it? HLS 2.8.0.0, installed via ghcup

Have you configured HLS in any way (especially: a hie.yaml file)? No hie.yaml

Steps to reproduce

  1. Install cabal 3.12.0.0 prerelease. For example:

    ghcup --no-cache install cabal -u 'https://gitlab.haskell.org/haskell/cabal/-/jobs/1848320/artifacts/raw/out/cabal-install-3.11.0.0-x86_64-linux-alpine3_12.tar.xz' 3.12.0.0-prerelease --no-set
  2. Clone konn/hls-cabal-monorepo-multihome-recomp-repro

    git clone https://github.com/konn/hls-cabal-monorepo-multihome-recomp-repro.git
  3. Make sure LSP client uses HLS 2.8 and Cabal 3.11.0.0. You don't have to any configuration if you are using VSCode, as it contains the necessary configuration file.

  4. Open package-a/src/MyLibA.hs and package-b/src/MyLibB.hs and wait for HLS to warmup.

  5. After HLS has been successfully launched, add package-a as the build-depends of package-b, remove someFunc from MyLibB.hs and import MyLibA instead.

    diff --git a/package-b/package-b.cabal b/package-b/package-b.cabal
    index e74338b..b23761d 100644
    --- a/package-b/package-b.cabal
    +++ b/package-b/package-b.cabal
    @@ -13,5 +13,8 @@ extra-doc-files: CHANGELOG.md
     library
       ghc-options: -Wall
       exposed-modules: MyLibB
    -  build-depends: base
    +  build-depends:
    +    base,
    +    package-a,
    +
       hs-source-dirs: src
    diff --git a/package-b/src/MyLibB.hs b/package-b/src/MyLibB.hs
    index febc71a..936e822 100644
    --- a/package-b/src/MyLibB.hs
    +++ b/package-b/src/MyLibB.hs
    @@ -1,4 +1,3 @@
     module MyLibB (someFunc) where
     
    -someFunc :: IO ()
    -someFunc = putStrLn "someFunc"
    +import MyLibA

Expected behaviour

HLS should reconfigure package-b so that MyLibA can be imported in MyLibB without any hassle.

Actual behaviour

HLS seems to make no recompilation/state update, and complaining MyLibA not found.

Could not find module ‘MyLibA’
It is not a module in the current program, or in any known package

Side note

  • In this case, we added a local package. The same bug occurs if one adds some other (boot or external) packages.
  • If one changes sessionLoading to singleComponent, then HLS updates/recompiles when *.cabal changes.

Debug information

lop.log

@konn konn added type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc.. build tool: cabal status: needs triage multi-component Issues relating to multi-component support labels May 17, 2024
@fendor
Copy link
Collaborator

fendor commented May 17, 2024

Hi!

I don't think this bug is related to the multi-component support per se, it is rather that the reload logic is only triggered in certain scenarios. For example, I think it is triggered when you open a new component. Perhaps someone finds the motivation to work on this during ZuriHac.

@michaelpj
Copy link
Collaborator

Do we have a better issue describing the problem? I'm pretty sure we do reload when you change the cabal file and you're working on a single component...

@fendor
Copy link
Collaborator

fendor commented May 17, 2024

Not right now, I don't quite understand why it doesn't always reload correctly... Perhaps I can diagnose it over the weekend.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build tool: cabal multi-component Issues relating to multi-component support status: needs triage type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc..
Projects
None yet
Development

No branches or pull requests

3 participants