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_dictcreate_command)get_installed_distributionsc s dt jkrdS t jd dd } tt jd }z| |d W n tk
rZ d Y nX ttg }zfdd| D d }W n tk
r d}Y nX t }|r:|d
krt d |dkö
d }|r>g } }td
dD ].}|j
|r|j
| dd kr||j
q|r>|D ]}t| q$t d t|} | jjD ]8}
|
jtjkrN|
j|
j D ]}|||
jf qlqNdd | d|d D fdd|D } fdd|D }t| || jj}|rt |}dd |D }|D ]>}
|
d }|
d r,|
d dd dkr,|d7 }t| qndd |jD }||j dd |D }
dr|D ]$}
|
jtjkrt|
j|
j 7 qtnt| ||}|rt |td fddD 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 ).0w)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 )splitr xr r r r
D s c s g | ]\}}| kr||fqS r r )r r v) prev_optsr r r
E s c s" g | ]\}}| r||fqS 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 itor r r r \ s c s g | ]}| r|qS r r r r r r r
g s
)osenvironr int
IndexErrorlistr r sysexitr lowerr keyappendprintr parserZoption_list_allr optparse
SUPPRESS_HELPZ
_long_optsZ_short_optsnargsget_path_completion_typeauto_complete_pathsZ
option_groupsr join)cwordscwordZoptionsZsubcommand_namer/ Zshould_list_installedZ installedZlcZdistZ
subcommandr Zopt_strcompletion_typeZoptionZ opt_labeloptsr )r r r r autocomplete s
r: c C s |dk s| |d dsdS |D ]n}|jtjkr4q"t|dD ]L}| |d dd |krB|jrtdd |jdD 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 ))pathfiledirNr r r r r r z s z+get_path_completion_type..)r r r0 r1 strr metavarany)r6 r7 r9 r r" r r r r3 k s
r3 c # s t j| \} t j|}t |t js.dS t j fddt |D }|D ]`}t j||}t jt j||}|dkrt j |r|V qVt j
|rVt j|dV 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<