#![deny(unused_macro_rules)] // To make sure we are not hitting this #![deny(unused_macros)] // Most simple case macro_rules! num { (one) => { 1 }; (two) => { 2 }; //~ ERROR: rule #2 of macro (three) => { 3 }; (four) => { 4 }; //~ ERROR: rule #4 of macro } const _NUM: u8 = num!(one) + num!(three); // Check that allowing the lint works #[allow(unused_macro_rules)] macro_rules! num_allowed { (one) => { 1 }; (two) => { 2 }; (three) => { 3 }; (four) => { 4 }; } const _NUM_ALLOWED: u8 = num_allowed!(one) + num_allowed!(three); // Check that macro calls inside the macro trigger as usage macro_rules! num_rec { (one) => { 1 }; (two) => { num_rec!(one) + num_rec!(one) }; (three) => { //~ ERROR: rule #3 of macro num_rec!(one) + num_rec!(two) }; (four) => { num_rec!(two) + num_rec!(two) }; } const _NUM_RECURSIVE: u8 = num_rec!(four); // No error if the macro is being exported #[macro_export] macro_rules! num_exported { (one) => { 1 }; (two) => { 2 }; (three) => { 3 }; (four) => { 4 }; } const _NUM_EXPORTED: u8 = num_exported!(one) + num_exported!(three); fn main() {}