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
hlinterrors will appear directly in your tools (e.g.cabal buildghcid,haskell-language-server) instead of you having to runhlintout 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
hlintpackage with the-f-ghc-libcabal configure option - build the
ghc-lib-parser-expackage with the-fno-ghc-libcabal 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.PluginYou can pass command-line options to hlint using -fplugin-opt, like this:
-fplugin HLint.Plugin -fplugin-opt='HLint.Plugin:--ignore=Redundant guard'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 .#ghc94If 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