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

时间:2016-09-16 08:33:43

标签: rust rust-compiler-plugin rustc-serialize

我想生成一个使用struct字段作为键的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
}

对于implFieldsMapping,我的解决方案是Article我的特质Comment

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

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

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

1 个答案:

答案 0 :(得分:5)

你没有。

编译器插件(程序宏)在此信息存在之前进行了扩展,因此您无法访问它。不,在类型存在之前,您无法延迟扩展。不,如果你把它变成一个lint,你就不能生成代码,这会破坏程序宏的目的。