pub trait Span: Clone {
    type Context: Clone;
    type Offset: Clone;

    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

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.

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

Create a new span given a context and an offset range.

Return the span’s context.

Return the start offset of the span.

Return the end offset of the span.

Implementations on Foreign Types

Implementors