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进程宏

Download history 492/week @ 2024-03-14 533/week @ 2024-03-21 983/week @ 2024-03-28 566/week @ 2024-04-04 558/week @ 2024-04-11 829/week @ 2024-04-18 498/week @ 2024-04-25 177/week @ 2024-05-02 386/week @ 2024-05-09 43/week @ 2024-05-16 35/week @ 2024-05-23 189/week @ 2024-05-30 282/week @ 2024-06-06 122/week @ 2024-06-13 680/week @ 2024-06-20 635/week @ 2024-06-27

每月下载 1,776
3 库中使用(2 个直接使用)

MIT 许可证

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