[ANN] pp_loc 2.0

Do you know how OCaml now displays errors by quoting back part of the source, highlighting the faulty part? For instance, with a single-line error location:

File "foo.ml", line 1, characters 12-14:
1 | let foo x = yy + 1;;
                ^^

or a multi-line location:

File "bar.ml", lines 3-5, characters 10-10:
3 | ..........function
4 |   | A -> 0
5 |   | B -> 1

Do you have your own language/configuration file/… parser or typechecker, that could benefit from nice, user-friendly error messages?


The pp_loc library provides an easy-to-use implementation of the same source-quoting mechanism that is used in the OCaml compiler. It provides a single function pp which will display the relevant part of the input given the location(s) of the error.

val pp : 
  ?max_lines:int ->
  input:Input.t ->
  Format.formatter ->
  loc list ->
  unit

(As one can see from the signature, pp also supports displaying several locations at once on the same source snippet, for multi-location errors.)

The full documentation is available online, and the library is available on opam (opam install pp_loc).

This new version, thanks to the contribution of @c-cube, makes the loc type more flexible. It should now be easy to create source locations that can be passed to pp, however you represent them in your parser (be it as (line,column) pairs, offsets, or any combination of those…). For more details, see the Pp_loc.Position module.

I am completely open to more PRs or ideas for improving the library further, and displaying source locations in even nicer ways!

Happy error message printing!

18 Likes