gpui-macros: Hide autogenerated action types/functions (#10417)

Piotr Osiewicz created

I've found it a bit annoying that autogenerated code shows up in
completions when working on Zed, so I've moved them into an associated
function of a struct we're "implementing" Action on. That way, neither a
generated function nor a static show up in completions.

Note that this change only affects Zed codebase! I'm pushing it up right
after last Preview to give it some time on Nightly.
Before:

![image](https://github.com/zed-industries/zed/assets/24362066/7343201f-f05b-4342-a9f7-97f002d88a48)

![image](https://github.com/zed-industries/zed/assets/24362066/e67f9dcb-e090-40e0-873c-e51bd39e0c7e)

After:

![image](https://github.com/zed-industries/zed/assets/24362066/0704211a-73f5-4f12-8583-9e47f092e5b7)

![image](https://github.com/zed-industries/zed/assets/24362066/c6fa00f5-fd8f-4f06-8be7-b74acedccd7c)


Release Notes:

- N/A

Change summary

crates/gpui/src/action.rs                 |  4 ++
crates/gpui_macros/src/register_action.rs | 32 +++++++++++++++---------
2 files changed, 23 insertions(+), 13 deletions(-)

Detailed changes

crates/gpui/src/action.rs 🔗

@@ -182,7 +182,9 @@ impl ActionRegistry {
 macro_rules! actions {
     ($namespace:path, [ $($name:ident),* $(,)? ]) => {
         $(
-            /// The `$name` action see [`gpui::actions!`]
+            #[doc = "The `"]
+            #[doc = stringify!($name)]
+            #[doc = "` action, see [`gpui::actions!`]"]
             #[derive(::std::cmp::PartialEq, ::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug, gpui::private::serde_derive::Deserialize)]
             #[serde(crate = "gpui::private::serde")]
             pub struct $name;

crates/gpui_macros/src/register_action.rs 🔗

@@ -22,19 +22,27 @@ pub(crate) fn register_action(type_name: &Ident) -> proc_macro2::TokenStream {
     );
 
     quote! {
-        #[doc(hidden)]
-        #[gpui::private::linkme::distributed_slice(gpui::__GPUI_ACTIONS)]
-        #[linkme(crate = gpui::private::linkme)]
-        static #static_slice_name: gpui::MacroActionBuilder = #action_builder_fn_name;
-
-        /// This is an auto generated function, do not use.
-        #[doc(hidden)]
-        fn #action_builder_fn_name() -> gpui::ActionData {
-            gpui::ActionData {
-                name: <#type_name as gpui::Action>::debug_name(),
-                type_id: ::std::any::TypeId::of::<#type_name>(),
-                build: <#type_name as gpui::Action>::build,
+        impl #type_name {
+            /// This is an auto generated function, do not use.
+            #[automatically_derived]
+            #[doc(hidden)]
+            fn __autogenerated() {
+                /// This is an auto generated function, do not use.
+                #[doc(hidden)]
+                fn #action_builder_fn_name() -> gpui::ActionData {
+                    gpui::ActionData {
+                        name: <#type_name as gpui::Action>::debug_name(),
+                        type_id: ::std::any::TypeId::of::<#type_name>(),
+                        build: <#type_name as gpui::Action>::build,
+                    }
+                }
+                #[doc(hidden)]
+                #[gpui::private::linkme::distributed_slice(gpui::__GPUI_ACTIONS)]
+                #[linkme(crate = gpui::private::linkme)]
+                static #static_slice_name: gpui::MacroActionBuilder = #action_builder_fn_name;
             }
         }
+
+
     }
 }