实际上proc-macro2是基于proc_macro封装的一层,用于服务两方面: 把类似过程宏(proc-macro-like)的功能带入其它上下文,比如build.rs或者main.rs。 使过程宏支持单元测试 由于proc_macro只能在proc_macro类型的crate中使用,所以想在非过程宏的代码中单元测试它们或者使用它们是不可能的。 而proc-macro2可以让我们在非...
由于proc_macro crate 是专门为 proc_macro 类型 crate 设计的,因此使它们可进行单元测试或从非 proc_macro 代码中访问它们几乎是不可能的。鉴于此,proc-macro2 crate 模仿了原始 proc_macro crate 的 API,在 proc_macro crates 中充当包装器,在非 proc_macro crates 中则可独立使用。因此,建议针对 proc_macro...
使用#[proc_macro]属性定义 属性宏 #[proc_macro_attribute]pubfnmy_attribute(input:TokenStream,annotated_item:TokenStream)->TokenStream{TokenStream::new()} 使用#[proc_macro_attribute]属性定义 派生宏 #[proc_macro_derive(MyDerive)]pubfnmy_derive(annotated_item:TokenStream)->TokenStream{TokenStream::new(...
在proc_macro_crate下Cargo.toml添加: # 表示这个crate是过程宏[lib]proc-macro=true[dependencies]proc-macro2="1.0.7"quote="1"syn= { version ="1.0.56", features = ["full","extra-traits"] }# "extra-traits"方便后续打印调试信息 proc_macro2:是对proc_macro的封装,是由 Rust 官方提供的。 syn...
[lib]proc-macro=true# 开启过程宏 # 引入如下三个crate的原因 参考上面编译过程图:在生成最终的TokenStream前,需要依赖这三个crate[dependencies]proc-macro2="1.0.34"syn={version="1.0.82",feature="full"}quote="1.0.10" 项目结构 过程宏需要定义在一个单独的crate中,主要是因为过程宏是一段在编译crate前...
在Rust中,属性宏是一种特殊的宏,它允许开发者在代码上方添加自定义的属性,并在编译期间对代码进行处理。属性宏使用proc_macro_attribute属性来定义,其基本形式如下: 代码语言:javascript 复制 extern crate proc_macro;use proc_macro::TokenStream;#[proc_macro_attribute]pub fnattribute_macro(attr:TokenStream,item...
cargo tree命令极大地帮助了查找依赖项,并检查需要std的所有依赖项是否依赖于proc-macrocrate(如树中所...
更好的proc_macro更方便的接口,能和syn、quote一起更好的配合应用。 什么是过程宏? 过程宏(Procedure Macro)是Rust中的一种特殊形式的宏,它将提供比普通宏更强大的功能。方便起见,本文将Rust中由macro_rules!定义的宏称为规则宏以示区分。
# cargo.toml[lib]proc-macro=true// lib.rsextern crate proc_macro; 然后,最基本的proc macro可以是一个简单的编译期函数(注意,此场景下不如直接编写另一种宏来的方便快捷) useproc_macro::TokenStream;#[proc_macro]pubfnhello_proc_macro(_:TokenStream)->TokenStream{"\"HelloWorld\"...
在Rust中,类函数宏是一种特殊的宏,它允许开发者创建类似函数调用的宏,并在编译期间对代码进行生成和转换。类函数宏使用proc_macro模块中的TokenStream类型来处理输入和输出。类函数宏的定义基本形式如下: 代码语言:javascript 复制 extern crate proc_macro;use proc_macro::TokenStream;#[proc_macro]pub fnfunction_...