canonical / craft-cli

https://canonical-craft-cli.readthedocs-hosted.com/en/latest/
GNU Lesser General Public License v3.0
9 stars 15 forks source link

Unhelpful error message when creating help if an argument doesn't have a help text #242

Open lengau opened 7 months ago

lengau commented 7 months ago

Bug Description

If a command adds an argument without help text, the error raised isn't very useful. It should give a better error.

To Reproduce

import sys

import craft_cli

class ExampleCommand(craft_cli.BaseCommand):

    name = "example"
    help_msg = overview = "unimportant"

    def fill_parser(self, parser):
        parser.add_argument("--do-something")

craft_cli.emit.init(craft_cli.EmitterMode.BRIEF, "example-app", "example app")

dispatcher = craft_cli.Dispatcher(
    "example-app",
    [craft_cli.CommandGroup("Example", [ExampleCommand])],
    summary="summary"
)
dispatcher.pre_parse_args(sys.argv[1:])
dispatcher.load_command(None)
dispatcher.run()

python ./example.py help example

part yaml

n/a

Relevant log output

Traceback (most recent call last):
  File "/home/lengau/Work/Code/charmcraft-2/charmcraft/application/commands/example.py", line 22, in <module>
    dispatcher.pre_parse_args(sys.argv[1:])
  File "/home/lengau/Work/Code/charmcraft-2/.venv/lib/python3.11/site-packages/craft_cli/dispatcher.py", line 469, in pre_parse_args
    help_text = self._get_requested_help(cmd_args)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/lengau/Work/Code/charmcraft-2/.venv/lib/python3.11/site-packages/craft_cli/dispatcher.py", line 355, in _get_requested_help
    return self._help_builder.get_command_help(command, command_options, output_format)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/lengau/Work/Code/charmcraft-2/.venv/lib/python3.11/site-packages/craft_cli/helptexts.py", line 425, in get_command_help
    textblocks = builder(usage, command.overview, options, other_command_names)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/lengau/Work/Code/charmcraft-2/.venv/lib/python3.11/site-packages/craft_cli/helptexts.py", line 312, in _build_plain_command_help
    option_lines.extend(_build_item_plain(title, text, max_title_len))
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/lengau/Work/Code/charmcraft-2/.venv/lib/python3.11/site-packages/craft_cli/helptexts.py", line 71, in _build_item_plain
    first = f"    {title:>{title_space}s}:  {wrapped_lines[0]}"
                                             ~~~~~~~~~~~~~^^^
IndexError: list index out of range