如何在编译器插件中获取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
我的两个Article
和Comment
特质FieldsMapping
:
pub trait FieldsMapping {
fn get_fields_map(&self) -> HashMap<String, usize>;
}
我想自定义导出FieldsMapping
写一个编译器插件。
我的问题是:我如何获得编译器插件中的所有字段?我怎么能知道字段类型是Vec
或其他?
答
你没有。
编译器插件(即过程宏)在此信息存在之前展开,因此您无法访问它。不,你不能在类型存在之前延迟扩展。不,如果你把它变成皮棉,你就不能生成代码,这就违背了创建程序宏的目的。