Handle codegen features in one place
diff --git a/codegen/src/gen.rs b/codegen/src/gen.rs
index 62de202..db033f9 100644
--- a/codegen/src/gen.rs
+++ b/codegen/src/gen.rs
@@ -1,5 +1,6 @@
use inflections::Inflect;
use proc_macro2::{Ident, Span, TokenStream};
+use quote::quote;
use syn_codegen::{Data, Features, Definitions, Node};
pub const TERMINAL_TYPES: &[&str] = &["Span", "Ident"];
@@ -15,6 +16,14 @@
let mut traits = TokenStream::new();
let mut impls = TokenStream::new();
for s in &defs.types {
+ let features = &s.features.any;
+ let features = match features.len() {
+ 0 => quote!(),
+ 1 => quote!(#[cfg(feature = #(#features)*)]),
+ _ => quote!(#[cfg(any(#(feature = #features),*))]),
+ };
+ traits.extend(features.clone());
+ impls.extend(features);
node(&mut traits, &mut impls, s, defs);
}
for tt in TERMINAL_TYPES {