U
��.e � @ s` d Z ddlZddlZddlZddlmZ ddlmZmZ ddl m
Z
dd� Zdd � Zd
d� Z
dS )zBLogic that powers autocompletion installed by ``pip completion``.
� N)�create_main_parser)�
commands_dict�create_command)�get_installed_distributionsc s� dt jkrdS t jd �� dd� } tt jd �}z| |d � W n tk
rZ d� Y nX tt��g }z�fdd�| D �d }W n tk
r� d}Y nX t� }|�r:|d
kr�t� d� |dkö �
d� }|�r>g }� �� }td
d�D ].}|j
�
|�r�|j
| dd� kr�|�|j
� q�|�r>|D ]}t|� �q$t� d� t|�} | jjD ]8}
|
jtjk�rN|
j|
j D ]}|�||
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|
j 7 ��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� c s g | ]}|� kr|�qS � r )�.0�w)�subcommandsr �D/usr/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py�
! s z autocomplete..r �help)ZshowZ uninstall�-T)Z
local_onlyc S s g | ]}|� d �d �qS )�=r )�split�r �xr r r r
D s c s g | ]\}}|� kr||f�qS r r )r r �v)� prev_optsr r r
E s c s" g | ]\}}|� � �r||f�qS r ��
startswith)r �kr ��currentr r r
G s
c s s | ]}|d fV qdS )r Nr )r �optr r r � P s zautocomplete..� z--r c S s g | ]
}|j �qS r )�option_list)r �ir r r r
Z s c s s | ]}|D ]
}|V q
qd S �Nr )r �it�or r r r \ s � c s g | ]}|� � �r|�qS r r r r r r r
g s
)�os�environr �int�
IndexError�listr r �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
subcommandr Zopt_str�completion_typeZoptionZ opt_label�optsr )r r r r �autocomplete s�
�
�
r: c C s� |dk s| |d � d�sdS |D ]n}|jtjkr4q"t|��d�D ]L}| |d �d�d |krB|jr�tdd� |j�d�D ��rB|j S qBq"dS ) aL Get 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)
r r N�/r r c s s | ]}|d kV qdS ))�path�file�dirNr r r r r r z s �z+get_path_completion_type..)r r r0 r1 �strr �metavar�any)r6 r7 r9 r r" r r r r3 k s
�r3 c # s� t j�| �\}� t j�|�}t �|t j�s.dS t j�� �� � fdd�t �|�D �}|D ]`}t j�||�}t j�t j�||��}|dkr�t j� |�r�|V qVt j�
|�rVt j�|d�V qVdS )ao If ``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
Nc 3 s$ | ]}t j�|��� �r|V qd S r )r$ r<