haskell / haskell/haskell-language-server

Performance: adding an `import` retriggers a long "Processing"

Open
#4,443 17 comments 4 reactions 0 assignees View on GitHub
performance type: bug
Dominant language
Haskell
Stars
3k
Forks
455
Avg merge
2d 19h
Merged PRs (30d)
11

Description

### Your environment
Which OS do you use? Linux / NixOS
Which version of GHC do you use and how did you install it? GHC `9.10.1`, installed using nix/nixpkgs.
How is your project built (alternative: link to the project)? A custom build system based on nix.

Which LSP client (editor/plugin) do you use? Neovim builtin lsp
Which version of HLS do you use and how did you install it? `2.9.0.0`
Have you configured HLS in any way (especially: a `hie.yaml` file)?

My `hie.yaml` contains:

```
cradle:
bios:
shell: "nix run .#haskell_hie_bios"
```

And the nix target `haskell_hie_bios` lists all the required build flags used by GHC to build one monolithic packages composed of 1089 modules. It also contains the listing of the 1089 modules, eg:

```
-XFoo
-XBar
-ipath/to/src
-ipath/to/src2
-ffoo
path/to/src/Module/Module.hs
path/to/src2/Module2/Module2.hs
```

### Steps to reproduce

I don't know how to reproduce that outside of our large codebase, but what do I observe:

- I've turned `--debug --log /path/to/a/file.log`
- I start my editor (neovim, note that my collegues using vscode observes the same problem), load a file (for the example, I loaded a file which is at the end of the dependency tree, it contains a `main` function and no other module depends on that module).
- After a bit of time, I can see:
```
2024-11-02T08:45:19.194755Z | Debug | Finished: C:GetHieAst:/home/guillaume/jinko/jinko/simwork/core-webservice/app/Local/Main.hs Took: 2m34s
```

In the log.
- I can edit my file, do some change, that's super reactive. I can add function, hover for documentation, go to definition, everything is smooth and fast. Code action works fine, everything works great.
- If I go to the top of the module, `import` section, I can add/remove symbols in the currently existing imported module, but if I add (or remove) an `import` statment, it starts `Processing` for a long time. For example, after adding `import Data.Functor` on top of my file, I can see `Processing` and `Indexing` (and actually, a few, sometime 2 or 3 `Processing`) and for a few seconds, HLS is not reactive anymore. Here is the message in the log:

```
2024-11-02T08:48:35.124980Z | Debug | Finished: C:GetHieAst:/home/guillaume/jinko/jinko/simwork/core-webservice/app/Local/Main.hs Took: 36.24s
2024-11-02T08:48:35.125044Z | Debug | Finished: C:GetHieAst:/home/guillaume/jinko/jinko/simwork/core-webservice/app/Local/Main.hs Took: 36.24s
2024-11-02T08:48:35.125125Z | Debug | Finished: C:GetHieAst:/home/guillaume/jinko/jinko/simwork/core-webservice/app/Local/Main.hs Took: 36.24s
```

(I'm surprised by the 3 lines of log. but note the `36s`.). Note that there may be another problem with my setup or with HLS because `36s` is a really long time, but the original problem is that I'm wondering why it is "re-processing" everything.

### Expected behavior

Should not `Processing` for `40s` when I had an import. I can understand that it may invalidate the build tree by adding an `import`, but this file being at the End of the build hierarchy, no module depends on it, so it is surprising.

### Debug information

Sorry, I'm opening this issue without much details, in order to start tracking the problem. I'll try to investigate a bit more (especially, it looks like the issue is new at work, so I may be able to find which update triggered it.)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.