Skip to content

Commit 983cb24

Browse files
committed
Address clippy::complexity lint + encapsulated signals module
1 parent 404124b commit 983cb24

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

godot-codegen/src/generator/signals.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,18 @@ pub fn make_class_signals(
3838
.zip(all_params.iter())
3939
.map(|(signal, params)| make_signal_individual_struct(signal, params));
4040

41+
let class_name = class.name();
42+
4143
Some(quote! {
4244
#[cfg(since_api = "4.2")]
4345
pub use signals::*;
4446

4547
#[cfg(since_api = "4.2")]
4648
mod signals {
49+
use crate::obj::Gd;
50+
use super::re_export::#class_name;
51+
use super::*;
52+
4753
#signal_collection_struct
4854
#( #signal_types )*
4955
}
@@ -93,17 +99,17 @@ fn make_signal_collection(
9399
quote! {
94100
#[doc = #collection_docs]
95101
pub struct #collection_struct_name<'c> {
96-
__gd: &'c mut Gd<re_export::#class_name>,
102+
__gd: &'c mut Gd<#class_name>,
97103
}
98104

99105
impl<'c> #collection_struct_name<'c> {
100106
#( #provider_methods )*
101107
}
102108

103-
impl crate::obj::WithSignals for re_export::#class_name {
109+
impl crate::obj::WithSignals for #class_name {
104110
type SignalCollection<'c> = #collection_struct_name<'c>;
105111
#[doc(hidden)]
106-
type __SignalObject<'c> = Gd<re_export::#class_name>;
112+
type __SignalObject<'c> = Gd<#class_name>;
107113

108114
#[doc(hidden)]
109115
fn __signals_from_external(external: &mut Gd<Self>) -> Self::SignalCollection<'_> {
@@ -126,26 +132,27 @@ fn make_signal_individual_struct(signal: &ClassSignal, params: &SignalParams) ->
126132
} = params;
127133

128134
let class_name = &signal.surrounding_class;
129-
let class_ty = quote! { re_export::#class_name };
135+
let class_ty = quote! { #class_name };
130136
let param_tuple = quote! { ( #type_list ) };
137+
let typed_name = format_ident!("Typed{}", individual_struct_name);
131138

132139
// Embedded in `mod signals`.
133140
quote! {
141+
// Reduce tokens to parse by reusing this type definitions.
142+
type #typed_name<'c> = crate::registry::signal::TypedSignal<'c, #class_ty, #param_tuple>;
143+
134144
pub struct #individual_struct_name<'c> {
135-
typed: Self::TypedSignal,
145+
typed: #typed_name<'c>,
136146
}
137147

138148
impl<'c> #individual_struct_name<'c> {
139-
type ParamTuple = #param_tuple;
140-
type TypedSignal = crate::registry::signal::TypedSignal<'c, #class_ty, Self::ParamTuple>;
141-
142149
pub fn emit(&mut self, #param_list) {
143150
self.typed.emit_tuple( (#name_list) );
144151
}
145152
}
146153

147154
impl<'c> std::ops::Deref for #individual_struct_name<'c> {
148-
type Target = Self::TypedSignal;
155+
type Target = #typed_name<'c>;
149156

150157
fn deref(&self) -> &Self::Target {
151158
&self.typed

0 commit comments

Comments
 (0)