proc_macro

结构体 Span

1.29.0 · 源代码
pub struct Span(/* private fields */);
展开描述

源代码的区域,以及宏展开信息。

实现§

源代码§

impl Span

源代码

pub fn def_site() -> Span

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_def_site #54724)

一个在宏定义位置解析的 span。

1.29.0 · 源代码

pub fn call_site() -> Span

当前过程宏调用的 span。使用此 span 创建的标识符将像在宏调用位置直接编写一样解析(调用点卫生),并且宏调用位置的其他代码也将能够引用它们。

1.45.0 · 源代码

pub fn mixed_site() -> Span

一个表示 macro_rules 卫生的 span,有时在宏定义位置解析(局部变量、标签、$crate),有时在宏调用位置解析(其他所有内容)。span 位置取自调用点。

源代码

pub fn source_file(&self) -> SourceFile

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

此 span 指向的原始源文件。

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

如果存在,则 self 从中生成的先前宏展开中的令牌的 Span

源代码

pub fn source(&self) -> Span

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

self 从中生成的原始源代码的 span。如果此 Span 不是从其他宏展开生成的,则返回值与 *self 相同。

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

返回 span 在源文件中的字节位置范围。

源代码

pub fn start(&self) -> Span

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

创建一个指向此 span 正前方的空 span。

源代码

pub fn end(&self) -> Span

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

创建一个指向此 span 正后方的空 span。

源代码

pub fn line(&self) -> usize

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

span 开始处的源文件的以 1 为索引的行。

要获取 span 结尾的行,请使用 span.end().line()

源代码

pub fn column(&self) -> usize

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

span 开始处的源文件的以 1 为索引的列。

要获取 span 结尾的列,请使用 span.end().column()

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

创建一个包含 selfother 的新 span。

如果 selfother 来自不同的文件,则返回 None

1.45.0 · 源代码

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

创建一个与 self 具有相同行/列信息的新 span,但解析符号时就像它在 other 一样。

1.45.0 · 源代码

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

创建一个与 self 具有相同名称解析行为的新 span,但具有 other 的行/列信息。

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_span #54725)

比较两个 span 以查看它们是否相等。

1.66.0 · 源代码

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

返回 span 后面的源代码文本。这保留了原始源代码,包括空格和注释。仅当 span 对应于实际源代码时,它才返回结果。

注意:宏的 observable 结果应该只依赖于令牌,而不依赖于此源代码文本。此函数的结果是一个最佳努力,仅用于诊断。

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_diagnostic #54140)

在 span self 处使用给定 message 创建新的 Diagnostic

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_diagnostic #54140)

在 span self 处使用给定 message 创建新的 Diagnostic

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_diagnostic #54140)

在 span self 处使用给定 message 创建新的 Diagnostic

源代码

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

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_diagnostic #54140)

在 span self 处使用给定 message 创建新的 Diagnostic

Trait 实现§

1.29.0 · 源代码§

impl Clone for Span

源代码§

fn clone(&self) -> Span

返回值的副本。阅读更多
1.0.0 · 源代码§

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

source 执行复制赋值。阅读更多
1.29.0 · 源代码§

impl Debug for Span

以方便调试的形式打印 span。

源代码§

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

使用给定的格式化程序格式化值。阅读更多
源代码§

impl MultiSpan for Span

源代码§

fn into_spans(self) -> Vec<Span>

🔬这是一个仅在 nightly 版本中可用的实验性 API。(proc_macro_diagnostic #54140)
self 转换为 Vec<Span>
1.29.0 · 源代码§

impl Copy for Span

1.29.0 · 源代码§

impl !Send for Span

1.29.0 · 源代码§

impl !Sync for Span

自动 Trait 实现§

§

Span 实现 Freeze trait。

§

Span 实现 RefUnwindSafe trait。

§

Span 实现 Unpin trait。

§

Span 实现 UnwindSafe trait。

通用的实现§

源码§

为所有类型 T 实现 Any trait。
其中 T 需要满足 'static + ?Sized 的约束。

源码§

fn type_id(&self) -> TypeId

获取 selfTypeId阅读更多
源码§

为所有类型 T 实现 Borrow<T> trait。
其中 T 需要满足 ?Sized 的约束。

源码§

fn borrow(&self) -> &T

从所有权的值不可变地借用。阅读更多
源码§

为所有类型 T 实现 BorrowMut<T> trait。
其中 T 需要满足 ?Sized 的约束。

源码§

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

从所有权的值可变地借用。阅读更多
源码§

为所有实现了 Clone trait 的类型 T 实现 CloneToUninit trait。
其中 T 需要满足 Clone 的约束。

源码§

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

🔬这是一个仅限 nightly 版本的实验性 API。(clone_to_uninit #126799
执行从 selfdst 的复制赋值。阅读更多
源码§

为所有类型 T 实现 From<T> trait。

源码§

fn from(t: T) -> T

返回未更改的参数。

源码§

为所有类型 TU 实现 Into<U> trait。
其中 U 需要满足 From<T> 的约束。

源码§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换是 From<T> for U 的实现选择执行的任何操作。

源码§

为所有类型 T 实现 ToOwned trait。
其中 T 需要满足 Clone 的约束。

源码§

type Owned = T

获取所有权后的结果类型。
源码§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常通过克隆。阅读更多
源码§

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

使用借用的数据替换拥有的数据,通常通过克隆。阅读更多
源码§

为所有类型 TU 实现 TryFrom<U> trait。
其中 U 需要满足 Into<T> 的约束。

源码§

type Error = Infallible

转换错误时返回的类型。
源码§

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

执行转换。
源码§

为所有类型 TU 实现 TryInto<U> trait。
其中 U 需要满足 TryFrom<T> 的约束。

源码§

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

转换错误时返回的类型。
源码§

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

执行转换。