diff --git a/crates/fayalite-proc-macros-impl/src/process_cfg.rs b/crates/fayalite-proc-macros-impl/src/process_cfg.rs index 06193cc..3db5c15 100644 --- a/crates/fayalite-proc-macros-impl/src/process_cfg.rs +++ b/crates/fayalite-proc-macros-impl/src/process_cfg.rs @@ -271,60 +271,27 @@ impl, P: Phase> Process

for Box { } } -trait ProcessVecElement { - const REMOVE_ELEMENTS: bool; -} - -impl ProcessVecElement for syn::Stmt { - const REMOVE_ELEMENTS: bool = true; -} - -impl ProcessVecElement for syn::ForeignItem { - const REMOVE_ELEMENTS: bool = true; -} - -impl ProcessVecElement for syn::ImplItem { - const REMOVE_ELEMENTS: bool = true; -} - -impl ProcessVecElement for syn::Item { - const REMOVE_ELEMENTS: bool = true; -} - -impl ProcessVecElement for syn::TraitItem { - const REMOVE_ELEMENTS: bool = true; -} - -impl + ProcessVecElement, P: Phase> Process

for Vec { - fn process(self, state: &mut State

) -> Option> { - let mut output = Output::new(Vec::new()); - for value in self { - if let Some(value) = value.process(state) { - output = (output, value).call(|(mut output, value)| { - output.push(value); - output - }); - } else if !T::REMOVE_ELEMENTS { - return None; - } - } - Some(output) - } -} - trait ProcessOption { /// if a configured-off value causes this value to be `None` instead of propagating the configuring-off const REMOVE_VALUE: bool; } -impl ProcessOption for syn::WhereClause { - const REMOVE_VALUE: bool = true; +impl ProcessOption for Token![<] { + const REMOVE_VALUE: bool = false; } -impl ProcessOption for syn::ImplRestriction { +impl ProcessOption for Token![>] { const REMOVE_VALUE: bool = false; } +impl ProcessOption for Token![=] { + const REMOVE_VALUE: bool = false; +} + +impl ProcessOption for syn::WhereClause { + const REMOVE_VALUE: bool = true; +} + impl ProcessOption for (Token![=], syn::Expr) { const REMOVE_VALUE: bool = true; } @@ -333,22 +300,34 @@ impl ProcessOption for (Token![as], Ident) { const REMOVE_VALUE: bool = true; } +impl ProcessOption for Token![unsafe] { + const REMOVE_VALUE: bool = true; +} + +impl ProcessOption for Token![default] { + const REMOVE_VALUE: bool = true; +} + +impl ProcessOption for Token![const] { + const REMOVE_VALUE: bool = true; +} + +impl ProcessOption for Token![async] { + const REMOVE_VALUE: bool = true; +} + impl ProcessOption for (Option, syn::Path, Token![for]) { const REMOVE_VALUE: bool = false; } +impl ProcessOption for syn::Abi { + const REMOVE_VALUE: bool = false; +} + impl ProcessOption for syn::Variadic { const REMOVE_VALUE: bool = true; } -impl ProcessOption for (Box, Token![:]) { - const REMOVE_VALUE: bool = false; -} - -impl ProcessOption for (syn::token::Brace, Vec) { - const REMOVE_VALUE: bool = false; -} - impl + ProcessOption, P: Phase> Process

for Option { fn process(self, state: &mut State

) -> Option> { if let Some(this) = self { @@ -424,8 +403,19 @@ impl ProcessPunctuatedElement for syn::FnArg { const REMOVE_ELEMENTS: bool = true; } -impl ProcessPunctuatedElement for syn::TypeParamBound { - const REMOVE_ELEMENTS: bool = true; +impl Process

for Vec { + fn process(self, state: &mut State

) -> Option> { + let mut output = Output::new(Vec::new()); + for value in self { + if let Some(value) = value.process(state) { + output = (output, value).call(|(mut output, value)| { + output.push(value); + output + }); + } + } + Some(output) + } } impl, U: Process

, P: Phase> Process

for (T, U) { @@ -454,17 +444,12 @@ macro_rules! process_no_op { Some(Output::new(self)) } } - - impl ProcessOption for $ty { - const REMOVE_VALUE: bool = false; - } }; } process_no_op!(syn::Visibility); process_no_op!(syn::Lifetime); process_no_op!(syn::Abi); -process_no_op!(syn::StaticMutability); process_no_op!(Token![as]); process_no_op!(Token![async]); process_no_op!(Token![auto]); @@ -510,53 +495,14 @@ process_no_op!(Token![use]); process_no_op!(Token![where]); process_no_op!(Token![while]); process_no_op!(Token![yield]); -process_no_op!(Token![&]); -process_no_op!(Token![&&]); -process_no_op!(Token![&=]); -process_no_op!(Token![@]); -process_no_op!(Token![^]); -process_no_op!(Token![^=]); process_no_op!(Token![:]); -process_no_op!(Token![,]); -process_no_op!(Token![$]); -process_no_op!(Token![.]); -process_no_op!(Token![..]); -process_no_op!(Token![...]); -process_no_op!(Token![..=]); -process_no_op!(Token![=]); -process_no_op!(Token![==]); -process_no_op!(Token![=>]); -process_no_op!(Token![>=]); -process_no_op!(Token![>]); -process_no_op!(Token![<-]); -process_no_op!(Token![<=]); -process_no_op!(Token![<]); -process_no_op!(Token![-]); -process_no_op!(Token![-=]); -process_no_op!(Token![!=]); -process_no_op!(Token![!]); -process_no_op!(Token![|]); -process_no_op!(Token![|=]); -process_no_op!(Token![||]); process_no_op!(Token![::]); -process_no_op!(Token![%]); -process_no_op!(Token![%=]); -process_no_op!(Token![+]); -process_no_op!(Token![+=]); -process_no_op!(Token![#]); -process_no_op!(Token![?]); -process_no_op!(Token![->]); process_no_op!(Token![;]); -process_no_op!(Token![<<]); -process_no_op!(Token![<<=]); -process_no_op!(Token![>>]); -process_no_op!(Token![>>=]); -process_no_op!(Token![/]); -process_no_op!(Token![/=]); -process_no_op!(Token![*]); -process_no_op!(Token![*=]); -process_no_op!(Token![~]); -process_no_op!(Token![_]); +process_no_op!(Token![=]); +process_no_op!(Token![?]); +process_no_op!(Token![..]); +process_no_op!(Token![<]); +process_no_op!(Token![>]); process_no_op!(syn::token::Brace); process_no_op!(syn::token::Bracket); process_no_op!(syn::token::Paren); @@ -1543,71 +1489,6 @@ process_enum! { } } -process_enum! { - syn::Pat { - Const, - Ident, - Lit, - Macro, - Or, - Paren, - Path, - Range, - Reference, - Rest, - Slice, - Struct, - Tuple, - TupleStruct, - Type, - Wild, - #[no_op] - _, - } -} - -process_enum! { - syn::ForeignItem { - Fn, - Static, - Type, - Macro, - #[no_op] - _, - } -} - -process_enum! { - syn::ImplItem { - Const, - Fn, - Type, - Macro, - #[no_op] - _, - } -} - -process_enum! { - syn::TypeParamBound { - Trait, - Lifetime, - #[no_op] - _, - } -} - -process_enum! { - syn::TraitItem { - Const, - Fn, - Type, - Macro, - #[no_op] - _, - } -} - impl Process

for syn::ReturnType { fn process(self, state: &mut State

) -> Option> { match self { @@ -1673,12 +1554,6 @@ impl Process

for TopItem { } } -impl Process

for syn::ImplRestriction { - fn process(self, _state: &mut State

) -> Option> { - todo!("ImplRestriction is an uninhabited type as of writing, blocked on syn implementing impl restrictions") - } -} - pub(crate) fn process_cfgs(item: syn::Item, cfgs: Cfgs) -> syn::Result> { let mut state = State:: { cfgs,