diff --git a/docs/api.md b/docs/api.md index 33b2433..3a2d1e1 100644 --- a/docs/api.md +++ b/docs/api.md @@ -11,6 +11,8 @@ | `OptionValue` | 单个选项取值(flag 计数 + values) | | `ParseError` | 解析错误(kind + message) | | `Argv` | `std::vector` 的别名,用于 `parse_from` | +| `Shell` | 目标 shell 枚举:`bash` / `fish` / `zsh` | +| `Command` | 命令树快照,用于生成补全脚本 | 解析返回 `ParseResult`,即 `std::expected`。`-h`/`--help`、`--version` 时,`ParseError::kind` 分别为 `help` / `version`,不携带 `message`,通过 `is_error()` 可区分真实错误。 @@ -40,6 +42,14 @@ --- +## Shell + +| 函数 | 说明 | +|------|------| +| `shell_from_string(sv)` | 字符串 → `std::optional`(如 `"fish"` → `Shell::fish`) | +| `to_string(shell)` | `Shell` → `std::string_view` | +| `shell_supported(shell)` | 该 shell 补全是否已实现(fish / bash / zsh) | + ## ParseError | 成员 | 说明 | @@ -168,3 +178,66 @@ app.option(cmdline::Option("yes").long_opt("yes").global().help("Auto confirm")) app.arg(cmdline::Arg("input").required().help("Input file")); app.subcommand(cmdline::App("add").description("Add").arg(cmdline::Arg("x").required()).action([](const cmdline::ParsedArgs&) {})); ``` + +--- + +## Shell 补全 + +### 生成流程 + +1. 从 `App` 构建 `completions::Command` 树(`snapshot(app)` 或自动由 `generate_completions` 调用) +2. `Command` 包含名称、描述、版本、`Arg`/`Option` 列表、子命令列表 +3. 选择目标 `Shell` 后调用 `generate_completions`,输出补全脚本文本 + +### completions::Command + +| 成员 | 说明 | +|------|------| +| `name` | 命令名 | +| `description` | 描述文本 | +| `version` | 版本号 | +| `args` / `options` / `subcommands` | `vector` / `vector