aboutsummaryrefslogtreecommitdiff
path: root/mingling_macros/src/chain.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-23 00:40:05 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-23 00:40:05 +0800
commit1df1fc664c4a4b12807a49ef2f1a0effda6ce064 (patch)
treea5bcdab31e18094b226d6cef36d99c879c64e25f /mingling_macros/src/chain.rs
parentd94103fd7e76dd86cd64c23f00c818165fb7dc22 (diff)
Add compile-time duplicate variant detection
Add duplicate variant checks for chain, renderer, help, and completion registrations to produce a clear compile error instead of silently generating unreachable code
Diffstat (limited to 'mingling_macros/src/chain.rs')
-rw-r--r--mingling_macros/src/chain.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/mingling_macros/src/chain.rs b/mingling_macros/src/chain.rs
index eaf43fb..a678858 100644
--- a/mingling_macros/src/chain.rs
+++ b/mingling_macros/src/chain.rs
@@ -432,6 +432,20 @@ pub fn register_chain(input: TokenStream) -> TokenStream {
let chain_entry_str = chain_entry.to_string();
let chain_exist_entry_str = chain_exist_entry.to_string();
+ // Check for duplicate variant before inserting
+ let variant_name = previous_type
+ .path
+ .segments
+ .last()
+ .unwrap()
+ .ident
+ .to_string();
+ if let Err(err) =
+ crate::check_duplicate_variant(&chains, &variant_name, "chain", previous_type.span())
+ {
+ return err.into();
+ }
+
chains.insert(chain_entry_str);
chain_exist.insert(chain_exist_entry_str);