Open konn opened 6 months ago
we should create a test case for this. We do have code detecting cycles: https://github.com/soulomoon/haskell-language-server/blob/60839b023b7eea705a8827c0887c87114b12b940/ghcide/src/Development/IDE/Import/DependencyInformation.hs#L273
I've created a branch and push an attempt to add the test. https://github.com/haskell/haskell-language-server/tree/4265-hls-loops-forever-on-bogus-cyclic-import-introduced-by-the-duplicate-module-names.
Then I test it with TASTY_PATTERN="ImportCycleTests" cabal test ghcide-tests
But I am not sure if I set it up correctly.
============================
Sometime we can get the following reproduction.
We do figure out the correct module name for them and import name, so we do not see cycles in ReportImportCycles
. But then we have the wrong ModLocation
for Lib/A.hs
(Since we have ill defined module name in Lib/A.hs
). Then we stuck in tcRnModule->hscTypecheckRename
but I am not sure what went wrong after in ghc that caused the hang.
ThreadId 95 | 2024-05-29T08:06:02.999757Z | Debug | Known files updated:
fromList [
(TargetModule (ModuleName "Lib.A"),fromList ["/private/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/extra-dir-10842865193/src/Lib/A.hs"]),
(TargetModule (ModuleName "Lib"),fromList ["/private/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/extra-dir-10842865193/src/Lib.hs"]),
(TargetFile NormalizedFilePath "/private/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/extra-dir-10842865193/src/Lib/A.hs",
fromList ["/private/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/extra-dir-10842865193/src/Lib/A.hs"])]
And the `rawImports`:
0 -> [L (RealSrcSpan SrcSpanOneLine "/private/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/extra-dir-10842865193/src/Lib.hs" 3 8 13 (Just (BufSpan {bufSpanStart = BufPos {bufPos = 28}, bufSpanEnd = BufPos {bufPos = 33}}))) (ModuleName "Lib.A")]
1 -> []
tcRnModule: ModLocation {ml_hs_file = Just "/private/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/extra-dir-13294337334/src/Lib/A.hs", ml_hi_file = "/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/.cache/ghcide/importCycle-0.1.0.0-inplace-2836ba19a3aec7ab18476d0269fb9c130232ebad/Lib.hi", ml_dyn_hi_file = "/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/.cache/ghcide/importCycle-0.1.0.0-inplace-2836ba19a3aec7ab18476d0269fb9c130232ebad/Lib.dyn_hi", ml_obj_file = "/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/.cache/ghcide/importCycle-0.1.0.0-inplace-2836ba19a3aec7ab18476d0269fb9c130232ebad/Lib.o", ml_dyn_obj_file = "/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/.cache/ghcide/importCycle-0.1.0.0-inplace-2836ba19a3aec7ab18476d0269fb9c130232ebad/Lib.dyn_o", ml_hie_file = "/var/folders/36/_743psv11gv2wrj9dclrpd500000gn/T/hls-test-root/.cache/ghcide/importCycle-0.1.0.0-inplace-2836ba19a3aec7ab18476d0269fb9c130232ebad/Lib.hie"}
@wz1000 Will take a look!
Your environment
Which OS do you use? macOS Sonoma 14.5 (23F79)
Which version of GHC do you use and how did you install it? GHC 9.4.8 and 9.8.2, via GHCup ()
How is your project built (alternative: link to the project)? Cabal. See the repro repo: https://github.com/konn/hls-multihome-modname (NOTE: despite the repo name, Multi Home seems irrelevant here - sorry for the confusion)
Which LSP client (editor/plugin) do you use? VSCode + vscode-haskell
Which version of HLS do you use and how did you install it? 2.8.0.0 via GHCup
Have you configured HLS in any way (especially: a
hie.yaml
file)? Nohie.yaml
(see the repro above).Steps to reproduce
src/Lib.hs
andsrc/Lib/A.hs
src/Lib/A.hs
the same name asLib
: putmodule Lib where
on top ofsrc/Lib/A.hs
.Lib.A
fromLib
Expected behaviour
HLS must suggest to rename the module name of
Lib/A.hs
toLib.A
.Actual behaviour
HLS loops indefinitely.
Although the situation is ill-conditioned on the user side, but it can occur relatively easily when one wants to cut out some portion of the existing module to a separate (sub) module. So, it might be good for HLS to be able to handle this case.
Debug information
4-Haskell (hls-multihome-modname).log