在学习过程中,使用proc-macro2,syn和quote之前,建议先尝试用 Rust 标准库代码实现,这样可以更好的理解这几个库 写宏的过程会强迫你对 Rust 语言的细节有更多的理解 关于proc-macro2 https://crates.io/crates/proc-macro2 https://veykril.github.io/tlborm/proc-macros/third-party-crates.html 由于proc_mac...
//可能属性参数多种多样//#[my_macro_attribute]//#[my_macro_attribute=something]#[my_macro_attribute(post)]//这是例子的使用情况fn my_func() {//...} 实现过程 #[proc_macro_attribute] pub fn rust_decorator(attr: TokenStream, func: TokenStream)->TokenStream { let func= parse_macro_input!
proc-macro2 = "1.0" [lib] proc-macro = true 1. 2. 3. 4. 5. 6. 7. 而编写过程宏,在stable版本里,我们需要借助三个crate: syn,这个是用来解析语法树(AST)的。各种语法构成 quote,解析语法树,生成rust代码,从而实现你想要的新功能。 proc_macro(std)和proc_macro2(3rd-party) 实现init的属性宏 ...
Meanwhile proc_macro2 types may exist anywhere including non-macro code. By developing foundational libraries like syn and quote against proc_macro2 rather than proc_macro, the procedural macro ecosystem becomes easily applicable to many other use cases and we avoid reimplementing non-macro ...
proc-macro2 = "^0.4.6" quote = "^0.6.3" syn = "^0.14.2" syn:用来解析tokenstream,并且提供各种字符串转成token的方法类型 quote: 主要用到一个宏quote!,用来将字符串和token类型拼接的大字符串转换成tokenstream交还给编译器 proc-macro2:一些稳定的proc macro接口实现 ...
use proc_macro2::TokenStream; use std::str::FromStr; use syn; use quote; fn main() { let ts = TokenStream::from_str("fn foo() {}").unwrap(); let _ts_str = ts.to_string(); let parsed = syn::parse_macro_input!(ts); ...
proc-macro-error = "1.0" syn = "1.0" proc-macro-error2 = "2.0" syn = "2.0" quote = "1.0" codespan-reporting = "0.11" pio = { path = "..", version = "0.2.0" } 2 changes: 1 addition & 1 deletion 2 pio-proc/src/lib.rs Original file line numberDiff line numberDiff lin...
EN我在玩Rust的过程宏,我想要做一个自定义的有趣的属性,将它的TokenStream中的所有字符串文字转换成...
A.v2 # 这个是错的。a = A()a.v2 # 这个是可以访问的。局部变量只在函数内部生效 ...
proc-macro = true path = "src/lib.rs" 而编写过程宏,在stable版本里,我们需要借助三个crate: syn,这个是用来解析语法树(AST)的。各种语法构成 quote,解析语法树,生成rust代码,从而实现你想要的新功能。 proc_macro(std)和proc_macro2(3rd-party) ...