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

时间:2018-08-26 20:52:31

标签: rust

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

use std::fmt::*;

#[foo]
trait Foo: Debug {}

我目前的方法是采用Annotatable为我提供的MultiItemDecorator并将其模式匹配到 Annotatable::Item,其中我将.nodeItemKind::Trait匹配。然后,我将.generic_boundsGenericBound::Trait的集合进行匹配,并在其中检索.trait_ref.path

但是此结构仅包含path(Debug),对我来说这是不够的信息。

1 个答案:

答案 0 :(得分:6)

你不能。

  

The Rustc Driver

     

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

     
      
  1. 解析输入:初始板条箱解析
  2.   
  3. 配置和扩展:解析#[cfg]属性,名称解析和扩展宏
  4.   
  5. 运行分析合格:运行特征解析,类型检查,区域检查和其他杂项分析都通过箱子
  6.   
  7. 转换为LLVM:转换为LLVM IR的内存形式,并将其转换为可执行文件/目标文件
  8.   

(强调是我的)

在特征解析完成之前会扩展宏,因此在运行插件时,除源代码中给出的名称外,对此Debug一无所知。