5个版本
| 0.1.4 | 2023年5月19日 |
|---|---|
| 0.1.3 | 2023年5月18日 |
| 0.1.2 | 2023年5月16日 |
| 0.1.1 | 2023年5月12日 |
| 0.1.0 | 2023年5月12日 |
#654 在 过程宏 中
每月 52 次下载
23KB
447 行
printer 属性在调用函数时打印函数名称。
属性选项(以逗号分隔)
#[printer($a, ?$b, $3, test, prefix = "ABC ", suffix = " DEF")]
fn foo(a: u32, b: u32, c: u32) -> u32 {
a + b + c
}
它将 #[cfg(test)] println!("ABC foo(a: {a}, b: {b:?}, c: {c}) DEF"); 放置在 foo 的第一行。 $a 表示它应该使用 Display 特性来打印 a 的值。 ? 在 ?$b 处表示它使用 Debug 特性而不是 Display。 $3 指向第三个参数,即 c。如果您想简单地打印所有参数,请编写 all 或 ?all。
test 添加了 #[cfg(test)]。有 3 个配置文件可供选择:test、debug 和 release。如果没有指定配置文件,它将在所有配置文件上运行。也可以指定多个配置文件:#[printer(test, debug)] 将在展开结果中添加 #[cfg(all(test, debug_assertions))]。
不要在后缀和前缀中使用大括号。
如果没有提供任何选项(#[printer]),则相当于 #[printer(?all)]。
#[printer(dump)]
fn foo() {}
dump 选项在编译时将展开的宏输出到 stdout。它仅在编译时显示输出,而不是在运行时。这意味着您必须在 cargo build 后读取 stdout,而不是 cargo run。只有当它被重新编译时,cargo run 才会工作。
#[printer(name = "foo")]
fn bar() {}
它使用名称 foo 而不是 bar。
#[printer(eprintln)]
fn bar() {}
它使用 eprintln 而不是 println。还有 print 和 eprint。
#[printer(cfg = "baz")]
fn foo() {}
只有当 #[cfg(feature = "baz")] 时才会工作。您可以将其与 test、debug 和 release 混合使用。最多可以使用一个标志。
#[printer($a, cond(a > 3))]
fn foo(a: u32) -> u32 { a + 1 }
只有当 a > 3 时才会工作。它使用 if 语句包装打印宏。