GHC plugin for hlint.
This package provides a GHC plugin that runs hlint
on the compiled module. The main advantages of doing this are: (A) better integration with GHC tooling, (B) only linting modules that change, and (C) only parsing the module once. . Note that this package will only build if you build the hlint
dependency with -f-ghc-lib
and build the ghc-lib-parser-ex
dependency with -fno-ghc-lib
hlint-plugin
This is a revival of the splint
project to create an hlint
plugin for GHC.
The main advantages of doing this are:
Better integration with GHC tooling
Now
hlint
errors will appear directly in your tools (e.g.cabal build ghcid
,haskell-language-server
) instead of you having to runhlint
out of band.You only have to lint modules that you rebuild
You don't have to parse the module twice
In order to build this plugin, you will need to:
- build the
hlint
package with the-f-ghc-lib
cabal configure option - build the
ghc-lib-parser-ex
package with the-fno-ghc-lib
cabal configure option
To use this plugin, add this package as a build dependency and then enable the following GHC options (typically in the ghc-options:
field of your .cabal
file):
-fplugin HLint.Plugin
You can pass command-line options to hlint
using -fplugin-opt
, like this:
-fplugin HLint.Plugin -fplugin-opt='HLint.Plugin:--ignore=Redundant guard'
Development
This repository uses Nix for development. You can build this package entirely using Nix for a specific version of ghc
by running:
$ nix develop .#ghc${MAJOR}${MINOR}
… replacing ${MAJOR}
and ${MINOR}
with the major and minor version of the ghc
that you're using. For example, if you're using GHC 9.4, then you'd run:
$ nix build .#ghc94
If you want to develop interactively using Cabal inside of a Nix shell, run:
$ nix develop .#ghc${MAJOR}${MINOR}
Once you are inside that Nix shell, then you can use cabal
commands, like cabal build
or cabal repl
. You can also use ghcid
or launch your favorite IDE from inside this shell.
To check that this plugin works for all supported GHC versions, run:
$ nix flake check