#![feature(decl_macro)] #![deny(unused_macro_rules)] // To make sure we are not hitting this #![deny(unused_macros)] // Most simple case macro 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 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 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 public pub macro num_public { (one) => { 1 }, (two) => { 2 }, (three) => { 3 }, (four) => { 4 }, } const _NUM_PUBLIC: u8 = num_public!(one) + num_public!(three); fn main() {}