1个不稳定版本
0.1.0 | 2023年12月27日 |
---|
#2319 在 开发工具
7KB
63 行
scrub
一个宏,允许宏自己承担责任,将所有错误归咎于调用者。
例如,考虑一个宏,其合约规定输入必须是一个特定类型的表达式。如果调用者违反了这个合约,宏体的一部分被突出显示为错误原因,即使很明显这是调用者的错误。
error[E0308]: mismatched types
--> examples/blame.rs:3:7
|
3 | let () = $e;
| ^^ expected `A`, found `()`
...
9 | b!(A);
| -----
| | |
| | this expression has type `A`
| in this macro invocation
现在你可以最终告诉那些调用者谁真正应该负责。
error[E0308]: mismatched types
--> examples/blameless.rs:11:2
|
11 | b!(A);
| ^^^-^
| | |
| | this expression has type `A`
| expected `A`, found `()`
由于使用了proc_macro_span
特性,这个crate需要nightly版。
lib.rs
:
一个宏,允许宏自己承担责任,将所有错误归咎于调用者。
例如,考虑一个宏,其合约规定输入必须是一个特定类型的表达式。如果调用者违反了这个合约,宏体的一部分被突出显示为错误原因,即使很明显这是调用者的错误。
<style type="text/css"> .diag-r { color: var(--code-highlight-prelude-val-color); } .diag-b { color: var(--code-highlight-prelude-color); } </style>error[E0308]: mismatched types
--> examples/blame.rs:3:7
|
3 | let () = $e;
| ^^ expected `A`, found `()`
...
9 | b!(A);
| -----
| | |
| | this expression has type `A`
| in this macro invocation
现在你可以最终告诉那些调用者谁真正应该负责。
error[E0308]: mismatched types
--> examples/blameless.rs:11:2
|
11 | b!(A);
| ^^^-^
| | |
| | this expression has type `A`
| expected `A`, found `()`
由于使用了proc_macro_span
特性,这个crate需要nightly版。