Skip to content

Latest commit

 

History

History
34 lines (30 loc) · 1.1 KB

File metadata and controls

34 lines (30 loc) · 1.1 KB

使用 syn crate 可以实现对 rust 代码的解析,也可以添加自定义的 derive 宏。

读取并解析rust代码

    let input = "./src/input.rs";
    let file_content = std::fs::read_to_string(&input).expect("Unable to read file");
    let syntax = syn::parse_file(&file_content).expect("Unable to parse file");

遍历语法树,并查看解析结果

   // 遍历语法树
    for item in syntax.items.iter() {
        match item {
            Item::Struct(s) => {
                let struct_name = s.ident.clone();
                let struct_name_ref = format_ident!("{}Ref", struct_name);
                let mut field_names = Vec::with_capacity(s.fields.len());
                for field in s.fields.iter() {
                    let field_name = field
                        .clone()
                        .ident;
                    field_names.push(field_name);
                }
                println!("{}", struct_name);
                println!("{}", struct_name_ref);
                println!("{:?}", field_names);
            }
            _ => continue,
        }
    }