Changelog for haskell-language-server-0.9.0.0

Changelog for haskell-language-server

0.9.0

This release includes lot of refactorings and bug fixes over existing features, hlint and eval plugins among others. It contains a fix for a bug in ghcide involving stale diagnostics (#1204).

The list of contributors continues to show healthy growth, many thanks to you all!

And remember, we have a new brand logo, courtesy of @Ailrun :slightly_smiling_face:

haskell-language-server

Pull requests merged for 0.9.0

0.8.0

gif

Thanks to all contributors and happy new year!

Pull requests merged for 0.8.0

0.7.1

Pull requests merged for 0.7.1

0.7.0

Thanks to all haskell-language-server, ghcide and other upstream packages contributors (the list continue growing healthy) for make this release possible.

Pull requests merged for 0.7.0

0.6.0

0.6.0 includes two brand new plugins!

hls-hlint-demo

module-name-demo

This release also includes many improvements and bug fixes for the tactic plugin (see pull requests authored by @isovector for more details).

We have updated two essential tools used by the ide:

Pull requests merged for 0.6.0

0.5.1

0.5.1 is a minor bug fix release, mainly fixing an issue with the eval plugin as well as upgrading the ormolu and stylish-haskell dependencies.

Pull requests merged for 0.5.1

0.5.0

0.5.0 comes with a new tactics plugin which provides case splitting, homomorphic case splitting, and lambda introduction:

Case splitting

It can even attempt to fully fill a hole!

Attempt to fill in hole code action

The imports lens plugin also learnt a new code action to make all imports explicit:

Explicit imports code action

There's also plenty of bug fixes, improvements and updates to the underlying tools, including Fourmolu, implicit-hie-cradle and ghcide. Some of the improvements from ghcide include:

If you're eager to try all this out, haskell-language-server is now also installable via ghcup:

$ ghcup install hls

Pull requests merged for 0.5.0

0.4.0

0.4.0 introduces the import lens plugin, which can convert your import statements into qualified imports, or into an explicit import list:

Imports code lens

The eval plugin has also learnt two new commands, :type and :kind:

{-# LANGUAGE TypeApplications #-}
foo :: Show a => a -> String
foo = show

-- >>> :type foo @Int
-- foo @Int :: Int -> String

-- >>> :type +v foo @Int
-- foo @Int :: Show Int => Int -> String
-- >>> type N = 1
-- >>> type M = 40
-- >>> :kind N + M + 1
-- N + M + 1 :: Nat

-- >>> type N = 1
-- >>> type M = 40
-- >>> :kind N + M + 1
-- N + M + 1 :: Nat

There is now also support for GHC 8.10.2, and a new haskell-language-server --probe-tools command to help debug what version of each tool HLS is using.

$ haskell-language-server --probe-tools
haskell-language-server version: 0.3.0.0 (GHC: 8.10.1) (PATH: /Users/luke/.cabal/store/ghc-8.10.1/hskll-lngg-srvr-0.3.0.0-7c6d48c3/bin/haskell-language-server)
Tool versions found on the $PATH
cabal:  3.2.0.0
stack:  2.3.3
ghc:    8.10.2

Pull requests merged for 0.4.0

0.3.0

0.3.0 comes with two new plugins, retrie and fourmolu, provides binaries for GHC 8.8.4, and comes with a host of bug fixes.

The retrie plugin supports RULES, functions and type synonyms which can be accessed through contextual code actions.

Fourmolu can be used to format your code by setting the haskell.formattingProvider field in your LSP configuration to

{
  "haskell": {
    "formattingProvider": "fourmolu"
  }
}

The Brittany formatter is now also available on GHC 8.10.1.

Pull requests merged

0.2.2

This changes the configuration section from "languageServerHaskell" to "haskell" to align it with vscode-haskell-1.0.0. Whilst the old section is still supported for now, you should update your LSP configuration (which varies per client) from

{
  "languageServerHaskell": {
    "formattingProvider": "stylish-haskell"
  }
}

to

{
  "haskell": {
    "formattingProvider": "stylish-haskell"
  }
}

Pull requests merged for 0.2.2

0.2.1

This release includes a new eval plugin that allows Haddock code examples to be evaluated through a code lens. For example, the code below will now offer to evaluate intercalate " " example, and will insert the output in the line below.

example :: [String]
example = ["This is an example", "of", "interactive", "evaluation"]

-- >>> intercalate " " example
-- "This is an example of interactive evaluation"
--

This is also the first release to have binaries distributed alongside it. Some behind the scene changes include the GHC library directory now being obtained on the fly, so either ghc, cabal or stack will need to be present on your PATH depending on your project. See docs/releases.md for more information. If you find any issues with this, please let us know!

Pull requests merged for 0.2.1

0.2

0.1

In this version

Changes

This is the initial version, so too many to list individually.

The key point is that is now supports multi-component cradles, and has been in daily use by the developers for some time.

It still does not have feature parity with haskell-ide-engine, but it is currently useful.