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的属性宏 ...
fn fmt(&self, f: &mut std::fmt::Formatter) ->std::fmt::Result {//#(#get_self),*,这是多重匹配,生成的样子大概是这样:&self.a, &self.b, &self.c, ...//用法和标准宏有点像,关于多个匹配,可以看这个文档//https://docs.rs/quote/1.0.0/quote/macro.quote.htmlwrite!(f,"{} {:?}...
在学习过程中,使用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...
proc-macro example, using syn 1.0, quote 1.0, proc-macro2 1.0. proc-macro example, using syn 0.15, quote 0.6, proc-macro2 0.4.
fnmy_derive_macro(input:TokenStream)->TokenStream 我们先给之前的结构体简单写一个派生宏吧! 文件名:inner_procs/src/lib.rs useproc_macro::TokenStream;usequote::quote;usesyn::{parse_macro_input,DeriveInput,ItemFn};#[proc_macro_derive(MyDebug)]pubfnmy_debug_derive(input:TokenStream)->TokenStream...
然后我来看quote,quote这个库提供了一些工具用于将rust语法转换为TokenStream,使得用户在编写derive宏的时候可以使用类似macro_rule的方式,以下是该库提供的宏和traits: 同样很基础的英文,应当也是无需翻译的(对吧) 最后是syn,之所以将其放在最后,是该库依赖于上述两个库,加之其本身也比另外两个库复杂许多 ...
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 ...
no_std Hardware Abstraction Layers for ESP32 microcontrollers - [esp-hal-procmacros] Update to proc-macro-error2 (#2090) · esp-rs/esp-hal@4d9ea52
首先,过程宏库的Cargo.toml文件需要标明这是一个proc macro库,并且一般来说,会使用到如下三个库的依赖: [package]name="tool-derive"version="0.1.0"authors= ["piaoliu <441594700@qq.com>"][lib]name="tool_derive"proc-macro=true[dependencies]proc-macro2="^0.4.6"quote="^0.6.3"syn="^0.14.2" ...
package org.lgy.study.enumstudy; public enum Operation{ PLUS,MINUS,MULTI,DIVIDE; ...