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 语句包装打印宏。