# `hlint-plugin` This is a revival of the [`splint` project](https://github.com/tfausak/splint) 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): ```bash -fplugin HLint.Plugin ``` You can pass command-line options to `hlint` using `-fplugin-opt`, like this: ```bash -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: ```ShellSession $ 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: ```ShellSession $ nix build .#ghc94 ``` If you want to develop interactively using Cabal inside of a Nix shell, run: ```ShellSession $ 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: ```ShellSession $ nix flake check ```