5个版本
0.1.13 | 2021年11月9日 |
---|---|
0.1.12 | 2021年11月9日 |
0.1.11 | 2021年5月12日 |
0.1.1 | 2021年5月12日 |
0.1.0 | 2021年5月11日 |
328 在 进程宏 中
每月下载 1,776 次
在 3 个 库中使用(2 个直接使用)
14KB
131 行
procout
- 是什么: 将进程宏的输出打印到文件。
- 为什么: 通过明确行号而不是在调试Rust中的进程宏时经常出现的不可避免的不透明错误来简化调试。
- 如何: 在你的进程宏中添加一个函数调用并使用命令行功能。
这取决于进程宏是否被编译成代码。如果它还没有到达编译阶段,它必须先到达那里,这样才会产生有用的输出。
如何
给定一个构造如下所示的进程宏,
use proc_macro::{TokenStream};
use proc_macro2::{Span};
use quote::{quote};
use syn::{Ident};
#[proc_macro]
pub fn ast(input: TokenStream) -> TokenStream {
let module_ident = Ident::new("this_module", Span::mixed_site());
let code_block: proc_macro2::TokenStream = quote!{
pub mod #module_ident {
/* ... some truly fantastic code, well done ... */
}
};
// Convert and return the code
TokenStream::from(code_block)
}
只需在转换和返回步骤之前插入对procout的调用。
use proc_macro::{TokenStream};
use proc_macro2::{Span};
use procout::{procout}; // Look!
use quote::{quote};
use syn::{Ident};
#[proc_macro]
pub fn ast(input: TokenStream) -> TokenStream {
let module_ident = Ident::new("this_module", Span::mixed_site());
let code_block: proc_macro2::TokenStream = quote!{
pub mod #module_ident {
/* ... some truly fantastic code, well done ... */
}
};
// Look!
procout(&code_block, Some(module_ident), Some("a/valid/path/string"));
// Convert and return the code
TokenStream::from(code_block)
}
通过调用 cargo test --features procout
,代码将打印到由 module_ident
指定的文件中。默认情况下,路径字符串是本地 tests
目录,所以 在 第一次使用 procout
功能后,可以运行类似 cargo test --test module_ident
的命令,从而从编译器中获得更好的错误信息。
现在具有这些出色的 新 功能
- 将生成一个单元测试模块,其中包含一个不执行任何操作的测试,该测试仅导入在
module_ident
中命名的模块。 module_ident
应该是生成模块的名称。- 如果没有指定路径,默认路径将是当前工作目录的
tests
子文件夹, - 如果没有指定
module_ident
,则默认值为通用时间戳。
警告
这将覆盖指定路径上的任何内容,因此原型设计时要小心。
功能
procout
将宏输出到文件。以禁用此功能的方式调用procout
是一个故意的无操作。formatted
在创建的文件上调用rustfmt
。默认启用,并推荐使用。notification
在成功时打印通知到 stdout。默认启用。
许可:MIT
依赖项
~3MB
~56K SLoC