mirror of
https://github.com/NCBM/plyngent.git
synced 2026-07-23 05:55:16 +08:00
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:
@@ -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},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user