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

How to get struct fields and fields type in compiler plugin?

我想生成一个 HashMap,它使用结构字段作为键,并使用 usize 整数作为值。

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 我的特点 FieldsMapping ArticleComment:

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

我想为自定义派生编写一个编译器插件FieldsMapping

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

你没有。

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