An example of parsing a custom syntax within a functionlike!(...)
procedural macro. Demonstrates how to trigger custom warnings and error messages on individual tokens of the input.
The library implements a lazy_static!
macro similar to the one from the real lazy_static
crate on crates.io.
lazy_static! { static ref USERNAME: Regex = Regex::new("^[a-z0-9_-]{3,16}$").unwrap(); }
Compile and run the example by doing cargo run
in the directory of the example
crate.
The implementation shows how to trigger custom warnings and error messages on the macro input. For example if you try adding an uncreatively named FOO
lazy static, the macro will scold you with the following warning.
warning: come on, pick a more creative name --> src/main.rs:10:16 | 10 | static ref FOO: String = "lazy_static".to_owned(); | ^^^
And if you try to lazily initialize () = ()
, the macro will outright refuse to compile it for you.
error: I can't think of a legitimate use for lazily initializing the value `()` --> src/main.rs:10:27 | 10 | static ref UNIT: () = (); | ^^