From fa51df5d748d9d9e3927c56d33e1437a05a8abb1 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Fri, 23 Jan 2026 05:29:28 +0800 Subject: Update command registration to auto-discover commands Commands in `./src/cmds/` are now automatically registered. The `[cmd]` section in `.cargo/registry.toml` is now only for overriding or registering commands outside the auto-discovery path. --- build.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'build.rs') diff --git a/build.rs b/build.rs index 70e7e28..8ee2245 100644 --- a/build.rs +++ b/build.rs @@ -2,6 +2,10 @@ use std::env; use std::path::PathBuf; use std::process::Command; +use string_proc::pascal_case; + +const COMMANDS_PATH: &str = "./src/cmds/"; + const COMPILE_INFO_RS_TEMPLATE: &str = "./templates/compile_info.rs.template"; const COMPILE_INFO_RS: &str = "./src/data/compile_info.rs"; @@ -253,6 +257,7 @@ fn generate_cmd_registry_file(repo_root: &PathBuf) -> Result<(), Box Result<(), Box ext, + None => continue, + }; + + if extension != "rs" { + continue; + } + + let file_name = match path.file_stem().and_then(|s| s.to_str()) { + Some(name) => name, + None => continue, + }; + + // Skip files that start with underscore + if file_name.starts_with('_') { + continue; + } + + // Convert filename to PascalCase + let pascal_name = pascal_case!(file_name); + + let key = file_name.to_string(); + let node = file_name.replace(".", " "); + let cmd_type = format!("cmds::{}::JV{}Command", file_name, pascal_name); + + nodes.push(node.clone()); + commands.push((key, node, cmd_type)); + } + } + // Extract the node_if template from the template content const PROCESS_MARKER: &str = "// PROCESS"; const TEMPLATE_START: &str = "// -- TEMPLATE START --"; -- cgit