From bd1c6660079398a406d2160dd6869ea2bb9b25d0 Mon Sep 17 00:00:00 2001 From: Todd Leonhardt Date: Sun, 3 Nov 2019 18:03:48 -0500 Subject: Improved documentation for Argument Parsing and Tab-Completion Also: - Added a couple examples --- docs/features/argument_processing.rst | 24 +++++++++++++++--- docs/features/completion.rst | 46 +++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 4 deletions(-) (limited to 'docs') diff --git a/docs/features/argument_processing.rst b/docs/features/argument_processing.rst index a3d4a3aa..a8124292 100644 --- a/docs/features/argument_processing.rst +++ b/docs/features/argument_processing.rst @@ -1,5 +1,3 @@ -.. _decorators: - Argument Processing =================== @@ -33,6 +31,7 @@ applications. .. _argprint: https://github.com/python-cmd2/cmd2/blob/master/examples/arg_print.py .. _decorator: https://github.com/python-cmd2/cmd2/blob/master/examples/decorator_example.py +.. _decorators: Decorators provided by cmd2 for argument processing --------------------------------------------------- @@ -40,12 +39,12 @@ Decorators provided by cmd2 for argument processing ``cmd2`` provides the following decorators for assisting with parsing arguments passed to commands: -.. automethod:: cmd2.decorators.with_argument_list - :noindex: .. automethod:: cmd2.decorators.with_argparser :noindex: .. automethod:: cmd2.decorators.with_argparser_and_unknown_args :noindex: +.. automethod:: cmd2.decorators.with_argument_list + :noindex: All of these decorators accept an optional **preserve_quotes** argument which defaults to ``False``. Setting this argument to ``True`` is useful for cases @@ -342,3 +341,20 @@ use subcommands in your ``cmd2`` application. .. _subcommands: https://github.com/python-cmd2/cmd2/blob/master/examples/subcommands.py .. _tab_autocompletion: https://github.com/python-cmd2/cmd2/blob/master/examples/tab_autocompletion.py + + +Argprase Extensions +------------------- + +``cmd2`` augments the standard ``argparse.nargs`` with range tuple capability: + +- ``nargs=(5,)`` - accept 5 or more items +- ``nargs=(8, 12)`` - accept 8 to 12 items + +``cmd2`` also provides the ``Cmd2ArgumentParser`` class which inherits from +``argparse.ArgumentParser`` and improves error and help output: + +.. autoclass:: cmd2.argparse_custom.Cmd2ArgumentParser + :members: + + diff --git a/docs/features/completion.rst b/docs/features/completion.rst index 5d2a722c..dfeddb27 100644 --- a/docs/features/completion.rst +++ b/docs/features/completion.rst @@ -31,3 +31,49 @@ similar to the following to your class which inherits from ``cmd2.Cmd``:: # Make sure you have an "import functools" somewhere at the top complete_bar = functools.partialmethod(cmd2.Cmd.path_complete, path_filter=os.path.isdir) + + +Tab Completion Using Argparse Decorators +---------------------------------------- + +When using one the Argparse-based :ref:`decorators`, ``cmd2`` provides +automatic tab-completion of flag names. + +Tab-completion of argument values can be configured by using one of five +parameters to ``argparse.ArgumentParser.add_argument()`` + +- ``choices`` +- ``choices_function`` / ``choices_method`` +- ``completer_function`` / ``completer_method`` + +See the arg_decorators_ or colors_ example for a demonstration of how to +use the ``choices`` parameter. See the tab_autocompletion_ example for a +demonstration of how to use the ``choices_function`` and ``choices_method`` +parameters. See the arg_decorators_ or tab_autocompletion_ example for a +demonstration of how to use the ``completer_method`` parameter. + +When tab-completing flags and/or argument values for a ``cmd2`` command using +one of these decorators, ``cmd2`` keeps track of state so that once a flag has +already previously been provided, it won't attempt to tab-complete it again. +When no completion results exists, a hint for the current argument will be +displayed to help the user. + +.. _arg_decorators: https://github.com/python-cmd2/cmd2/blob/master/examples/arg_decorators.py +.. _colors: https://github.com/python-cmd2/cmd2/blob/master/examples/colors.py +.. _tab_autocompletion: https://github.com/python-cmd2/cmd2/blob/master/examples/tab_autocompletion..py + + +CompletionItem For Providing Extra Context +------------------------------------------ + +When tab-completing things like a unique ID from a database, it can often be +beneficial to provide the user with some extra context about the item being +completed, such as a description. To facilitate this, ``cmd2`` defines the +``CompletionItem`` class which can be used in combination with +``choices_function`` or ``choices_method``. + +.. autoclass:: cmd2.argparse_custom.CompletionItem + :members: + +See the tab_autocompletion_ example or the implementation of the built-in +**set** command for demonstration of how this is used. -- cgit v1.2.1