SuperAPI AI 工具集

cli-commands

编程与开发

查看项目

更新于 10-16 08:48

技能介绍

用途:在 GitButler 项目里新增或修改 but CLI 命令(位于 crates/but/src)时遵循的开发结构规范。

主要能力与要求:参数放在 crates/but/src/args,如 crates/but/src/args/commit3.rs,用 clap 的 #[derive(Debug, clap::Parser)] 定义 Platform;引用 Git 对象(提交、分支、文件、hunk 等)的参数须用 crates/but/src/args/atoms/ 中的类型,例如 CliIdArg,不要用 String,String 仅用于提交信息这类松散文本。Platform 及其字段必须有文档;在 args/mod.rs 注册子命令(示例中用 #[clap(hide = true, name = "_commit3")]);用 #[clap(group = "...")] 建立互斥参数组。语法复杂的命令可定义 pub(crate) const ERROR_EXAMPLES 并在 args::error_examples 注册,最多 4 行。

命令分发:在 crates/but/src/lib.rs 添加 match 分支,用 IntermediateChannel(不要传 OutputChannel),用 OutputChannel::print_cli_output 输出最终结果(仅人类格式时用 print_cli_output_human),并配合 setup::init_ctx、emit_metrics、run_status_after_if_requested。

命令实现:在 crates/but/src/command/legacy/commit3.rs 等文件实现,采用 resolve 再 run 的结构。resolve 把 CLI 参数转成领域目标并校验用户输入,返回 CliResult,不保留派生数据;run 加载仓库状态并计算结果,返回 anyhow::Result,不打印最终输出,而是返回实现 CliOutput/CliOutputHuman 的结果。operation 不应含 crate::args::atoms 类型,也不应含 Vec<DiffSpec>,而应含 CliId,由 run 通过 DiffSpecBuilder 转换。JSON 输出在 on_json 内定义专用类型,避免直接给 operation/outcome 实现 serde::Serialize。输出提交、分支等使用 theme 中的 newtype 保证颜色一致;错误用 bad_input(...),可加 .arg_name()、.arg_value()、.hint()。

限制:本资料为内部开发规范,未提供安装、收费、平台、版本或性能信息。