MyNixOS website logo
Description

A diagnostics library for Haskell.

Chapelure is a diagnostics library for Haskell.

Chapelure CI-badge simple-haskell

⚠ The 0.0.* series is experimental.

Description

chapelure is a diagnostic library for Haskell, based on the miette library by Kat Marchán

Build

$ cabal build 

Examples

You can provide snippets to be annotated and highlighted:

[L342]: Error: 
 ╭[Code.hs:3:1] 
 │ 
3│ add :: Int
 │        ╰┬╯
 │         ╰ Return type is an “Int”
4│ add = 1 + True
 │           ╰┬─╯
 │            ╰ You tried to pass a “Bool”
 │ Did you check all the types of your arguments?
 │ https://localhost:8888/help/code/L342
 ╯ 

And you can even put multiple highlights per line:

[L342]: Error: 
 ╭[Code.hs:3:1] 
 │ 
3│ add :: Int
 │        ╰┬╯
 │         ╰ Return type is “Int”
4│ add = 1 + True
 │         ┬
 │         ╰ This takes an “Int”
 │           ╰┬─╯
 │            ╰ But you passed a “Bool”
 │ Did you check all the types of your arguments?
 │ https://localhost:8888/help/code/L342
 ╯ 

To generate such a diagnostic, build the appropriate structures and pass it to the renderer:

import Data.Vector.NonEmpty as NEVec
import Chapelure.Types


let helpMessage = "Did you check all the types of your arguments?"
let highlights = NEVec.fromList [
           Source{ label = Just "Return type is “Int”"
                 , line = Line 3
                 , startColumn = Column 8
                 , endColumn = Column 10
                 }
         , Source{ label = Just "This takes an “Int”"
                 , line = Line 4
                 , startColumn = Column 9
                 , endColumn = Column 9
                 }
         , Source{ label = Just "But you passed a “Bool”"
                 , line = Line 4
                 , startColumn = Column 11
                 , endColumn = Column 14
                 }
        ]
let snip = Snippet { location = ("Code.hs", Line 3, Column 1)
                   , highlights = highlights
                   , content = Vec.fromList $ T.lines $ T.pack "add :: Int\nadd = 1 + True"
                   }
let diagnostic = Diagnostic { code = Just "L342"
                            , severity = Error
                            , link = Just "https://localhost:8888/help/code/L342"
                            , help = Just helpMessage
                            , snippets = Just . NEVec.singleton $ snip
                            }

It even outputs in colour!

Acknowledgements

  • Kat Marchán
  • Geoffroy Couprie.
Metadata

Version

0.0.1.0

License

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