use proc_macro2::TokenStream;
pub fn transform_with_test_dir<TS>(input: TS) -> TS
where
TokenStream: From<TS>,
TS: From<TokenStream>,
{
let input = TokenStream::from(input);
TS::from(transform_with_test_dir_inner(input).unwrap_or_else(syn::Error::into_compile_error))
}
fn transform_with_test_dir_inner(input: TokenStream) -> Result<TokenStream, syn::parse::Error> {
use quote::quote;
use syn::{parse2, ItemFn};
let ItemFn {
attrs,
vis,
sig,
mut block,
}: ItemFn = parse2(input)?;
block.stmts.insert(
0,
syn::parse2::<syn::Stmt>(quote! {
macro_rules! get_test_dir {
() => {
::target_test_dir::get_test_dir(module_path!(), function_name!())
}
}
})?,
);
Ok(quote! {
#[::target_test_dir::named]
#( #attrs )*
#vis
#sig
#block
})
}
#[cfg(test)]
mod tests;