如何检索Rust编译器插件中绑定的特征的完整路径?

Jan*_*ner 4 rust

我正在研究一个需要访问特征绑定的绝对路径的Rust插件.实际上,这意味着对于以下代码,我想解析Debugas 的完整路径std::fmt::Debug.

use std::fmt::*;

#[foo]
trait Foo: Debug {}
Run Code Online (Sandbox Code Playgroud)

我目前的做法包括采取的AnnotatableMultiItemDecorator为我和图案化,匹配 Annotatable::Item,在这里我匹配.nodeItemKind::Trait.然后我匹配.generic_boundsGenericBound::Trait我检索的集合.trait_ref.path.

但是这个结构只包含path(Debug),这对我来说不够.

mca*_*ton 6

你不能.

Rustc驱动程序:

[...]编译器的主要阶段是:

  1. 解析输入:初始包装解析
  2. 配置和扩展:解析#[cfg]属性,名称解析和扩展宏
  3. 运行分析通行证:在箱子上运行特征分辨率,类型检查,区域检查和其他杂项分析传递
  4. 转换为LLVM:转换为LLVM IR的内存形式,并将其转换为可执行文件/目标文件

(重点是我的)

在完成特性解析之前会扩展宏,因此在运行插件时,Debug除了源代码中给出的名称之外,没有任何事情可知.