|
1 | 1 | use syn::{ |
2 | | - Attribute, Field, FieldValue, FnArg, ItemEnum, ItemImpl, ItemMod, ItemStruct, ItemTrait, |
3 | | - TraitItem, Variant, |
| 2 | + Attribute, Field, FieldValue, FnArg, ImplItemFn, ItemEnum, ItemImpl, ItemMod, |
| 3 | + ItemStruct, ItemTrait, TraitItem, TraitItemFn, Variant, |
4 | 4 | visit_mut::{self, VisitMut}, |
5 | 5 | }; |
6 | 6 |
|
@@ -75,6 +75,28 @@ impl VisitMut for PxStripper { |
75 | 75 | attrs.retain(not_px_attr); |
76 | 76 | visit_mut::visit_fn_arg_mut(self, node); |
77 | 77 | } |
| 78 | + |
| 79 | + fn visit_impl_item_fn_mut(&mut self, node: &mut ImplItemFn) { |
| 80 | + strip_pavex_attrs(&mut node.attrs); |
| 81 | + visit_mut::visit_impl_item_fn_mut(self, node); |
| 82 | + } |
| 83 | + |
| 84 | + fn visit_trait_item_fn_mut(&mut self, node: &mut TraitItemFn) { |
| 85 | + strip_pavex_attrs(&mut node.attrs); |
| 86 | + visit_mut::visit_trait_item_fn_mut(self, node); |
| 87 | + } |
| 88 | +} |
| 89 | + |
| 90 | +fn strip_pavex_attrs(attrs: &mut Vec<Attribute>) { |
| 91 | + attrs.retain(|a| !is_user_pavex_attr(a) && not_px_attr(a)); |
| 92 | +} |
| 93 | + |
| 94 | +fn is_user_pavex_attr(a: &Attribute) -> bool { |
| 95 | + a.path() |
| 96 | + .segments |
| 97 | + .first() |
| 98 | + .map(|s| s.ident == "pavex") |
| 99 | + .unwrap_or(false) |
78 | 100 | } |
79 | 101 |
|
80 | 102 | fn not_px_attr(a: &Attribute) -> bool { |
|
0 commit comments