U .e@s`dZddlZddlZddlZddlmZddlmZmZddl m Z ddZ dd Z d d Z dS) zBLogic that powers autocompletion installed by ``pip completion``. N)create_main_parser) commands_dictcreate_command)get_installed_distributionscsdtjkrdStjddd}ttjd}z||dWntk rZdYnXttg}zfdd|Dd }Wntk rd}YnXt}|r:|d krt d|d kö d  }|r>g} }t d dD].}|j |r|j |ddkr||j q|r>|D]}t|q$t dt|} | jjD]8} | jtjkrN| j| jD]} || | jfqlqNdd|d|dDfdd|D}fdd|D}t||| jj} | rt| }dd|D}|D]>} | d }| dr,| d dddkr,|d7}t|qndd|jD}||jdd|D} d r|D]$} | jtjkrt| j| j7qtnt|||} | rt| tdfddDt ddS)z?Entry Point for completion of main and subcommand options. ZPIP_AUTO_COMPLETENZ COMP_WORDSZ COMP_CWORDcsg|]}|kr|qSr).0w) subcommandsrD/usr/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py !sz autocomplete..rhelp)ZshowZ uninstall-T)Z local_onlycSsg|]}|ddqS)=r)splitr xrrr r Dscs g|]\}}|kr||fqSrr)r rv) prev_optsrr r Escs"g|]\}}|r||fqSr startswith)r krcurrentrr r Gs css|]}|dfVqdS)rNr)r optrrr Pszautocomplete..z--rcSsg|] }|jqSr) option_list)r irrr r Zscss|]}|D] }|Vq qdSNr)r itorrr r\s csg|]}|r|qSrrrrrr r gs )osenvironrint IndexErrorlistrrsysexitrlowerrkeyappendprintrparserZoption_list_allroptparse SUPPRESS_HELPZ _long_optsZ _short_optsnargsget_path_completion_typeauto_complete_pathsZ option_groupsrjoin)cwordscwordZoptionsZsubcommand_namer/Zshould_list_installedZ installedZlcZdistZ subcommandrZopt_strcompletion_typeZoptionZ opt_labeloptsr)rrr r autocompletes              r:cCs|dks||ddsdS|D]n}|jtjkr4q"t|dD]L}||ddd|krB|jrtdd|jdDrB|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))pathfiledirNrrrrr rzsz+get_path_completion_type..)rrr0r1strrmetavarany)r6r7r9rr"rrr r3ks  r3c#stj|\}tj|}t|tjs.dStjfddt|D}|D]`}tj||}tjtj||}|dkrtj |r|VqVtj |rVtj|dVqVdS)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<normcaserrfilenamerr rsz&auto_complete_paths..r>r) r$r<rabspathaccessR_OKrBlistdirr5isfileisdir)rr8Z directoryZ current_pathZ file_listfrZ comp_filerrCr r4s    r4)__doc__r0r$r)Zpip._internal.cli.main_parserrZpip._internal.commandsrrZpip._internal.utils.miscrr:r3r4rrrr s  [