Documenting command collections

Consider the following sample application, using CommandCollection:

# file: cli.py
import click


main = click.Group(
    name='Principal Commands',
    help=(
        "Principal commands that are used in ``cli``.\n\n"
        "The section name and description are obtained using the name and "
        "description of the group passed as sources for |CommandCollection|_."
    ),
)


@main.command(help='CMD 1')
def cmd1() -> None:
    print('call cmd 1')


helpers = click.Group(
    name='Helper Commands',
    help="Helper commands for ``cli``.",
)


@helpers.command()
def cmd2() -> None:
    "Helper command that has no option."
    pass


@helpers.command()
@click.option('--user', type=str)
def cmd3(user: str) -> None:
    "Helper command with an option."
    pass


cli = click.CommandCollection(
    name='cli',
    sources=[main, helpers],
    help='Some general info on ``cli``.',
)

This can be documented using sphinx-click like so:

.. click:: commandcollections.cli:cli
  :prog: cli
  :nested: full

The rendered example is shown below.


cli

Some general info on cli.

cli [OPTIONS] COMMAND [ARGS]...

Principal Commands

Principal commands that are used in cli.

The section name and description are obtained using the name and description of the group passed as sources for CommandCollection.

cmd1

CMD 1

cli cmd1 [OPTIONS]

Helper Commands

Helper commands for cli.

cmd2

Helper command that has no option.

cli cmd2 [OPTIONS]

cmd3

Helper command with an option.

cli cmd3 [OPTIONS]

Options

--user <user>