Clone in a terminal:
Commit 746de80
Johan Mattsson - 2026-06-28T17:26:34+00:00
746de80f9f1400f85ff0419c6525cfa06b331820johan.mattsson.m@gmail.com

Refacor

Changed files (1)

Diff

diff --git a/src/init.rs b/src/init.rsindex 0e53d29..a9f1522 100644--- a/src/init.rs+++ b/src/init.rs@@ -39,36 +39,28 @@ pub fn component_impl(attr: pm::TokenStream, item: pm::TokenStream) -> pm::Token      let global_store = generate_component_store(struct_name_ident.clone()); -    let create_html_component_fn_name = format!("createComponent{}", struct_name_ident);-    let component_rs_state_js_fn = format!("initComponentState{}", struct_name_ident);-    let attachjs_fn_name = format!("attachComponent{}", struct_name_ident);+    let create_class_js = format!("createComponentClass{}", struct_name_ident);+    let init_self_js = format!("initSelf{}", struct_name_ident);+    let attach_js = format!("attachComponent{}", struct_name_ident); -    let fn_create_ident = Ident::new(&create_html_component_fn_name, Span::call_site());-    let component_rs_state_js_fn_ident = Ident::new(&component_rs_state_js_fn, Span::call_site());+    let create_class_js_indent = Ident::new(&create_class_js, Span::call_site());+    let init_self_js_ident = Ident::new(&init_self_js, Span::call_site()); -    let component_rs_state_rs_fn = from_pascal_to_snake(component_rs_state_js_fn.as_str());-    let component_rs_state_rs_js_ident = Ident::new(&component_rs_state_rs_fn, Span::call_site());--    let create_js_fn = generate_register_component_fn(-        fn_create_ident,+    let create_js_class_fn = create_class(+        create_class_js_indent,         tag_lit.clone(),-        component_rs_state_js_fn.as_str(),-        attachjs_fn_name.as_str(),-    );--    let rs_state_init_fn = gen_rust_self(-        component_rs_state_rs_js_ident,-        component_rs_state_js_fn_ident,-        struct_name_ident.clone(),+        init_self_js.as_str(),+        attach_js.as_str(),     ); -    let attach_fn = attach_quote(&attachjs_fn_name);+    let rs_self = gen_rust_self(struct_name_ident.clone(), init_self_js_ident);+    let attach_fn = attach_quote(&attach_js);      let expanded = quote! {         #global_store-        #rs_state_init_fn+        #rs_self         #component_struct_item-        #create_js_fn+        #create_js_class_fn         #attach_fn     }; @@ -150,17 +142,24 @@ fn from_pascal_to_snake(fn_name: &str) -> String {     result } -fn gen_rust_self(rust_name: Ident, js_name: Ident, struct_name: Ident) -> proc_macro2::TokenStream {+fn gen_rust_self(struct_name: Ident, js_name: Ident) -> proc_macro2::TokenStream {     let store_name = store_name(&struct_name);     let counter_name = counter_name(&struct_name);      let counter_ident = Ident::new(&counter_name, Span::call_site());     let store_ident = Ident::new(&store_name, Span::call_site()); +    let struct_name_str = struct_name.to_string();+    let rust_name = format!(+        "init_component_self_{}",+        from_pascal_to_snake(struct_name_str.as_str())+    );+    let rust_ident = Ident::new(&rust_name, Span::call_site());+     let expanded = quote! {         #[callback(#js_name)]         #[allow(non_snake_case)]-        pub fn #rust_name() -> u32 {  // init_component_state_struct_name, returns id for the instance of the element+        pub fn #rust_ident() -> u32 {  // init_component_state_struct_name, returns id for the instance of the element             log!("Run counter init rs state.");             let counter = #struct_name::default();             let wasm_id = #counter_ident.fetch_add(1, std::sync::atomic::Ordering::Relaxed);@@ -180,21 +179,21 @@ fn gen_rust_self(rust_name: Ident, js_name: Ident, struct_name: Ident) -> proc_m     expanded } -fn generate_register_component_fn(-    name: Ident,+fn create_class(+    class_creator: Ident,     tag: LitStr,     init_state_fn: &str,     atach_state_fn: &str, ) -> proc_macro2::TokenStream {-    let name_str_lit = LitStr::new(&name.to_string(), Span::call_site());+    let name_str_lit = LitStr::new(&class_creator.to_string(), Span::call_site());      let expanded = quote! {         ::inventory::submit! {-            InitComponentFn(#name)+            InitComponentFn(#class_creator)         }          #[allow(non_snake_case)]-        pub fn #name() { // createComponentTheStructName+        pub fn #class_creator() { // createComponentTheStructName             let wasm_id = 0;              let component_name = #name_str_lit;

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112