我正在开发一个Rust插件,该插件需要访问特征绑定的绝对路径。实际上,这意味着对于以下代码,我想将Debug
的完整路径解析为std::fmt::Debug
。
use std::fmt::*;
#[foo]
trait Foo: Debug {}
我目前的方法是采用Annotatable
为我提供的MultiItemDecorator
并将其模式匹配到
Annotatable::Item
,其中我将.node
与ItemKind::Trait
匹配。然后,我将.generic_bounds
与GenericBound::Trait
的集合进行匹配,并在其中检索.trait_ref.path
。
但是此结构仅包含path(Debug)
,对我来说这是不够的信息。
答案 0 :(得分:6)
你不能。
The Rustc Driver:
[…]编译器的主要阶段是:
- 解析输入:初始板条箱解析
- 配置和扩展:解析
#[cfg]
属性,名称解析和扩展宏- 运行分析合格:运行特征解析,类型检查,区域检查和其他杂项分析都通过箱子
- 转换为LLVM:转换为LLVM IR的内存形式,并将其转换为可执行文件/目标文件
(强调是我的)
在特征解析完成之前会扩展宏,因此在运行插件时,除源代码中给出的名称外,对此Debug
一无所知。