Skip to content

MercuryTechnologies/hlint-plugin

Repository files navigation

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 run hlint 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

Releases

No releases published

Packages

No packages published