diff --git a/src/lib.rs b/src/lib.rs index 36367e1..7e5c347 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -244,10 +244,10 @@ mod render; mod resolver; mod utils; -use syn::{parse_macro_input, visit_mut::VisitMut, ItemFn}; +use syn::{parse_macro_input, ItemFn}; use crate::parse::{ - fixture::{FixtureInfo, ReplacerFutureAttribute}, + fixture::{FixtureInfo, ReplaceFutureAttribute}, rstest::RsTestInfo, }; use parse::ExtendWithFunctionAttrs; @@ -462,11 +462,14 @@ pub fn fixture( let mut info: FixtureInfo = parse_macro_input!(args as FixtureInfo); let mut fixture = parse_macro_input!(input as ItemFn); - ReplacerFutureAttribute::default().visit_item_fn_mut(&mut fixture); + let replace_result = ReplaceFutureAttribute::replace(&mut fixture); let extend_result = info.extend_with_function_attrs(&mut fixture); let mut errors = error::fixture(&fixture, &info); + if let Err(attrs_errors) = replace_result { + attrs_errors.to_tokens(&mut errors); + } if let Err(attrs_errors) = extend_result { attrs_errors.to_tokens(&mut errors); } @@ -1075,11 +1078,14 @@ pub fn rstest( let mut test = parse_macro_input!(input as ItemFn); let mut info = parse_macro_input!(args as RsTestInfo); - ReplacerFutureAttribute::default().visit_item_fn_mut(&mut test); + let replace_result = ReplaceFutureAttribute::replace(&mut test); let extend_result = info.extend_with_function_attrs(&mut test); let mut errors = error::rstest(&test, &info); + if let Err(attrs_errors) = replace_result { + attrs_errors.to_tokens(&mut errors); + } if let Err(attrs_errors) = extend_result { attrs_errors.to_tokens(&mut errors); } diff --git a/src/parse/fixture.rs b/src/parse/fixture.rs index 2300d55..f73588a 100644 --- a/src/parse/fixture.rs +++ b/src/parse/fixture.rs @@ -102,9 +102,16 @@ impl VisitMut for FixturesFunctionExtractor { } #[derive(Default)] -pub(crate) struct ReplacerFutureAttribute(pub(crate) Vec); +pub(crate) struct ReplaceFutureAttribute(Vec); -impl VisitMut for ReplacerFutureAttribute { +impl ReplaceFutureAttribute { + pub(crate) fn replace(item_fn: &mut ItemFn) -> Result<(), ErrorsVec> { + Self::default().visit_item_fn_mut(item_fn); + Ok(()) + } +} + +impl VisitMut for ReplaceFutureAttribute { fn visit_fn_arg_mut(&mut self, node: &mut FnArg) { match node { FnArg::Typed(t) => {