1 unstable release
0.1.0 | Jan 15, 2019 |
---|
#7 in #lark
Used in 13 crates
(10 directly)
52KB
1.5K
SLoC
Representation of an error in the Lark compiler.
For more information, see the main readme and internals doc.
lib.rs
:
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 useinto_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 haveErr(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 aResult<T, ErrorReported>
into aU
whereU
has a proper sentinel -- if the result isErr(ErrorReported)
, it creates the error-sentinel forU
and returns it. - This relies on the
ErrorSentinel
trait, which defines the error-sentinel for a given type.
- To help with this, the
This scheme is not the most ergonomic and I would like to change it, but it will do for now. -nikomatsakis
Dependencies
~7–14MB
~205K SLoC