| 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. |
| |
| - [`lazy-static/src/lib.rs`](lazy-static/src/lib.rs) |
| - [`example/src/main.rs`](example/src/main.rs) |
| |
| The library implements a `lazy_static!` macro similar to the one from the real |
| [`lazy_static`](https://docs.rs/lazy_static/1.0.0/lazy_static/) crate on |
| crates.io. |
| |
| ```rust |
| 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: () = (); |
| | ^^ |
| ``` |