MyNixOS website logo
Description

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 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
Metadata

Version

1.0.2

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows