我正在摆弄 Rust 的过程宏,我想制作一个自定义的有趣属性,将 TokenStream 中的所有字符串文字转换为 SHOUTING CASE。
到目前为止,我的 proc-macro 库中的内容如下amplify:
// lib.rs
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, File};
#[proc_macro_attribute]
pub fn amplify(_attr: TokenStream, item: TokenStream) -> TokenStream {
let input = parse_macro_input!(item as File);
// TODO: modify string literals (LitStr) in token tree to be upper case
let quoted = quote! {#input};
println!("{:#?}", quoted); // just print at compile time to see what is produced
quoted.into()
}
Run Code Online (Sandbox Code Playgroud)
当应用于简单的 hello-world 程序时,它应该变成“Hello, World!” 字符串文字转换为“HELLO, WORLD!” 在编译时。例子: …