use proc_macro::TokenStream;use proc_macro2::Ident;use quote::{format_ident, quote};use syn::parse_macro_input;pub fn register_action_macro(ident: TokenStream) -> TokenStream { let name = parse_macro_input!(ident as Ident); let registration = register_action(&name); TokenStream::from(quote! { #registration })}pub(crate) fn register_action(type_name: &Ident) -> proc_macro2::TokenStream { let action_builder_fn_name = format_ident!( "__gpui_actions_builder_{}", type_name.to_string().to_lowercase() ); quote! { 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::MacroActionData { gpui::MacroActionData { name: <#type_name as gpui::Action>::debug_name(), aliases: <#type_name as gpui::Action>::deprecated_aliases(), type_id: ::std::any::TypeId::of::<#type_name>(), build: <#type_name as gpui::Action>::build, json_schema: <#type_name as gpui::Action>::action_json_schema, } } gpui::private::inventory::submit! { gpui::MacroActionBuilder(#action_builder_fn_name) } } } }}
use proc_macro::TokenStream;
use proc_macro2::Ident;
use quote::{format_ident, quote};
use syn::parse_macro_input;
pub fn register_action_macro(ident: TokenStream) -> TokenStream {
let name = parse_macro_input!(ident as Ident);
let registration = register_action(&name);
TokenStream::from(quote! {
#registration
})
}
pub(crate) fn register_action(type_name: &Ident) -> proc_macro2::TokenStream {
let action_builder_fn_name = format_ident!(
"__gpui_actions_builder_{}",
type_name.to_string().to_lowercase()
);
quote! {
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::MacroActionData {
gpui::MacroActionData {
name: <#type_name as gpui::Action>::debug_name(),
aliases: <#type_name as gpui::Action>::deprecated_aliases(),
type_id: ::std::any::TypeId::of::<#type_name>(),
build: <#type_name as gpui::Action>::build,
json_schema: <#type_name as gpui::Action>::action_json_schema,
}
}
gpui::private::inventory::submit! {
gpui::MacroActionBuilder(#action_builder_fn_name)
}
}
}
}
}