From ab8556a13c1633bf3733331aed1033c527b5a674 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Wed, 17 Sep 2025 01:37:55 +0200 Subject: [PATCH] refactor: Use Self wherever possible This avoids having to move around the struct/enum name all over the place. --- lua_typed_macro/src/lib.rs | 47 ++++++++------------------------------ 1 file changed, 10 insertions(+), 37 deletions(-) diff --git a/lua_typed_macro/src/lib.rs b/lua_typed_macro/src/lib.rs index e3011e6..2b3d797 100644 --- a/lua_typed_macro/src/lib.rs +++ b/lua_typed_macro/src/lib.rs @@ -43,18 +43,16 @@ impl ToTokens for StructField { } struct Struct { - name: syn::Ident, fields: Vec, } impl ToTokens for Struct { fn to_tokens(&self, tokens: &mut TokenStream2) { - let name = &self.name; let fields = &self.fields; tokens.extend(quote! { fn generate_header() -> Option { - let type_name = <#name as Typed>::type_name(); + let type_name = ::type_name(); Some(format!("---@class {type_name}\nlocal {type_name}\n")) } @@ -72,17 +70,10 @@ impl ToTokens for Struct { } impl Struct { - fn from_data( - data: DataStruct, - name: syn::Ident, - case: Option>, - ) -> syn::Result { + fn from_data(data: DataStruct, case: Option>) -> syn::Result { let fields = parse_fields(data.fields, case)?; - Ok(Self { - name: name.to_owned(), - fields, - }) + Ok(Self { fields }) } } @@ -108,18 +99,16 @@ impl ToTokens for BasicEnumVariant { } struct BasicEnum { - name: syn::Ident, variants: Vec, } impl ToTokens for BasicEnum { fn to_tokens(&self, tokens: &mut TokenStream2) { - let name = &self.name; let variants = &self.variants; tokens.extend(quote! { fn generate_header() -> Option { - Some(format!("---@alias {}\n", <#name as Typed>::type_name())) + Some(format!("---@alias {}\n", ::type_name())) } fn generate_members() -> Option { @@ -136,11 +125,7 @@ impl ToTokens for BasicEnum { } impl BasicEnum { - fn from_data( - data: DataEnum, - name: syn::Ident, - case: Option>, - ) -> syn::Result { + fn from_data(data: DataEnum, case: Option>) -> syn::Result { if let Some(err) = data .variants .iter() @@ -160,7 +145,6 @@ impl BasicEnum { } Ok(Self { - name: name.to_owned(), variants: data .variants .into_iter() @@ -202,14 +186,12 @@ impl From for BasicEnumVariant { } struct ExtTaggedEnum { - name: syn::Ident, tag: LitStr, variants: Vec, } impl ToTokens for ExtTaggedEnum { fn to_tokens(&self, tokens: &mut TokenStream2) { - let name = &self.name; let tag_variants: Vec = self.variants.iter().cloned().map(Into::into).collect(); let variants = &self.variants; @@ -218,7 +200,7 @@ impl ToTokens for ExtTaggedEnum { tokens.extend(quote! { fn generate_header() -> Option { - let type_name = <#name as Typed>::type_name(); + let type_name = ::type_name(); Some(format!("---@class {type_name}\nlocal {type_name}\n")) } @@ -243,7 +225,6 @@ impl ToTokens for ExtTaggedEnum { impl ExtTaggedEnum { fn from_data( data: DataEnum, - name: syn::Ident, tag: LitStr, case: Option>, ) -> syn::Result { @@ -281,11 +262,7 @@ impl ExtTaggedEnum { .map(|variant| variant.expect("Should only contain ok results")) .collect(); - Ok(Self { - name: name.to_owned(), - tag, - variants, - }) + Ok(Self { tag, variants }) } } @@ -422,15 +399,11 @@ fn typed_inner(ast: DeriveInput) -> syn::Result { }; let test: TokenStream2 = match ast.data { - syn::Data::Struct(data_struct) => { - Struct::from_data(data_struct, name.clone(), case)?.into_token_stream() - } + syn::Data::Struct(data_struct) => Struct::from_data(data_struct, case)?.into_token_stream(), syn::Data::Enum(data_enum) if let Some(tag) = tag => { - ExtTaggedEnum::from_data(data_enum, name.clone(), tag, case)?.into_token_stream() - } - syn::Data::Enum(data_enum) => { - BasicEnum::from_data(data_enum, name.clone(), case)?.into_token_stream() + ExtTaggedEnum::from_data(data_enum, tag, case)?.into_token_stream() } + syn::Data::Enum(data_enum) => BasicEnum::from_data(data_enum, case)?.into_token_stream(), syn::Data::Union(data_union) => { return Err(syn::Error::new( data_union.union_token.span,