#lark #error

nightly lark-error

Representation of an error in the Lark compiler

1 unstable release

0.1.0 Jan 15, 2019

#8 in #lark

Download history 14/week @ 2025-09-19 38/week @ 2025-09-26 16/week @ 2025-10-03 14/week @ 2025-10-10 45/week @ 2025-10-17 31/week @ 2025-10-24 29/week @ 2025-10-31 20/week @ 2025-11-07 20/week @ 2025-11-14 24/week @ 2025-11-21 22/week @ 2025-11-28 19/week @ 2025-12-05 23/week @ 2025-12-12 27/week @ 2025-12-19 16/week @ 2025-12-26 24/week @ 2026-01-02

90 downloads per month
Used in 13 crates (10 directly)

Custom license

52KB
1.5K SLoC

Types for tracking errors through queries.

Here is how it works:

  • Queries that can themselves report errors return WithError<T>; the errors contained in that value were discovered during executing that query.
  • If another query uses the result of a query that returns WithError, it can just use into_value to ignore the errors -- WithError always includes some form of sentinel value that you can use (i.e., you can just ignore the errors and try to get on with life).
  • In the worst case, one can you Result<T, ErrorReported> and have Err(ErrorReported) act as a sentintel value for "failed to produce a value because of some error". This is not preferred because now downstream queries have to care whether you propagated an error or not, but sometimes it's the best/easiest thing to do.
    • To help with this, the or_sentinel! query acts as a kind of ? operator for bridging a Result<T, ErrorReported> into a U where U has a proper sentinel -- if the result is Err(ErrorReported), it creates the error-sentinel for U and returns it.
    • This relies on the ErrorSentinel trait, which defines the error-sentinel for a given type.

This scheme is not the most ergonomic and I would like to change it, but it will do for now. -nikomatsakis


Representation of an error in the Lark compiler.

For more information, see the main readme and internals doc.

Dependencies

~7–10MB
~204K SLoC