MIT licensed by comp
Maintained by [email protected]
This version can be pinned in stack with:errata-0.4.0.0@sha256:6e0d78add9ec128e3c61b70350b0bf4d2a98b48a28ee6dd775779bc97e707af7,2335

Module documentation for 0.4.0.0

Used by 1 package in nightly-2022-10-31(full list with versions):

Errata

MIT License Hackage CI

Errata is an extremely customizable error pretty printer that can handle many kinds of error formatting.

Features

Errata can handle errors that are all over the source or errors that are connected to each other spanning multiple lines. You can be as simple or as fancy as you like!

You can also customize the format of the printer in several ways:

  • Custom messages and labels
  • Custom character sets for symbols
  • Highlighting the source, messages, and symbols

Examples

A clean, modern error message that is trying to be helpful:

An error message that points out that the fold function was not found in scope. It then asks if the user meant to use foldl or foldr

A busy error message with underlining and connections:

An error message that highlights mismatching types in an if expression. The first section underlines the mismatching values, and the second section underlines the if expression

Changes

Changelog

Errata uses PVP Versioning.

0.4.0.0

  • Added styling individual pointers with PointerStyle (e.g. characters, highlighting).

    • This changes how styleLine and highlight works and moves styleUnderline to PointerStyle.

    • This also adds a PointerStyle parameter to the helper functions so e.g. blockSimple fancyStyle ... should now be blockSimple fancyStyle fancyPointer ....

    • Crazy example from the tests (you can imagine coloring things differently):

      an error
      --> here:1:1
        |
      1 | abcdefghijk
        |  ..  ~~  ^^ z
        |  |   :
        |  |   2 y
        |  1 x
      2 | lmnopqrstuv
        |     ''' w
      an error occurred here
      
  • Moved existing and added new premade styles to Errata.Styles. Errata no longer exports premade styles. Also moved highlight there.

  • Added support for characters with different widths (full-width, combining characters, others). The cabal flag usewcwidth (default false) can be enabled to use the native wcwidth function.

  • Added support for replacing tabs with spaces with the styleTabWidth option in Style (defaults to 4).

  • Added option for the lines before and after the omission line with styleExtraLinesAfter and styleExtraLinesBefore in Style.

  • Added option for padding lines before and after the source stylePaddingTop and stylePaddingBottom in Style.

  • Added option for disabling the hook with styleEnableHook in PointerStyle.

  • Added option for toggling all decorations completely with styleEnableDecorations in Style. Useful if you only want highlighting and not underlining. Combine with stylePaddingTop = False for a compact source code block.

  • Added option for toggling the line prefixes with styleEnableLinePrefix in Style.

  • Added Show instances to all the types. Style functions are applied to some sample text.

  • Changed Monoid constraint of Source to just requiring an emptySource value.

  • Fixed trailing whitespace in the omission line.

0.3.0.0

  • Support GHC 9.0.1 (and eventually 9.2).

  • Optimized rendering of errors (#5). Huge thanks to RiugaBachi for this! This also adds a Monoid constraint to Source.

  • Reworked the pretty printer so that it no longer prints trailing whitespace in most places.

  • Removed the errataBlock field, and only use errataBlocks. Now, an Errata can have no blocks attached to it at all. They will also no longer be sorted beforehand, as that should be up to the user.

  • Removed prettyErrorsNE, as it is no longer useful for what it was documented for.

  • Fixed the rendering of Blocks with no Pointers adding extra blank lines.

0.2.0.0

  • Added new blockHeader field to Block, which will put text underneath the location text but above the source lines. This also affects all the block helper functions, which now have an argument for the header.

  • The blockSimple and blockSimple' functions are now passed tuples of positions and labels instead of Ints, which is more consistent with the rest of the helper functions.

  • Defined type synonyms for line, column, headers, bodies, and labels, for the purpose of documentation. It should be much easier to know what is expected by just reading the types now.

  • Use GHC.Arr.Array for keeping source lines, which should be faster for indexing and should not force the individual lines until they are needed.

0.1.0.0

  • Initial release.