Remove clone from codegen types
diff --git a/codegen/src/gen.rs b/codegen/src/gen.rs
index 291758e..3daf75a 100644
--- a/codegen/src/gen.rs
+++ b/codegen/src/gen.rs
@@ -642,19 +642,17 @@
 const TERMINAL_TYPES: &[&str] = &["Span", "Ident"];
 
 pub fn generate(defs: &types::Definitions) {
-    let mut defs = defs.clone();
-
-    for &tt in TERMINAL_TYPES {
-        defs.types.push(types::Node {
+    let mut state = codegen::State::default();
+    for s in &defs.types {
+        codegen::generate(&mut state, s, defs);
+    }
+    for tt in TERMINAL_TYPES {
+        let s = types::Node {
             ident: tt.to_string(),
             features: types::Features::default(),
             data: types::Data::Private,
-        });
-    }
-
-    let mut state = codegen::State::default();
-    for s in &defs.types {
-        codegen::generate(&mut state, s, &defs);
+        };
+        codegen::generate(&mut state, &s, defs);
     }
 
     let full_macro = quote! {
diff --git a/codegen/src/types.rs b/codegen/src/types.rs
index 963441e..cf41b5a 100644
--- a/codegen/src/types.rs
+++ b/codegen/src/types.rs
@@ -3,7 +3,7 @@
 
 use std::collections::{BTreeMap, BTreeSet};
 
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Serialize, Deserialize)]
 pub struct Definitions {
     /// The Syn version used to generate the introspection file.
     pub version: String,
@@ -11,7 +11,7 @@
     pub tokens: BTreeMap<String, String>,
 }
 
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Serialize, Deserialize)]
 pub struct Node {
     pub ident: String,
     pub features: Features,
@@ -23,7 +23,7 @@
     pub data: Data,
 }
 
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Serialize, Deserialize)]
 pub enum Data {
     Private,
     #[serde(rename = "fields")]
@@ -35,7 +35,7 @@
 pub type Fields = IndexMap<String, Type>;
 pub type Variants = IndexMap<String, Vec<Type>>;
 
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Serialize, Deserialize)]
 #[serde(rename_all = "lowercase")]
 pub enum Type {
     /// Type defined by `syn`
@@ -63,13 +63,13 @@
     Tuple(Vec<Type>),
 }
 
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Serialize, Deserialize)]
 pub struct Punctuated {
     pub element: Box<Type>,
     pub punct: String,
 }
 
-#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Default, PartialEq, Serialize, Deserialize)]
 pub struct Features {
     pub any: BTreeSet<String>,
 }