pub trait Span: Clone {
type Context: Clone;
type Offset: Clone;
// Required methods
fn new(context: Self::Context, range: Range<Self::Offset>) -> Self;
fn context(&self) -> Self::Context;
fn start(&self) -> Self::Offset;
fn end(&self) -> Self::Offset;
}
Expand description
A trait that describes a span over a particular range of inputs.
Spans typically consist of some context, such as the file they originated from, and a start/end offset. Spans are permitted to overlap one-another. The end offset must always be greater than or equal to the start offset.
Span is automatically implemented for Range<T>
and [(C, Range<T>)
].
Required Associated Types§
sourcetype Context: Clone
type Context: Clone
Extra context used in a span.
This is usually some way to uniquely identity the source file that a span originated in such as the file’s path, URL, etc.
NOTE: Span contexts have no inherent meaning to Chumsky and can be anything. For example, Range<usize>
’s
implementation of Span
simply uses [()
] as its context.
sourcetype Offset: Clone
type Offset: Clone
A type representing a span’s start or end offset from the start of the input.
Typically, usize
is used.
NOTE: Offsets have no inherently meaning to Chumsky and are not used to decide how to prioritise errors. This means that it’s perfectly fine for tokens to have non-continuous spans that bear no relation to their actual location in the input stream. This is useful for languages with an AST-level macro system that need to correctly point to symbols in the macro input when producing errors.