7个版本 (重大更新)
0.5.0 | 2020年6月26日 |
---|---|
0.4.0 | 2020年6月9日 |
0.3.0 | 2020年1月15日 |
0.2.1 | 2019年12月24日 |
0.0.0 | 2019年7月18日 |
#1088 在 过程宏
每月43次下载
24KB
606 行
归因
归因是一个crate,它使得解析属性风格的过程宏变得和声明一个结构体一样简单。
示例用法
让我们看看它是如何工作的。假设我们想要创建一个名为 ez_trace
的过程宏属性。这个属性会在方法调用的开始和结束处添加自定义消息。下面是一个示例,展示了这个属性的使用方式。
#[ez_trace(start = "Starting...", end = "Ending...")]
fn my_func() {
println!("Do some work");
}
为了解析这样的属性,我们需要在我们的假设过程宏crate中添加以下代码。
lib.rs
#[attr_args]
struct EzTraceArgs {
start: String,
end: String
}
fn ez_trace(attr_ts: TokenStream, func_ts: TokenStream) -> TokenStream {
let args = syn::parse_macro_input!(attr_ts as EzTraceArgs);
/// Remaining macro implementation...
}
使用上述代码,args
将包含字符串值 start
和 end
(分别是 "Starting..."
和 "Ending..."
)。要解析额外的参数,只需向 EzTraceArgs
结构体中添加更多字段。目前支持的类型有:String
、u64
和 bool
。未来将支持更多标准库类型,并且将能够使用自定义类型。
贡献
如果您想进一步支持归因的开发,您可以做一些事情。您可以在这里 提交问题,报告任何遇到的错误或对归因未来版本的功能请求。对于错误,请在问题描述中包含产生错误的最小代码示例,以及您期望发生的情况和实际发生的情况。
我很快会添加一个链接以接受财务捐赠。无论是否有财务捐赠,我都会继续进行项目。如果您觉得归因很有用,并愿意为我买一杯咖啡,我将非常感激。
我现在不想接受拉取请求,因为我觉得在没有对提交者进行经济补偿的情况下征求捐款和接受拉取请求是不道德的。我不想陷入确定捐款公平份额的过程。我也认为项目的范围和代码库足够小,我应该能够及时处理出现的任何问题。
依赖项
~1.5MB
~35K SLoC