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.
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.