From ef6814c0cf7f5910f97e70773c8046b0cb075176 Mon Sep 17 00:00:00 2001 From: vyPal Date: Sat, 15 Feb 2025 12:02:00 +0100 Subject: [PATCH] Fix plugin macros (#553) --- Cargo.toml | 1 + pumpkin-api-macros/Cargo.toml | 2 +- pumpkin-api-macros/src/lib.rs | 37 ++++++----------------------------- 3 files changed, 8 insertions(+), 32 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 90a151ef5..6cc367c27 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] resolver = "2" members = [ + "pumpkin-api-macros", "pumpkin-config", "pumpkin-util", "pumpkin-inventory", diff --git a/pumpkin-api-macros/Cargo.toml b/pumpkin-api-macros/Cargo.toml index 132835790..2a3b3899b 100644 --- a/pumpkin-api-macros/Cargo.toml +++ b/pumpkin-api-macros/Cargo.toml @@ -9,4 +9,4 @@ proc-macro = true [dependencies] syn = { version = "2.0", features = ["full"] } quote = "1.0" -proc-macro2 = "1.0" \ No newline at end of file +proc-macro2 = "1.0" diff --git a/pumpkin-api-macros/src/lib.rs b/pumpkin-api-macros/src/lib.rs index e08b06153..dbbd4d4fb 100644 --- a/pumpkin-api-macros/src/lib.rs +++ b/pumpkin-api-macros/src/lib.rs @@ -1,27 +1,19 @@ -use std::sync::LazyLock; use proc_macro::TokenStream; use quote::quote; -use std::collections::HashMap; +use std::sync::LazyLock; use std::sync::Mutex; use syn::{parse_macro_input, parse_quote, ImplItem, ItemFn, ItemImpl, ItemStruct}; -static PLUGIN_METHODS: LazyLock>>> = - LazyLock::new(|| Mutex::new(HashMap::new())); +static PLUGIN_METHODS: LazyLock>> = LazyLock::new(|| Mutex::new(Vec::new())); #[proc_macro_attribute] -pub fn plugin_method(attr: TokenStream, item: TokenStream) -> TokenStream { +pub fn plugin_method(_attr: TokenStream, item: TokenStream) -> TokenStream { let input_fn = parse_macro_input!(item as ItemFn); let fn_name = &input_fn.sig.ident; let fn_inputs = &input_fn.sig.inputs; let fn_output = &input_fn.sig.output; let fn_body = &input_fn.block; - let struct_name = if attr.is_empty() { - "MyPlugin".to_string() - } else { - attr.to_string().trim().to_string() - }; - let method = quote! { #[allow(unused_mut)] async fn #fn_name(#fn_inputs) #fn_output { @@ -32,35 +24,18 @@ pub fn plugin_method(attr: TokenStream, item: TokenStream) -> TokenStream { } .to_string(); - PLUGIN_METHODS - .lock() - .unwrap() - .entry(struct_name) - .or_default() - .push(method); + PLUGIN_METHODS.lock().unwrap().push(method); TokenStream::new() } #[proc_macro_attribute] -pub fn plugin_impl(attr: TokenStream, item: TokenStream) -> TokenStream { +pub fn plugin_impl(_attr: TokenStream, item: TokenStream) -> TokenStream { // Parse the input struct let input_struct = parse_macro_input!(item as ItemStruct); let struct_ident = &input_struct.ident; - // Get the custom name from attribute or use the struct's name - let struct_name = if attr.is_empty() { - struct_ident.clone() - } else { - let attr_str = attr.to_string(); - quote::format_ident!("{}", attr_str.trim()) - }; - - let methods = PLUGIN_METHODS - .lock() - .unwrap() - .remove(&struct_name.to_string()) - .unwrap_or_default(); + let methods = PLUGIN_METHODS.lock().unwrap(); let methods: Vec = methods .iter()