Raku Land

Grammar::Message

github:JJ

Grammar message

inspired by [Grammar::PrettyErrors](https://github.com/bduggan/p6-grammar -prettyerrors), and ripping off the code used there for printing messages , prints error messages highlighting the line and, if possible, the position where it last worked.

Installing

zef install Grammar::Message

Running

my $str = (('a'..'z').rotor(3).map: *.join("")).join("\n");
my $saved-match; # Saves in situ
$str ~~ / m { $saved-match = $/} /; # Code right behind match you need printed
say pretty-message( "Found", $saved-match);

Will print

Found
  3 │ ghi
  4 │ jkl
  5 │▶ mno
        ^
  6 │ pqr
  7 │ stu
  8 │ vwx

with highlights for the matching line.

$str .= subst( "m", "mm" );
G.parse( $str );
say pretty-message( "Some failure around here", $saved-match);

will print

Some failure around here
  4 │ jkl
  5 │ mmno
  6 │▶ pqr
     ^
  7 │ stu
  8 │ vwx

Take into account that the point will always be the best bet, and in any case it will reflect the state of the pos attribute of the Match at the point you saved it.

See also

Original code by Brian Duggan in Grammar::PrettyErrors is the origin of this code.

License

Respecting the original code license, this is also licensed under the Artistic license (included).