Crate set_span

Source
Expand description

The set_span in the simulation process macro

This macro can be used to improve error messages, etc

§Note

Incorrect use may cause some damage to hygiene

§Example

macro_rules! foo {
    ($t:tt) => {
        foo! { ($t) ($t) }
    };
    ($t:tt (0)) => {
        set_span::set_span_all! {$t[0], {
            compile_error! {"input by zero"}
        }}
    };
    ($_:tt ($lit:literal)) => { /*...*/ };
}
foo!(0);

Output:

error: input by zero
  --> src/lib.rs:25:6
   |
16 | foo!(0);
   |      ^

§If set_span is not used:

macro_rules! foo {
    ($t:tt) => {
        foo! { ($t) ($t) }
    };
    ($t:tt (0)) => {
        compile_error! {"input by zero"}
    };
    ($_:tt ($lit:literal)) => { /*...*/ };
}
foo!(0);

Output:

error: input by zero
  --> src/lib.rs:45:9
   |
8  |         compile_error! {"input by zero"}
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
12 | foo!(0);
   | ------- in this macro invocation
   |

Macros§

set_span
Set the span of certain tokens in the code block to the span of the input token
set_span_all
Like set_span!(tt[0], {#set_span{...}})