Domain Cli

作者 actionbook5c40d3ad7851无许可证1.5K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库6周前更新

Use when building CLI tools. Keywords: CLI, command line, terminal, clap, structopt, argument parsing, subcommand, interactive, TUI, ratatui, crossterm, indicatif, progress bar, colored output, shell completion, config file, environment variable, 命令行, 终端应用, 参数解析

AI 生成的概览

为使用 clap、配置分层、进度条和终端界面构建 Rust 命令行工具提供指导。

功能
该技能为用 Rust 构建命令行应用提供领域约束与设计指导。内容涵盖使用 clap 派生宏进行参数解析、子命令、配置优先级(命令行高于环境变量高于配置文件)、退出码、标准输出与标准错误的区分,以及进度条等用户反馈方式。它还列出相关 crate 和一个 CLI 结构示例,并指向错误处理、类型驱动设计、生命周期与并发等相关技能。
适用场景
在设计或实现 Rust 命令行工具时使用,尤其是在决定如何解析参数、分层加载配置、处理错误与退出码,或添加交互式提示、进度显示和终端界面时。它也可作为避免常见 CLI 错误的检查清单。
运行要求
该技能不附带脚本或资源,仅为说明性内容。实际应用时假定已有 Rust 项目,并可获取 clap、dialoguer、indicatif、colored、ratatui、crossterm 或 console 等 crate。

CLI Domain

Layer 3: Domain Constraints

Domain Constraints → Design Implications

Domain RuleDesign ConstraintRust Implication
User ergonomicsClear help, errorsclap derive macros
Config precedenceCLI > env > fileLayered config loading
Exit codesNon-zero on errorProper Result handling
Stdout/stderrData vs errorseprintln! for errors
InterruptibleHandle Ctrl+CSignal handling

Critical Constraints

User Communication

RULE: Errors to stderr, data to stdoutWHY: Pipeable output, scriptabilityRUST: eprintln! for errors, println! for data

Configuration Priority

RULE: CLI args > env vars > config file > defaultsWHY: User expectation, override capabilityRUST: Layered config with clap + figment/config

Exit Codes

RULE: Return non-zero on any errorWHY: Script integration, automationRUST: main() -> Result<(), Error> or explicit exit()

Trace Down ↓

From constraints to design (Layer 2):

"Need argument parsing"    ↓ m05-type-driven: Derive structs for args    ↓ clap: #[derive(Parser)]
"Need config layering"    ↓ m09-domain: Config as domain object    ↓ figment/config: Layer sources
"Need progress display"    ↓ m12-lifecycle: Progress bar as RAII    ↓ indicatif: ProgressBar

Key Crates

PurposeCrate
Argument parsingclap
Interactive promptsdialoguer
Progress barsindicatif
Colored outputcolored
Terminal UIratatui
Terminal controlcrossterm
Console utilitiesconsole

Design Patterns

PatternPurposeImplementation
Args structType-safe args#[derive(Parser)]
SubcommandsCommand hierarchy#[derive(Subcommand)]
Config layersOverride precedenceCLI > env > file
ProgressUser feedbackProgressBar::new(len)

Code Pattern: CLI Structure

rust
use clap::{Parser, Subcommand};
#[derive(Parser)]#[command(name = "myapp", about = "My CLI tool")]struct Cli {    /// Enable verbose output    #[arg(short, long)]    verbose: bool,
    #[command(subcommand)]    command: Commands,}
#[derive(Subcommand)]enum Commands {    /// Initialize a new project    Init { name: String },    /// Run the application    Run {        #[arg(short, long)]        port: Option<u16>,    },}
fn main() -> anyhow::Result<()> {    let cli = Cli::parse();    match cli.command {        Commands::Init { name } => init_project(&name)?,        Commands::Run { port } => run_server(port.unwrap_or(8080))?,    }    Ok(())}

Common Mistakes

MistakeDomain ViolationFix
Errors to stdoutBreaks pipingeprintln!
No help textPoor UX#[arg(help = "...")]
Panic on errorBad exit codeResult + proper handling
No progress for long opsUser uncertaintyindicatif

Trace to Layer 1

ConstraintLayer 2 PatternLayer 1 Implementation
Type-safe argsDerive macrosclap Parser
Error handlingResult propagationanyhow + exit codes
User feedbackProgress RAIIindicatif ProgressBar
Config precedenceBuilder patternLayered sources

Related Skills

WhenSee
Error handlingm06-error-handling
Type-driven argsm05-type-driven
Progress lifecyclem12-lifecycle
Async CLIm07-concurrency

来源与署名

来源:actionbook/rust-skills位于skills/domain-cli提交5c40d3a

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架