superpower icon indicating copy to clipboard operation
superpower copied to clipboard

Long-form error messages

Open nblumhardt opened this issue 9 years ago • 2 comments

Superpower produces errors that carry a location, error message fragment, and expectations.

By default, the result types' ToString() formats these into one-line messages as in this test case:

AssertParser.FailsWithMessage(alternating, "123 abc 123 123", new SExpressionTokenizer(),
    "Syntax error (line 1, column 13): unexpected number `123`, expected atom.");

This is a good default, but in some applications (especially those that produce output for terminals) a multi-line error can provide more context.

This is an example from FParsec:

Failure: Error in Ln: 1 Col: 6
1.25E 3
     ^
Expecting: decimal digit

Using the information available to Superpower,

Unexpected number `123`, expected atom
 ---> line 1, column 13
  | 
1 | 123 abc 123 123
  |             ^^^ expected atom

It would be nice to show the preceding and following lines if available. The new rustc error formatting sets the benchmark here.

nblumhardt avatar Oct 25 '16 03:10 nblumhardt

To avoid fiddling with the case of the message fragment:

Syntax error: unexpected number `123`, expected atom
 --> line 1, column 13
  | 
1 | 123 abc 123 123
  |             ^^^ expected atom

nblumhardt avatar Oct 25 '16 03:10 nblumhardt

Made some small improvements in https://github.com/datalust/superpower/pull/38 that should help with this (see the linked screenshot and example program).

nblumhardt avatar May 30 '18 09:05 nblumhardt