-
Notifications
You must be signed in to change notification settings - Fork 8
Add blogpost for HLS 2.10.0.0 release announcement #18
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
Merged
Merged
Changes from 1 commit
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
+++ | ||
title = "Haskell Language Server 2.10.0.0 release" | ||
date = 2025-04-07 | ||
[taxonomies] | ||
authors = ["Fendor"] | ||
categories = ["HLS"] | ||
tags = ["Release"] | ||
+++ | ||
|
||
The HLS Team is proud to announce the new release of the Haskell Language Server `2.10.0.0`! | ||
|
||
<!-- more --> | ||
|
||
The last release of HLS was quite some time ago, back in July of 2024. | ||
Thus, this release has quite a number of new features, some of which we would like to highlight for you. | ||
|
||
## HLS `2.10.0.0` | ||
|
||
The release `2.10.0.0` supports the following GHC versions: | ||
|
||
* `9.12.2` | ||
* `9.10.1` | ||
* `9.8.4` | ||
* `9.6.7` | ||
* `9.4.8` | ||
|
||
We expect `2.10.0.0` to be the last HLS release having support for GHC `9.4` versions. | ||
|
||
### Go to Implementations | ||
|
||
We added support for a new LSP feature called `Go to Implementations`. | ||
This LSP feature allows you to jump to the implementation of overloaded functions. | ||
|
||
<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%> | ||
|
||
### Inlay Hints | ||
|
||
Inlay hints allow you to display additional information within a line of code. | ||
This can be an elegant alternative to code lenses, which can be a bit more invasive in the editor. | ||
For GSoC 2024, `jetjiinser` added inlay hints for various Haskell constructs where additional information can be provided. | ||
|
||
#### Record Wildcards | ||
|
||
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. | ||
|
||
Inlay hints are convenient to show exactly which variables have been added to the scope. | ||
|
||
<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%> | ||
|
||
#### Record construction | ||
|
||
One more example showing the convenience of inlay hints. | ||
|
||
<img src="inlay-record.png" alt="Constructing a value of type 'MyRec' shows the names of its field." width=70%> | ||
|
||
#### Imports | ||
|
||
Inlay hints are also an alternative to code lenses in many situations, for example for showing which identifiers are actually used from an `import`: | ||
|
||
<img src="inlay-imports.png" alt="Many Haskell import statements, showing the imported identifiers as inlay hints." width=70%> | ||
|
||
### `hls-cabal-plugin` features | ||
|
||
The `hls-cabal-plugin` provides language features for `.cabal` files. | ||
|
||
During GSoC 2024, `VenInf` added many new features to HLS' support for `.cabal` files. | ||
|
||
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`. | ||
|
||
#### `.cabal` file outline | ||
|
||
The outline on the left shows an overview of the contents of a `.cabal` file. | ||
A small quality-of-life improvement. | ||
|
||
<img src="cabal-outline.png" alt="VSCode Editor showing an Outline of the `haskell-language-server.cabal`." width=70%> | ||
|
||
#### Support for `cabal-add` | ||
|
||
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. | ||
|
||
<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%> | ||
|
||
After executing the code action, we see that the `.cabal` file has been modified: | ||
|
||
<img src="cabal-add-2.png" alt="View of the `.cabal` file where showing a new dependency has been added." width=70%> | ||
|
||
#### Hover for Dependencies | ||
|
||
A tiny, new feature: hover for dependencies in `.cabal` files. | ||
It shows a link to the `Hackage` documentation of a package. | ||
|
||
<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%> | ||
|
||
This is mostly a proof of concept, we expand on this idea in [PR #4428](https://github.com/haskell/haskell-language-server/pull/4428). | ||
|
||
### GHC Structured Errors | ||
|
||
This release is also the first release which uses GHC's structured errors infrastructure. | ||
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 diagnostics, improving accuracy and maintainability of HLS. | ||
|
||
But it also has the useful side effect of allowing us to integrate with [the Haskell Error Index](https://errors.haskell.org/): | ||
|
||
<img src="error-index.jpeg" alt="A GHC error message, displaying the error code associated with this particular error message." width=70%> | ||
|
||
For anyone wondering how HLS is providing code actions and other LSP features without structured diagnostics... 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). | ||
|
||
We want to replace most of these regexes with structured errors. | ||
Do you want to help? Pick an HLS plugin and hack away! | ||
The [PR #4472](https://github.com/haskell/haskell-language-server/pull/4472) is only the beginning of our efforts! | ||
|
||
### Fixed | ||
|
||
HLS has lots of bugs. In each release we fix a couple and we introduce a couple of new ones. | ||
We can't list all bug fixes, so let's just list a few important ones: | ||
|
||
* [Bugfix: Explicit record fields inlay hints for polymorphic records](https://github.com/haskell/haskell-language-server/pull/4510) | ||
* [Implement fallback handler for `*/resolve` requests](https://github.com/haskell/haskell-language-server/pull/4478) | ||
|
||
## Thank you, Haskell Community | ||
|
||
We wish all Haskellers happy hacking while using the latest release of the Haskell Language Server `2.10.0.0`! | ||
|
||
We want to thank our countless contributors from the community and our Google Summer of Code participants! | ||
This is a community project, and the HLS team is grateful for every contribution, be it documentation, bug fixes or new features. | ||
|
||
Finally, a reminder that you can donate to the development of HLS via [OpenCollective](https://opencollective.com/haskell-language-server). | ||
The OpenCollective money pays for tedious, but important maintenance work and, sometimes, development of new features. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.