#macro #error #error-message #spans #improve #information

nightly macro scrub

移除span信息以提高错误信息

1个不稳定版本

0.1.0 2023年12月27日

#2319开发工具

MIT/Apache

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版。

没有运行时依赖