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 {