[v0.1/CLI Args Review] Expose the finite --format/--source vocabularies to clap #184

Closed
opened 2026-09-07 16:10:18 +09:00 by natsukium · 1 comment
Owner

現状

--formatcapture --source は有限語彙なのに、clap へ value_parser = fn で渡しているため、possible values が help と generated completion のどちらにも現れない。#55 で指摘済みだが子 issue がなく、追跡されていない。

実機確認 (felis sessions capture --help):

  • --format <FORMAT>[possible values: …] なし。本文に `human` (default) or `jsonl` と書くのみ。
  • --source <SOURCE> — 同上。visible / scrollback / command-output / last-command は本文のみ。

該当 parser:

  • crates/felis-cli/src/cli_output.rsparse_point_format (human/json)、parse_stream_format (human/jsonl)
  • crates/felis-cli/src/cli_sessions.rs:469parse_region_source (visible / scrollback / command-output / last-command)

completions <shell> は clap_complete 経由で生成されるが、fn parser の値域は補完候補に出ない (fish/zsh overlay が足すのは session id のみ)。--key の chord 文法や KEY=VALID-OR-PREFIX は無限文法なので対象外。completions <shell> の shell 名は clap_complete::Shell (ValueEnum) で公開済み。

提案

有限語彙の 2 flag を PossibleValuesParser / ValueEnum 化し、語彙を clap に公開する。

  • 無効値は従来どおり exit 2 の usage error。ただし現行の親切な文言 (例: `jsonl` frames a stream; …) は clap 既定の invalid-value error に変わる。これは pre-publish の破壊的変更として許容し、CHANGELOG.md Unreleased に記す。文言を残す安価な手段があれば残すが、必須としない。
  • felis completions bash|zsh|fish の生成物に当該値が現れることを golden で固定する。
  • help snapshot (本件と同時に #184 が立てる場合はそちらへ) と man pages を再生成する。

Principle check

  1. Add only what earns its place — Pass. 能力は増やさず、重複記述 (本文中の語彙列挙) を単一の機械可読な定義に寄せる。
  2. Explicit over heuristic — Pass. 受け入れる値を grammar 層で明示する変更。

Acceptance criteria

  • sessions capture --help 等の --format / --source[possible values: …] が現れる。
  • 生成された bash/zsh/fish completion が当該値を補完する (golden test)。
  • 無効値 (--format jsonl on point verb、--source bogus) が exit 2 であることがテストされる。
  • docs/reference/cli.md が error 文言を引用している箇所があれば新文言に同期する。
  • CHANGELOG.md に pre-publish break として記す。

対象

  • crates/felis-cli/src/cli_output.rs (PointFormat, StreamFormat, parser 2 関数)
  • crates/felis-cli/src/cli_sessions.rs (parse_region_source と使用箇所)
  • crates/felis-cli/src/tests.rs (help/completion golden)
  • docs/reference/cli.mdCHANGELOG.md

Parent review: #55. Release tracker: #12.

## 現状 `--format` と `capture --source` は有限語彙なのに、clap へ `value_parser = fn` で渡しているため、possible values が help と generated completion のどちらにも現れない。#55 で指摘済みだが子 issue がなく、追跡されていない。 実機確認 (`felis sessions capture --help`): - `--format <FORMAT>` — `[possible values: …]` なし。本文に `` `human` (default) or `jsonl` `` と書くのみ。 - `--source <SOURCE>` — 同上。`visible` / `scrollback` / `command-output` / `last-command` は本文のみ。 該当 parser: - `crates/felis-cli/src/cli_output.rs` — `parse_point_format` (`human`/`json`)、`parse_stream_format` (`human`/`jsonl`) - `crates/felis-cli/src/cli_sessions.rs:469` — `parse_region_source` (`visible` / `scrollback` / `command-output` / `last-command`) `completions <shell>` は clap_complete 経由で生成されるが、fn parser の値域は補完候補に出ない (fish/zsh overlay が足すのは session id のみ)。`--key` の chord 文法や `KEY=VAL`、`ID-OR-PREFIX` は無限文法なので対象外。`completions <shell>` の shell 名は `clap_complete::Shell` (ValueEnum) で公開済み。 ## 提案 有限語彙の 2 flag を `PossibleValuesParser` / `ValueEnum` 化し、語彙を clap に公開する。 - 無効値は従来どおり exit `2` の usage error。ただし現行の親切な文言 (例: `` `jsonl` frames a stream; … ``) は clap 既定の invalid-value error に変わる。これは pre-publish の破壊的変更として許容し、`CHANGELOG.md` Unreleased に記す。文言を残す安価な手段があれば残すが、必須としない。 - `felis completions bash|zsh|fish` の生成物に当該値が現れることを golden で固定する。 - help snapshot (本件と同時に #184 が立てる場合はそちらへ) と man pages を再生成する。 ## Principle check 1. **Add only what earns its place — Pass.** 能力は増やさず、重複記述 (本文中の語彙列挙) を単一の機械可読な定義に寄せる。 2. **Explicit over heuristic — Pass.** 受け入れる値を grammar 層で明示する変更。 ## Acceptance criteria - [ ] `sessions capture --help` 等の `--format` / `--source` に `[possible values: …]` が現れる。 - [ ] 生成された bash/zsh/fish completion が当該値を補完する (golden test)。 - [ ] 無効値 (`--format jsonl` on point verb、`--source bogus`) が exit `2` であることがテストされる。 - [ ] `docs/reference/cli.md` が error 文言を引用している箇所があれば新文言に同期する。 - [ ] `CHANGELOG.md` に pre-publish break として記す。 ## 対象 - `crates/felis-cli/src/cli_output.rs` (`PointFormat`, `StreamFormat`, parser 2 関数) - `crates/felis-cli/src/cli_sessions.rs` (`parse_region_source` と使用箇所) - `crates/felis-cli/src/tests.rs` (help/completion golden) - `docs/reference/cli.md`、`CHANGELOG.md` Parent review: #55. Release tracker: #12.
Author
Owner

Merged into #187, which carries the same change (ValueEnums for --format and capture --source, possible values in help, completion golden, exit 2 on a bad value, CHANGELOG entry) and is being implemented on branch feat/finite-option-values-187. Closing as a duplicate; #187 reports back to #55.

Merged into #187, which carries the same change (ValueEnums for `--format` and `capture --source`, possible values in help, completion golden, exit 2 on a bad value, CHANGELOG entry) and is being implemented on branch `feat/finite-option-values-187`. Closing as a duplicate; #187 reports back to #55.
Sign in to join this conversation.
No description provided.