Struct proc_macro::Span

1.29.0 · source ·
pub struct Span(/* private fields */);
Expand description

A region of source code, along with macro expansion information.

Implementations§

source§

impl Span

source

pub fn def_site() -> Span

🔬This is a nightly-only experimental API. (proc_macro_def_site #54724)

A span that resolves at the macro definition site.

1.29.0 · source

pub fn call_site() -> Span

The span of the invocation of the current procedural macro. Identifiers created with this span will be resolved as if they were written directly at the macro call location (call-site hygiene) and other code at the macro call site will be able to refer to them as well.

1.45.0 · source

pub fn mixed_site() -> Span

A span that represents macro_rules hygiene, and sometimes resolves at the macro definition site (local variables, labels, $crate) and sometimes at the macro call site (everything else). The span location is taken from the call-site.

source

pub fn source_file(&self) -> SourceFile

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

The original source file into which this span points.

source

pub fn parent(&self) -> Option<Span>

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

The Span for the tokens in the previous macro expansion from which self was generated from, if any.

source

pub fn source(&self) -> Span

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

The span for the origin source code that self was generated from. If this Span wasn’t generated from other macro expansions then the return value is the same as *self.

source

pub fn byte_range(&self) -> Range<usize>

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

Returns the span’s byte position range in the source file.

source

pub fn start(&self) -> Span

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

Creates an empty span pointing to directly before this span.

source

pub fn end(&self) -> Span

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

Creates an empty span pointing to directly after this span.

source

pub fn line(&self) -> usize

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

The one-indexed line of the source file where the span starts.

To obtain the line of the span’s end, use span.end().line().

source

pub fn column(&self) -> usize

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

The one-indexed column of the source file where the span starts.

To obtain the column of the span’s end, use span.end().column().

source

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

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

Creates a new span encompassing self and other.

Returns None if self and other are from different files.

1.45.0 · source

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

Creates a new span with the same line/column information as self but that resolves symbols as though it were at other.

1.45.0 · source

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

Creates a new span with the same name resolution behavior as self but with the line/column information of other.

source

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

🔬This is a nightly-only experimental API. (proc_macro_span #54725)

Compares two spans to see if they’re equal.

1.66.0 · source

pub fn source_text(&self) -> Option<String>

Returns the source text behind a span. This preserves the original source code, including spaces and comments. It only returns a result if the span corresponds to real source code.

Note: The observable result of a macro should only rely on the tokens and not on this source text. The result of this function is a best effort to be used for diagnostics only.

source

pub fn error<T: Into<String>>(self, message: T) -> Diagnostic

🔬This is a nightly-only experimental API. (proc_macro_diagnostic #54140)

Creates a new Diagnostic with the given message at the span self.

source

pub fn warning<T: Into<String>>(self, message: T) -> Diagnostic

🔬This is a nightly-only experimental API. (proc_macro_diagnostic #54140)

Creates a new Diagnostic with the given message at the span self.

source

pub fn note<T: Into<String>>(self, message: T) -> Diagnostic

🔬This is a nightly-only experimental API. (proc_macro_diagnostic #54140)

Creates a new Diagnostic with the given message at the span self.

source

pub fn help<T: Into<String>>(self, message: T) -> Diagnostic

🔬This is a nightly-only experimental API. (proc_macro_diagnostic #54140)

Creates a new Diagnostic with the given message at the span self.

Trait Implementations§

1.29.0 · 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
1.29.0 · source§

impl Debug for Span

Prints a span in a form convenient for debugging.

source§

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

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

impl MultiSpan for Span

source§

fn into_spans(self) -> Vec<Span>

🔬This is a nightly-only experimental API. (proc_macro_diagnostic #54140)
Converts self into a Vec<Span>.
1.29.0 · source§

impl Copy for Span

1.29.0 · source§

impl !Send for Span

1.29.0 · source§

impl !Sync for Span

Auto Trait Implementations§

§

impl Freeze for Span

§

impl RefUnwindSafe 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: Copy,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit #126799)
Performs copy-assignment from self to dst. Read more
source§

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

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit #126799)
Performs copy-assignment from self to dst. 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,

§

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.