Struct Span

Source
pub struct Span {
    pub offset: usize,
    pub len: usize,
}
Expand description

Represents a span in the SourceMap, bounded by an offset and a len

§About offset

The offset of this Span is an absolute offset inside the SourceMap It doesn’t represent the offset relative to the file it was created from. This is done to avoid havind an additional field to identify the source file.

To get the base offset of a Span you can use the SourceMap::get_base_offset_of_span function

Fields§

§offset: usize

Offset of the span

§len: usize

Length of the span

Implementations§

Source§

impl Span

Source

pub const fn dummy() -> Span

Source

pub const fn join(&self, other: &Span) -> Span

Joins two spans together. Returns the smallest Span that covers both.

Source

pub fn slice<'a>(&self, base_offset: usize, src: &'a str) -> &'a str

Slices the given string with this span

base_offset is the base offset of the corresponding SourceFile for this Span

You can also use the SourceMap::slice function

See: about offset

§Examples

Simple example with a single source file

use span::Span;

let src = "abcdefg";
let span = Span {
    offset: 1,
    len: 5,
};
let slice = span.slice(0, src);
assert_eq!("bcdef", slice);

Example with multiple source files

use span::{Span, source::SourceMap};

let src1 = "abcdefghi";
let src2 = "abcdefhij";

let mut source = SourceMap::default();
let offset1 = source.add_file_annon(src1.into()).offset();
let offset2 = source.add_file_annon(src2.into()).offset();

let span1 = Span {
    offset: offset1 + 3,
    len: 4,
};

let span2 = Span {
    offset: offset2 + 4,
    len: 2,
};

let slice1 = span1.slice(offset1, src1);
let slice2 = span2.slice(offset2, src1);

assert_eq!(slice1, "defg");
assert_eq!(slice2, "ef");
Source

pub fn file_position(&self, base_offset: usize, src: &str) -> FilePosition

Gets the file position of this span in the given string slice

base_offset is the base offset of the corresponding SourceFile for this Span

You can also use the SourceMap::file_position function

See: about offset

Source

pub const fn end_offset(&self) -> usize

Returns the end offset of the span. This is, the offset of the span plus it’s length

Trait Implementations§

Source§

impl Clone for Span

Source§

fn clone(&self) -> Span

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Span

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Span

Source§

fn default() -> Span

Returns the “default value” for a type. Read more
Source§

impl Display for Span

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Span

Source§

fn eq(&self, other: &Span) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Span

Source§

impl StructuralPartialEq for Span

Auto Trait Implementations§

§

impl Freeze for Span

§

impl RefUnwindSafe for Span

§

impl Send for Span

§

impl Sync for Span

§

impl Unpin for Span

§

impl UnwindSafe for Span

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.