小编cam*_*rcu的帖子

如何在 Rust 中使用 proc_macro_attribute 修改所有字符串文字?

我正在摆弄 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!” 在编译时。例子: …

rust rust-proc-macros

1
推荐指数
1
解决办法
1481
查看次数

标签 统计

rust ×1

rust-proc-macros ×1