Skip to content

Commit 5cc07e7

Browse files
authored
Add blogpost for HLS 2.10.0.0 release announcement (#18)
* Add blogpost for HLS 2.10.0.0 release announcement * Slight rephrasing * Bump blog post date
1 parent 63d9b2a commit 5cc07e7

11 files changed

+129
-0
lines changed

content/hls-2.10.0.0/cabal-add-1.png

23.3 KB
Loading

content/hls-2.10.0.0/cabal-add-2.png

48.5 KB
Loading

content/hls-2.10.0.0/cabal-hover.png

44.9 KB
Loading
618 KB
Loading

content/hls-2.10.0.0/error-index.jpeg

90.2 KB
Loading

content/hls-2.10.0.0/error-index.png

131 KB
Loading

content/hls-2.10.0.0/index.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
+++
2+
title = "Haskell Language Server 2.10.0.0 release"
3+
date = 2025-04-15
4+
[taxonomies]
5+
authors = ["Fendor"]
6+
categories = ["HLS"]
7+
tags = ["Release"]
8+
+++
9+
10+
The HLS Team is proud to announce the new release of the Haskell Language Server `2.10.0.0`!
11+
12+
<!-- more -->
13+
14+
The last release of HLS was quite some time ago, back in July of 2024.
15+
Thus, this release has quite a number of new features, some of which we would like to highlight for you.
16+
17+
## HLS `2.10.0.0`
18+
19+
The release `2.10.0.0` supports the following GHC versions:
20+
21+
* `9.12.2`
22+
* `9.10.1`
23+
* `9.8.4`
24+
* `9.6.7`
25+
* `9.4.8`
26+
27+
We expect `2.10.0.0` to be the last HLS release having support for GHC `9.4` versions.
28+
29+
### Go to Implementations
30+
31+
We added support for a new LSP feature called `Go to Implementations`.
32+
This LSP feature allows you to jump to the implementation of overloaded functions.
33+
34+
<img src="jump-to-implementations.gif" alt="A simple 'Demo' typeclass illustrating that the 'Go to Implementations' request sends the cursor to the instance declaration 'Demo Char'." width=70%>
35+
36+
### Inlay Hints
37+
38+
Inlay hints allow you to display additional information within a line of code.
39+
These can be an elegant alternative to code lenses, which display additional information as a separate line above the actual line of code.
40+
For GSoC 2024, `jetjiinser` added inlay hints for various Haskell constructs where additional information can be provided.
41+
42+
Inlay hints are enabled by default in editors that support them, and some plugins, like the `explicit-imports` plugin, have been updated to use the new inlay hints instead of code lenses if possible.
43+
44+
#### Record Wildcards
45+
46+
When [`RecordWildCards`](https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/record_wildcards.html#extension-RecordWildCards) are enabled, it can be tricky to tell which functions are brought into scope.
47+
48+
Inlay hints are convenient to show exactly which variables have been added to the scope.
49+
50+
<img src="inlay-wildcards.png" alt="Showing the name of record field selectors in record wildcard patterns. One example shows for deconstruction, while the other example shows constructing a record using a wildcard pattern." width=70%>
51+
52+
#### Record construction
53+
54+
One more example showing the convenience of inlay hints.
55+
56+
<img src="inlay-record.png" alt="Constructing a value of type 'MyRec' shows the names of its field." width=70%>
57+
58+
#### Imports
59+
60+
Inlay hints are also an alternative to code lenses in many situations, for example for showing which identifiers are actually used from an `import`:
61+
62+
<img src="inlay-imports.png" alt="Many Haskell import statements, showing the imported identifiers as inlay hints." width=70%>
63+
64+
### `hls-cabal-plugin` features
65+
66+
The `hls-cabal-plugin` provides language features for `.cabal` files.
67+
68+
During GSoC 2024, `VenInf` added many new features to HLS' support for `.cabal` files.
69+
70+
Moreover, during hackathons such as MuniHac and ZuriHac, a lot of other developers also took the time and effort to fix bugs and contribute new features to the `hls-cabal-plugin`.
71+
72+
#### `.cabal` file outline
73+
74+
The outline on the left shows an overview of the contents of a `.cabal` file.
75+
A small quality-of-life improvement.
76+
77+
<img src="cabal-outline.png" alt="VSCode Editor showing an Outline of the `haskell-language-server.cabal`." width=70%>
78+
79+
#### Support for `cabal-add`
80+
81+
HLS now offers a convenient code action which allows you to add a new dependency to your `.cabal` file, without having to open it yourself.
82+
83+
<img src="cabal-add-1.png" alt="Import of `Data.List.Split` shows an unknown package error. VSCode offers a CodeAction offering to extend the dependency section in the `.cabal` file." width=70%>
84+
85+
After executing the code action, we see that the `.cabal` file has been modified:
86+
87+
<img src="cabal-add-2.png" alt="View of the `.cabal` file where showing a new dependency has been added." width=70%>
88+
89+
#### Hover for Dependencies
90+
91+
A tiny, new feature: hover for dependencies in `.cabal` files.
92+
It shows a link to the `Hackage` documentation of a package.
93+
94+
<img src="cabal-hover.png" alt="Hover over `split` package shows the name and a link to the Hackage documentation of the `split` package." width=70%>
95+
96+
This is mostly a proof of concept, we expand on this idea in [PR #4428](https://github.com/haskell/haskell-language-server/pull/4428).
97+
98+
### GHC Structured Errors
99+
100+
This release is also the first release which uses GHC's structured errors infrastructure.
101+
You might not notice this at first as an end-user, as it is a rather technical detail mainly concerned with refactoring internals of HLS to provide many of its features based on structured error messages, improving accuracy and maintainability of HLS.
102+
103+
But it also has the useful side effect of allowing us to integrate with [the Haskell Error Index](https://errors.haskell.org/):
104+
105+
<img src="error-index.jpeg" alt="A GHC error message, displaying the error code associated with this particular error message." width=70%>
106+
107+
For anyone wondering how HLS is providing code actions and other LSP features without structured error messages... the answer is [lots of GHC version dependent regexes](https://github.com/haskell/haskell-language-server/blob/master/plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction.hs#L975).
108+
109+
We want to replace most of these regexes with structured errors.
110+
Do you want to help? Pick an HLS plugin and hack away!
111+
The [PR #4472](https://github.com/haskell/haskell-language-server/pull/4472) is only the beginning of our efforts!
112+
113+
### Fixed
114+
115+
HLS has lots of bugs. In each release we fix a couple and we introduce a couple of new ones.
116+
We can't list all bug fixes, so let's just list a few important ones:
117+
118+
* [Bugfix: Explicit record fields inlay hints for polymorphic records](https://github.com/haskell/haskell-language-server/pull/4510)
119+
* [Implement fallback handler for `*/resolve` requests](https://github.com/haskell/haskell-language-server/pull/4478)
120+
121+
## Thank you, Haskell Community
122+
123+
We wish all Haskellers happy hacking while using the latest release of the Haskell Language Server `2.10.0.0`!
124+
125+
We want to thank our countless contributors from the community and our Google Summer of Code participants!
126+
This is a community project, and the HLS team is grateful for every contribution, be it documentation, bug fixes or new features.
127+
128+
Finally, a reminder that you can donate to the development of HLS via [OpenCollective](https://opencollective.com/haskell-language-server).
129+
The OpenCollective money pays for tedious, but important maintenance work and, sometimes, for getting new features over the finish line.
597 KB
Loading

content/hls-2.10.0.0/inlay-record.png

18.5 KB
Loading
49.8 KB
Loading

0 commit comments

Comments
 (0)