如何在编译器插件中获取struct字段和字段类型?

问题描述:

我想要生成一个使用结构字段作为关键字的HashMap,并使用usize整数作为值。如何在编译器插件中获取struct字段和字段类型?

pub struct Article { 
    title: String, 
    content: String, 
    category: String, 
    comments: Vec<Comment> 
} 

pub struct Comment { 
    content: String 
} 

我的预期输出是:

{ 
    title: 0, 
    content: 1, 
    category: 2 
    comments[].content: 3 
} 

我的解决办法是impl我的两个ArticleComment特质FieldsMapping

pub trait FieldsMapping { 
    fn get_fields_map(&self) -> HashMap<String, usize>; 
} 

我想自定义导出FieldsMapping写一个编译器插件。

我的问题是:我如何获得编译器插件中的所有字段?我怎么能知道字段类型是Vec或其他?

你没有。

编译器插件(过程宏)在此信息存在之前展开,因此您无法访问它。不,你不能在类型存在之前延迟扩展。不,如果你把它变成皮棉,你就不能生成代码,这就违背了创建程序宏的目的。