13 个版本

0.1.13 2024年2月16日
0.1.12 2023年9月29日
0.1.6 2023年8月22日
0.1.0 2023年7月19日

#780 in 命令行工具

无许可协议

30KB
777

cli-rs

🚧 wip 🚧

一个帮助您快速编写表达式的 CLI 库。从头开始构建,考虑了像 动态补全 这样的高级功能。

Command::name("lockbook")
   .subcommand(
       Command::name("edit")
           .input(Arg::new("target"))
           .handler(|target: Arg<String>| println!("editing target file: {}", target.get())),
   )
   .parse();

指定常用的复杂参数

let docs = Arg::<Uuid>::new("target-file")
    .description("A uuid or path of a lockbook document")
    .parser(|str| {...})
    .completions(|current_str, cursor_loc| {...});

cli-rs 将自动生成上下文相关的帮助消息和手册页。cli-rs 还将为每个 shell 生成一个微小的补全过程文件,该文件将调用您的 CLI,将尽可能多的补全逻辑移动到 Rust 中。

规范

command_path --flags positional_args --flags positional_args

现在的事情

  • 参数都是必需的,必须按顺序提供
  • 标志始终是可选的(必须实现默认值)并且可以不按顺序提供
  • 非布尔值的标志遵循形式 --key=value
  • 布尔值的标志解析为 --key--key=false-k
  • 一个命令可以有子命令或参数和标志,但不能两者都有

以后的事情

  • 支持 --key value
  • 可以为标志值定义环境变量(cli 指定值,环境变量回退,然后 Default::default())
  • 子命令继承任何标志作为自己的标志
  • 此外,所有布尔标志都可以分组,例如 -rf
  • 列出参数(支持可选参数)
  • 在运行时检测无效配置

依赖项

~0.4–10MB
~71K SLoC