U
    ù6e  ã                   @   st   d Z ddlZddlZddlmZ dZzddlZW n ek
rH   dZY nX dZddgZe 	e
¡Zeddœd	d„ZdS )
a^  
Shell completion
~~~~~~~~~~~~~~~~

Command and argument completion is a great way to reduce the number of
keystrokes and improve user experience.

To display suggestions when you press :kbd:`tab`, a shell must obtain choices
from your program.  It calls the program in a specific environment and expects
it to return a list of relevant choices.

`Argparse` does not support completion out of the box.  However, there are
3rd-party apps that do the job, such as argcomplete_ and
python-selfcompletion_.

`Argh` supports only argcomplete_ which doesn't require subclassing
the parser and monkey-patches it instead.  Combining `Argh`
with python-selfcompletion_ isn't much harder though: simply use
`SelfCompletingArgumentParser` instead of vanilla `ArgumentParser`.

See installation details and gotchas in the documentation of the 3rd-party app
you've chosen for the completion backend.

`Argh` automatically enables completion if argcomplete_ is available
(see :attr:`COMPLETION_ENABLED`).  If completion is undesirable in given app by
design, it can be turned off by setting ``completion=False``
in :func:`argh.dispatching.dispatch`.

Note that you don't *have* to add completion via `Argh`; it doesn't matter
whether you let it do it for you or use the underlying API.

.. _argcomplete: https://github.com/kislyuk/argcomplete
.. _python-selfcompletion: https://github.com/dbarnett/python-selfcompletion

Argument-level completion
-------------------------

Argcomplete_ supports custom "completers".  The documentation suggests adding
the completer as an attribute of the argument parser action::

    parser.add_argument("--env-var1").completer = EnvironCompleter

However, this doesn't fit the normal `Argh`-assisted workflow.
It is recommended to use the :func:`~argh.decorators.arg` decorator::

    @arg("--env-var1", completer=EnvironCompleter)
    def func(...):
        ...

é    N)ÚArgumentParserFTÚautocompleteÚCOMPLETION_ENABLED)ÚparserÚreturnc                 C   s0   t rt | ¡ ndt dd¡kr,t d¡ n dS )z·
    Adds support for shell completion via argcomplete_ by patching given
    `argparse.ArgumentParser` (sub)class.

    If completion is not enabled, logs a debug-level message.
    ZbashZSHELLÚ z=Bash completion is not available. Please install argcomplete.N)r   Úargcompleter   ÚosÚgetenvÚloggerÚdebug)r   © r   ú.lib/python3.8/site-packages/argh/completion.pyr   S   s
    )Ú__doc__Zloggingr	   Úargparser   r   r   ÚImportErrorÚ__all__Z	getLoggerÚ__package__r   r   r   r   r   r   Ú<module>
   s   2

