1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
use proc_macro::TokenStream; use syn::parse_macro_input; use syn::spanned::Spanned; #[proc_macro_attribute] pub fn not_a_closure(_attr: TokenStream, item: TokenStream) -> TokenStream { let orig = item.clone(); let expr = parse_macro_input!(item as syn::Expr); if let syn::Expr::Closure(expr_closure) = expr { syn::Error::new(expr_closure.span(), "DON'T NEED NO STINKEN LAMBDA") .to_compile_error() .into() } else { orig } }