chumsky::span

Trait Span

Source
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§

Source

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.

Source

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§

Source

fn new(context: Self::Context, range: Range<Self::Offset>) -> Self

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

Source

fn context(&self) -> Self::Context

Return the span’s context.

Source

fn start(&self) -> Self::Offset

Return the start offset of the span.

Source

fn end(&self) -> Self::Offset

Return the end offset of the span.

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.

Implementations on Foreign Types§

Source§

impl<C: Clone, T: Clone> Span for (C, Range<T>)

Source§

type Context = C

Source§

type Offset = T

Source§

fn new(context: Self::Context, range: Range<T>) -> Self

Source§

fn context(&self) -> Self::Context

Source§

fn start(&self) -> Self::Offset

Source§

fn end(&self) -> Self::Offset

Source§

impl<T: Clone + Ord> Span for Range<T>

Source§

type Context = ()

Source§

type Offset = T

Source§

fn new((): Self::Context, range: Self) -> Self

Source§

fn context(&self) -> Self::Context

Source§

fn start(&self) -> Self::Offset

Source§

fn end(&self) -> Self::Offset

Implementors§