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>,
}