core/cli: drop Click --help from slash commands

Slash commands use add_help_option=False and empty options_metavar so
/help shows Usage: /history [N] without a fake Options/--help section.
This commit is contained in:
2026-07-15 13:14:47 +08:00
parent 5e016c012b
commit ffab066cab
2 changed files with 29 additions and 1 deletions
+12 -1
View File
@@ -64,7 +64,17 @@ ON_OFF = OnOffParam()
class SlashGroup(click.Group): class SlashGroup(click.Group):
"""Click group for REPL slash commands (no process-level ownership).""" """Click group for REPL slash commands (no process-level ownership).
Commands never expose Click's ``--help``; use ``/help`` / ``/help <cmd>``.
"""
@override
def command(self, *args: Any, **kwargs: Any) -> Any:
# No auto --help; drop [OPTIONS] metavar when the command has no options.
kwargs.setdefault("add_help_option", False)
kwargs.setdefault("options_metavar", "")
return super().command(*args, **kwargs)
@override @override
def get_help(self, ctx: click.Context) -> str: def get_help(self, ctx: click.Context) -> str:
@@ -83,6 +93,7 @@ class SlashGroup(click.Group):
slash = SlashGroup( slash = SlashGroup(
"slash", "slash",
help="REPL slash commands", help="REPL slash commands",
add_help_option=False,
context_settings={"help_option_names": [], "max_content_width": 100}, context_settings={"help_option_names": [], "max_content_width": 100},
) )
+17
View File
@@ -102,6 +102,23 @@ async def test_help_command_usage_line(state: ReplState, capsys: pytest.CaptureF
assert "Usage: /compact" in out assert "Usage: /compact" in out
assert "help [COMMAND] compact" not in out assert "help [COMMAND] compact" not in out
assert "Soft-compact" in out assert "Soft-compact" in out
assert "--help" not in out
assert "Options:" not in out
async def test_help_history_no_fake_options(state: ReplState, capsys: pytest.CaptureFixture[str]) -> None:
assert await handle_slash(state, "/help history") is True
out = capsys.readouterr().out
assert "Usage: /history [N]" in out
assert "Options:" not in out
assert "--help" not in out
async def test_history_rejects_help_flag(state: ReplState, capsys: pytest.CaptureFixture[str]) -> None:
assert await handle_slash(state, "/history --help") is True
captured = capsys.readouterr()
combined = captured.out + captured.err
assert "No such option" in combined
async def test_quit(state: ReplState) -> None: async def test_quit(state: ReplState) -> None: