diff --git a/src/lib.rs b/src/lib.rs index df02cc7..c163055 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,56 +4,54 @@ use proc_macro::TokenStream; #[rustversion::any(before(1.43.0))] #[proc_macro_attribute] -pub fn flexpect(_attr: TokenStream, item: TokenStream) -> TokenStream { +pub fn e(_attr_args: TokenStream, item: TokenStream) -> TokenStream { // using #[allow(...)] does not work before 1.43.0 due to a bug item } #[rustversion::all(since(1.43.0), before(1.81))] #[proc_macro_attribute] -pub fn flexpect(attr: TokenStream, item: TokenStream) -> TokenStream { - replace_attr_with(attr, item, "allow") +pub fn e(attr_args: TokenStream, item: TokenStream) -> TokenStream { + create_attr("allow", attr_args, item) } #[rustversion::since(1.81)] #[proc_macro_attribute] -pub fn flexpect(attr: TokenStream, item: TokenStream) -> TokenStream { - replace_attr_with(attr, item, "expect") +pub fn e(attr_args: TokenStream, item: TokenStream) -> TokenStream { + create_attr("expect", attr_args, item) } #[rustversion::any(before(1.43.0))] #[proc_macro_attribute] -pub fn e(_attr: TokenStream, item: TokenStream) -> TokenStream { +pub fn flexpect(_attr_args: TokenStream, item: TokenStream) -> TokenStream { // using #[allow(...)] does not work before 1.43.0 due to a bug item } #[rustversion::all(since(1.43.0), before(1.81))] #[proc_macro_attribute] -pub fn e(attr: TokenStream, item: TokenStream) -> TokenStream { - replace_attr_with(attr, item, "allow") +pub fn flexpect(attr_args: TokenStream, item: TokenStream) -> TokenStream { + create_attr("allow", attr_args, item) } #[rustversion::since(1.81)] #[proc_macro_attribute] -pub fn e(attr: TokenStream, item: TokenStream) -> TokenStream { - replace_attr_with(attr, item, "expect") +pub fn flexpect(attr_args: TokenStream, item: TokenStream) -> TokenStream { + create_attr("expect", attr_args, item) } +/// Creates `#[allow_or_expect(attr)] item` as a toke stream #[rustversion::since(1.43.0)] -fn replace_attr_with(attr: TokenStream, item: TokenStream, allow_or_expect: &str) -> TokenStream { +fn create_attr(name: &str, args: TokenStream, item: TokenStream) -> TokenStream { use proc_macro::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenTree}; use std::iter::once; let mut s = TokenStream::new(); s.extend(once(TokenTree::from(Punct::new('#', Spacing::Alone)))); let mut attr_inner = TokenStream::new(); - attr_inner.extend(once(TokenTree::from(Ident::new( - allow_or_expect, - Span::call_site(), - )))); + attr_inner.extend(once(TokenTree::from(Ident::new(name, Span::call_site())))); attr_inner.extend(once(TokenTree::from(Group::new( Delimiter::Parenthesis, - attr, + args, )))); s.extend(once(TokenTree::from(Group::new( Delimiter::Bracket,