Skip to content

Commit

Permalink
reorg
Browse files Browse the repository at this point in the history
  • Loading branch information
hkratz committed Sep 29, 2024
1 parent bb10bfc commit ed7d9e9
Showing 1 changed file with 14 additions and 16 deletions.
30 changes: 14 additions & 16 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit ed7d9e9

Please sign in to comment.