From f5f9d881d757675cd25f663831bb84564a394c44 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 9 Nov 2023 11:57:13 -0700 Subject: [PATCH 1/2] Polish actions macros --- crates/gpui2/src/action.rs | 3 +-- crates/gpui2_macros/src/action.rs | 20 ++++++++++++++------ crates/menu2/src/menu2.rs | 5 +++-- crates/zed2/src/main.rs | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/crates/gpui2/src/action.rs b/crates/gpui2/src/action.rs index 85149f5d55cc971844621e3acb3ba52d1d7c1a74..39beb87ad27c75554b5f5ff7043d267cd7370295 100644 --- a/crates/gpui2/src/action.rs +++ b/crates/gpui2/src/action.rs @@ -145,8 +145,7 @@ macro_rules! actions { () => {}; ( $name:ident ) => { - #[gpui::register_action] - #[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug, ::std::cmp::PartialEq, $crate::serde::Deserialize)] + #[gpui::action] pub struct $name; }; diff --git a/crates/gpui2_macros/src/action.rs b/crates/gpui2_macros/src/action.rs index 66302f3fc0b6ee519e349376ca65fda8b2e4a783..564f35d6a4da2d873afb5e4a059c295b11d1ef58 100644 --- a/crates/gpui2_macros/src/action.rs +++ b/crates/gpui2_macros/src/action.rs @@ -34,13 +34,21 @@ pub fn action(_attr: TokenStream, item: TokenStream) -> TokenStream { let visibility = input.vis; let output = match input.data { - syn::Data::Struct(ref struct_data) => { - let fields = &struct_data.fields; - quote! { - #attributes - #visibility struct #name #fields + syn::Data::Struct(ref struct_data) => match &struct_data.fields { + syn::Fields::Named(_) | syn::Fields::Unnamed(_) => { + let fields = &struct_data.fields; + quote! { + #attributes + #visibility struct #name #fields + } } - } + syn::Fields::Unit => { + quote! { + #attributes + #visibility struct #name; + } + } + }, syn::Data::Enum(ref enum_data) => { let variants = &enum_data.variants; quote! { diff --git a/crates/menu2/src/menu2.rs b/crates/menu2/src/menu2.rs index 44ebffcca2de58e43f5452d6975cb54462ed33bb..f7610849371f3df03947ece7a70dc983299e222c 100644 --- a/crates/menu2/src/menu2.rs +++ b/crates/menu2/src/menu2.rs @@ -1,9 +1,10 @@ use gpui::actions; -// todo!(remove this) +// If the zed binary doesn't use anything in this crate, it will be optimized out +// and the actions won't initialize. So we just call an empty initialization function. // https://github.com/rust-lang/rust/issues/47384 // https://github.com/mmastrac/rust-ctor/issues/280 -pub fn unused() {} +pub fn init() {} actions!( Cancel, diff --git a/crates/zed2/src/main.rs b/crates/zed2/src/main.rs index cd0f8e5fbf7333d7849de040e7dee211f6738549..52349edd2c8ce32e4329606cf96cc59955f1ca7b 100644 --- a/crates/zed2/src/main.rs +++ b/crates/zed2/src/main.rs @@ -59,7 +59,7 @@ fn main() { //TODO!(figure out what the linker issues are here) // https://github.com/rust-lang/rust/issues/47384 // https://github.com/mmastrac/rust-ctor/issues/280 - menu::unused(); + // menu::unused(); let http = http::client(); init_paths(); init_logger(); From 408a495aaf7d7746453cc7621ee3c25b5f3aae82 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 9 Nov 2023 13:14:11 -0700 Subject: [PATCH 2/2] Call init --- crates/menu2/src/menu2.rs | 7 +++++-- crates/zed2/src/main.rs | 5 +---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/menu2/src/menu2.rs b/crates/menu2/src/menu2.rs index f7610849371f3df03947ece7a70dc983299e222c..6dfcce5d4f751c3e990d1a3c440ddebdf237d162 100644 --- a/crates/menu2/src/menu2.rs +++ b/crates/menu2/src/menu2.rs @@ -1,7 +1,10 @@ use gpui::actions; -// If the zed binary doesn't use anything in this crate, it will be optimized out -// and the actions won't initialize. So we just call an empty initialization function. +// If the zed binary doesn't use anything in this crate, it will be optimized away +// and the actions won't initialize. So we just provide an empty initialization function +// to be called from main. +// +// These may provide relevant context: // https://github.com/rust-lang/rust/issues/47384 // https://github.com/mmastrac/rust-ctor/issues/280 pub fn init() {} diff --git a/crates/zed2/src/main.rs b/crates/zed2/src/main.rs index 52349edd2c8ce32e4329606cf96cc59955f1ca7b..309746181e5e288fb2f7457422c814c855e468a8 100644 --- a/crates/zed2/src/main.rs +++ b/crates/zed2/src/main.rs @@ -56,10 +56,7 @@ use zed2::{ mod open_listener; fn main() { - //TODO!(figure out what the linker issues are here) - // https://github.com/rust-lang/rust/issues/47384 - // https://github.com/mmastrac/rust-ctor/issues/280 - // menu::unused(); + menu::init(); let http = http::client(); init_paths(); init_logger();