//@ aux-build:test-macros.rs //@ check-pass //@ compile-flags: -Z span-debug #![no_std] // Don't load unnecessary hygiene information from std extern crate std; extern crate test_macros; use test_macros::{print_bang, print_bang_consume}; macro_rules! test_matchers { ($expr:expr, $block:block, $stmt:stmt, $ty:ty, $ident:ident, $lifetime:lifetime, $meta:meta, $path:path, $vis:vis, $tt:tt, $lit:literal) => { print_bang_consume!($expr, $block, $stmt, $ty, $ident, $lifetime, $meta, $path, $vis, $tt, $lit) } } macro_rules! use_expr { ($expr:expr) => { print_bang!($expr) } } macro_rules! use_pat { ($pat:pat) => { print_bang!($pat) } } #[allow(dead_code)] struct Foo; impl Foo { #[allow(dead_code)] fn use_self(self) { drop(use_expr!(self)); test_matchers!( 1 + 1, { "a" }, let a = 1, String, my_name, 'a, my_val = 30, std::option::Option, pub(in some::path), [ a b c ], -30 ); } fn with_pat(use_pat!((a, b)): (u32, u32)) { let _ = (a, b); } } fn main() {}