私の目標は、関数に注釈を付けてその引数を出力するために使用できる単純な属性 proc マクロを作成することです。
例:
#[print_arguments]
fn add(a:u64, b:u64) -> u64 {
a + b
}
引用符を使用して、スコープ内のトークンを補間し、synで錆びたコードの断片を解析できます。だから私は次のことを試しました:
#[proc_macro_attribute]
pub fn print_arguments(_: TokenStream, item: TokenStream) -> TokenStream {
let fn_type = parse_macro_input!(item as ItemFn);
let signature = fn_type.sig;
let ident = signature.ident;
let arguments = signature.inputs;
let return_type = signature.output;
let mut args = arguments.iter();
let fn_arg = args.next().expect("msg");
let block = fn_type.block;
TokenStream::from(quote! {
fn #ident ( #arguments ) #return_type {
println!("enhanced function {:?}", #(#args)*); // this one seems wrong, as it would iterate over FnArg, which is an enum.
#block
}
})
}
FnArg ident(ifiers) にアクセスする可能性はありますか?