1 extern crate proc_macro; 2 3 use proc_macro::TokenStream; 4 use proc_macro_error::{emit_error, proc_macro_error}; 5 use proc_macro_hack::proc_macro_hack; 6 use quote::quote; 7 use syn::{parse_macro_input, Expr}; 8 9 #[proc_macro_error] 10 #[proc_macro_hack] add_one(input: TokenStream) -> TokenStream11pub fn add_one(input: TokenStream) -> TokenStream { 12 let expr = parse_macro_input!(input as Expr); 13 emit_error!(expr, "BOOM"); 14 15 TokenStream::from(quote! { 16 1 + (#expr) 17 }) 18 } 19