File tree Expand file tree Collapse file tree
roots/test-prog-subcommands Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ from __future__ import annotations
2+
3+ import sys
4+ from pathlib import Path
5+
6+ sys .path .insert (0 , str (Path (__file__ ).parent ))
7+ extensions = ["sphinx_argparse_cli" ]
8+ nitpicky = True
Original file line number Diff line number Diff line change 1+ .. sphinx_argparse_cli ::
2+ :module: parser
3+ :func: make
4+ :prog: my-tool
Original file line number Diff line number Diff line change 1+ from __future__ import annotations
2+
3+ from argparse import ArgumentParser
4+
5+
6+ def make () -> ArgumentParser :
7+ parser = ArgumentParser (prog = "original-name" )
8+ sub = parser .add_subparsers ()
9+ sub .add_parser ("foo" , help = "foo help" )
10+ return parser
Original file line number Diff line number Diff line change @@ -140,7 +140,9 @@ def parser(self) -> ArgumentParser:
140140 raise self .error (msg )
141141
142142 if "prog" in self .options :
143- self ._parser .prog = self .options ["prog" ]
143+ old_prog , new_prog = self ._parser .prog , self .options ["prog" ]
144+ self ._parser .prog = new_prog
145+ _update_sub_parser_prog (self ._parser , old_prog , new_prog )
144146
145147 self ._raw_format = self ._parser .formatter_class == RawDescriptionHelpFormatter
146148 return self ._parser
@@ -453,6 +455,15 @@ def _strip_ansi_colors(text: str) -> str: # pragma: >=3.14 cover
453455 return _ANSI_COLOR_RE .sub ("" , text )
454456
455457
458+ def _update_sub_parser_prog (parser : ArgumentParser , old_prog : str , new_prog : str ) -> None :
459+ if not (sub_parsers := parser ._subparsers ): # noqa: SLF001
460+ return
461+ sub_action : _SubParsersAction [ArgumentParser ] = sub_parsers ._group_actions [0 ] # type: ignore[assignment] # noqa: SLF001
462+ for sub_parser in sub_action .choices .values ():
463+ sub_parser .prog = sub_parser .prog .replace (old_prog , new_prog , 1 )
464+ _update_sub_parser_prog (sub_parser , old_prog , new_prog )
465+
466+
456467__all__ = [
457468 "SphinxArgparseCli" ,
458469]
Original file line number Diff line number Diff line change @@ -390,3 +390,10 @@ def test_tuple_metavar(build_outcome: str) -> None:
390390 assert "select a pair" in build_outcome
391391 assert "default: None" not in build_outcome
392392 assert '"VAL"' in build_outcome
393+
394+
395+ @pytest .mark .sphinx (buildername = "text" , testroot = "prog-subcommands" )
396+ def test_prog_subcommands (build_outcome : str ) -> None :
397+ assert "my-tool" in build_outcome
398+ assert "original-name" not in build_outcome
399+ assert "my-tool foo" in build_outcome
You can’t perform that action at this time.
0 commit comments