diff --git a/codegen/src/fold.rs b/codegen/src/fold.rs
index 87d4beb..9d55384 100644
--- a/codegen/src/fold.rs
+++ b/codegen/src/fold.rs
@@ -6,12 +6,6 @@
 
 const FOLD_SRC: &str = "../src/gen/fold.rs";
 
-#[derive(Default)]
-struct State {
-    fold_trait: TokenStream,
-    fold_impl: TokenStream,
-}
-
 fn simple_visit(item: &str, name: &TokenStream) -> TokenStream {
     let ident = gen::under_name(item);
     let method = Ident::new(&format!("fold_{}", ident), Span::call_site());
@@ -111,7 +105,7 @@
     }
 }
 
-fn node(state: &mut State, s: &Node, defs: &Definitions) {
+fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Definitions) {
     let features = visit_features(&s.features);
     let under_name = gen::under_name(&s.ident);
     let ty = Ident::new(&s.ident, Span::call_site());
@@ -226,14 +220,14 @@
         };
     }
 
-    state.fold_trait.extend(quote! {
+    traits.extend(quote! {
         #features
         fn #fold_fn(&mut self, i: #ty) -> #ty {
             #fold_fn(self, i)
         }
     });
 
-    state.fold_impl.extend(quote! {
+    impls.extend(quote! {
         #features
         pub fn #fold_fn<V: Fold + ?Sized>(
             _visitor: &mut V, _i: #ty
@@ -244,10 +238,8 @@
 }
 
 pub fn generate(defs: &Definitions) {
-    let state = gen::traverse(defs, node);
+    let (traits, impls) = gen::traverse(defs, node);
     let full_macro = full::get_macro();
-    let fold_trait = state.fold_trait;
-    let fold_impl = state.fold_impl;
     file::write(
         FOLD_SRC,
         quote! {
@@ -271,10 +263,10 @@
             ///
             /// *This trait is available if Syn is built with the `"fold"` feature.*
             pub trait Fold {
-                #fold_trait
+                #traits
             }
 
-            #fold_impl
+            #impls
         },
     );
 }
diff --git a/codegen/src/gen.rs b/codegen/src/gen.rs
index fd77d0d..62de202 100644
--- a/codegen/src/gen.rs
+++ b/codegen/src/gen.rs
@@ -1,6 +1,6 @@
 use inflections::Inflect;
-use proc_macro2::{Ident, Span};
-use syn_codegen as types;
+use proc_macro2::{Ident, Span, TokenStream};
+use syn_codegen::{Data, Features, Definitions, Node};
 
 pub const TERMINAL_TYPES: &[&str] = &["Span", "Ident"];
 
@@ -8,22 +8,22 @@
     Ident::new(&name.to_snake_case(), Span::call_site())
 }
 
-pub fn traverse<S, F>(defs: &types::Definitions, node: F) -> S
-where
-    S: Default,
-    F: Fn(&mut S, &types::Node, &types::Definitions),
-{
-    let mut state = S::default();
+pub fn traverse(
+    defs: &Definitions,
+    node: fn(&mut TokenStream, &mut TokenStream, &Node, &Definitions),
+) -> (TokenStream, TokenStream) {
+    let mut traits = TokenStream::new();
+    let mut impls = TokenStream::new();
     for s in &defs.types {
-        node(&mut state, s, defs);
+        node(&mut traits, &mut impls, s, defs);
     }
     for tt in TERMINAL_TYPES {
-        let s = types::Node {
+        let s = Node {
             ident: tt.to_string(),
-            features: types::Features::default(),
-            data: types::Data::Private,
+            features: Features::default(),
+            data: Data::Private,
         };
-        node(&mut state, &s, defs);
+        node(&mut traits, &mut impls, &s, defs);
     }
-    state
+    (traits, impls)
 }
diff --git a/codegen/src/visit.rs b/codegen/src/visit.rs
index 2a18244..6d47d47 100644
--- a/codegen/src/visit.rs
+++ b/codegen/src/visit.rs
@@ -7,12 +7,6 @@
 
 const VISIT_SRC: &str = "../src/gen/visit.rs";
 
-#[derive(Default)]
-struct State {
-    visit_trait: TokenStream,
-    visit_impl: TokenStream,
-}
-
 fn simple_visit(item: &str, name: &Operand) -> TokenStream {
     let ident = gen::under_name(item);
     let method = Ident::new(&format!("visit_{}", ident), Span::call_site());
@@ -127,7 +121,7 @@
     }
 }
 
-fn node(state: &mut State, s: &Node, defs: &Definitions) {
+fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Definitions) {
     let features = visit_features(&s.features);
     let under_name = gen::under_name(&s.ident);
     let ty = Ident::new(&s.ident, Span::call_site());
@@ -196,14 +190,14 @@
         Data::Private => {}
     }
 
-    state.visit_trait.extend(quote! {
+    traits.extend(quote! {
         #features
         fn #visit_fn(&mut self, i: &'ast #ty) {
             #visit_fn(self, i)
         }
     });
 
-    state.visit_impl.extend(quote! {
+    impls.extend(quote! {
         #features
         pub fn #visit_fn<'ast, V: Visit<'ast> + ?Sized>(
             _visitor: &mut V, _i: &'ast #ty
@@ -214,10 +208,8 @@
 }
 
 pub fn generate(defs: &Definitions) {
-    let state = gen::traverse(defs, node);
+    let (traits, impls) = gen::traverse(defs, node);
     let full_macro = full::get_macro();
-    let visit_trait = state.visit_trait;
-    let visit_impl = state.visit_impl;
     file::write(
         VISIT_SRC,
         quote! {
@@ -245,10 +237,10 @@
             ///
             /// *This trait is available if Syn is built with the `"visit"` feature.*
             pub trait Visit<'ast> {
-                #visit_trait
+                #traits
             }
 
-            #visit_impl
+            #impls
         },
     );
 }
diff --git a/codegen/src/visit_mut.rs b/codegen/src/visit_mut.rs
index 25c98ef..7355349 100644
--- a/codegen/src/visit_mut.rs
+++ b/codegen/src/visit_mut.rs
@@ -7,12 +7,6 @@
 
 const VISIT_MUT_SRC: &str = "../src/gen/visit_mut.rs";
 
-#[derive(Default)]
-struct State {
-    visit_mut_trait: TokenStream,
-    visit_mut_impl: TokenStream,
-}
-
 fn simple_visit(item: &str, name: &Operand) -> TokenStream {
     let ident = gen::under_name(item);
     let method = Ident::new(&format!("visit_{}_mut", ident), Span::call_site());
@@ -127,7 +121,7 @@
     }
 }
 
-fn node(state: &mut State, s: &Node, defs: &Definitions) {
+fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Definitions) {
     let features = visit_features(&s.features);
     let under_name = gen::under_name(&s.ident);
     let ty = Ident::new(&s.ident, Span::call_site());
@@ -196,14 +190,14 @@
         Data::Private => {}
     }
 
-    state.visit_mut_trait.extend(quote! {
+    traits.extend(quote! {
         #features
         fn #visit_mut_fn(&mut self, i: &mut #ty) {
             #visit_mut_fn(self, i)
         }
     });
 
-    state.visit_mut_impl.extend(quote! {
+    impls.extend(quote! {
         #features
         pub fn #visit_mut_fn<V: VisitMut + ?Sized>(
             _visitor: &mut V, _i: &mut #ty
@@ -214,10 +208,8 @@
 }
 
 pub fn generate(defs: &Definitions) {
-    let state = gen::traverse(defs, node);
+    let (traits, impls) = gen::traverse(defs, node);
     let full_macro = full::get_macro();
-    let visit_mut_trait = state.visit_mut_trait;
-    let visit_mut_impl = state.visit_mut_impl;
     file::write(
         VISIT_MUT_SRC,
         quote! {
@@ -244,10 +236,10 @@
             ///
             /// *This trait is available if Syn is built with the `"visit-mut"` feature.*
             pub trait VisitMut {
-                #visit_mut_trait
+                #traits
             }
 
-            #visit_mut_impl
+            #impls
         },
     );
 }
