U ��.e�@s`dZddlZddlZddlZddlmZddlmZmZddl m Z dd�Z dd �Z d d �Z dS) zBLogic that powers autocompletion installed by ``pip completion``. �N)�create_main_parser)� commands_dict�create_command)�get_installed_distributionscs�dtjkrdStjd��dd�}ttjd�}z||d�Wntk rZd�YnXtt��g}z�fdd�|D�d }Wntk r�d}YnXt�}|�r:|d kr�t� d�|d kö� d � }|�r>g}�� �}t d d�D].}|j � |�r�|j |dd�kr�|�|j �q�|�r>|D]}t|��q$t� d�t|�} | jjD]8} | jtjk�rN| j| jD]} |�| | jf��ql�qNdd�|d|d�D���fdd�|D�}�fdd�|D�}t||| jj�} | �r�t�| �}dd�|D�}|D]>} | d }| d�r,| d dd�dk�r,|d7}t|��q�n�dd�|jD�}|�|j�dd�|D�}�� d ��r�|D]$} | jtjk�rt�| j| j7��qtnt|||�} | �r�t�| ��td��fdd��D���t� d�dS)z?Entry Point for completion of main and subcommand options. ZPIP_AUTO_COMPLETENZ COMP_WORDS�Z COMP_CWORD�csg|]}|�kr|�qS�r)�.0�w)� subcommandsr�D/usr/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py� !sz autocomplete..r�help)ZshowZ uninstall�-T)Z local_onlycSsg|]}|�d�d�qS)�=r)�split�r �xrrr r Dscs g|]\}}|�kr||f�qSrr)r r�v)� prev_optsrr r Escs"g|]\}}|���r||f�qSr�� startswith)r �kr��currentrr r Gs css|]}|dfVqdS)rNr)r �optrrr � Pszautocomplete..�z--rcSsg|] }|j�qSr)� option_list)r �irrr r Zscss|]}|D] }|Vq qdS�Nr)r �it�orrr r\s� csg|]}|���r|�qSrrrrrr r gs )�os�environr�int� IndexError�listrr�sys�exitr�lowerr�key�append�printr�parserZoption_list_allr�optparse� SUPPRESS_HELPZ _long_optsZ _short_opts�nargs�get_path_completion_type�auto_complete_pathsZ option_groupsr�join)�cwords�cwordZoptionsZsubcommand_namer/Zshould_list_installedZ installedZlcZdistZ subcommandrZopt_str�completion_typeZoptionZ opt_label�optsr)rrr r � autocompletes�     �   �      r:cCs�|dks||d�d�sdS|D]n}|jtjkr4q"t|��d�D]L}||d�d�d|krB|jr�tdd�|j�d�D��rB|jSqBq"dS) aLGet the type of path completion (``file``, ``dir``, ``path`` or None) :param cwords: same as the environmental variable ``COMP_WORDS`` :param cword: same as the environmental variable ``COMP_CWORD`` :param opts: The available options to check :return: path completion type (``file``, ``dir``, ``path`` or None) rrN�/rrcss|]}|dkVqdS))�path�file�dirNrrrrr rzs�z+get_path_completion_type..)rrr0r1�strr�metavar�any)r6r7r9rr"rrr r3ks  �r3c#s�tj�|�\}�tj�|�}t�|tj�s.dStj�����fdd�t�|�D�}|D]`}tj�||�}tj�tj�||��}|dkr�tj� |�r�|VqVtj� |�rVtj�|d�VqVdS)aoIf ``completion_type`` is ``file`` or ``path``, list all regular files and directories starting with ``current``; otherwise only list directories starting with ``current``. :param current: The word to be completed :param completion_type: path completion type(`file`, `path` or `dir`)i :return: A generator of regular files and/or directories Nc3s$|]}tj�|����r|VqdSr )r$r<�normcaserr��filenamerr r�s�z&auto_complete_paths..r>r) r$r<r�abspath�access�R_OKrB�listdirr5�isfile�isdir)rr8Z directoryZ current_pathZ file_list�frZ comp_filerrCr r4�s    r4)�__doc__r0r$r)Zpip._internal.cli.main_parserrZpip._internal.commandsrrZpip._internal.utils.miscrr:r3r4rrrr �s  [