o Ec @sdZddlZddlZddlZddlmZddlmZmZm Z m Z ddl m Z ddl mZmZddlmZdd d Zd e ed ed eede efddZdededeefddZdS)zBLogic that powers autocompletion installed by ``pip completion``. N)chain)AnyIterableListOptional)create_main_parser) commands_dictcreate_command)get_default_environmentreturncsdtjvrdStjdddttjd}z|dWn ty,dYnwt}tt}g}d}D] }||vrD|}nq:|dur|dkrRt d d o[|d v}|rt } fd d |j d d D}|r|D]} t| qwt dt|} | jjD]} | jtjkr| j| jD] } || | jfqqdd d|dDfdd |D}fdd |D}t|| jj} | rt| }dd |D}|D]}|d}|dr|ddddkr|d7}t|qnMdd |jD}||jt|} dr)|D]} | jtjkr&|| j| j7}qnt||} | r9tt| }tdfdd |Dt ddS)z:Entry Point for completion of main and subcommand options.ZPIP_AUTO_COMPLETENZ COMP_WORDSZ COMP_CWORDhelp-)ZshowZ uninstallcs0g|]}|jr|jddvr|jqS)r N)Zcanonical_name startswith).0dist)cwordslcS/opt/alt/python310/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py 2s z autocomplete..T)Z local_onlycSsg|] }|ddqS)=r)splitrxrrrrFcs g|] \}}|vr||fqSrr)rrv) prev_optsrrrGs cs"g|] \}}|r||fqSrr)rkrcurrentrrrIs"cSsg|]}|dfqS)rr)rpathrrrrTsrz--rcSsg|]}|jqSr) option_list)rirrrr^s csg|] }|r|qSrrrr!rrrkr) osenvironrint IndexErrorrlistrsysexitrr lowerZiter_installed_distributionsprintr parserZoption_list_allroptparse SUPPRESS_HELPZ _long_optsZ _short_optsappendnargsget_path_completion_typeauto_complete_pathsZ option_groupsr%r from_iterablejoin)cwordr1Z subcommandsoptionsZsubcommand_nameZwordZshould_list_installedenvZ installedrZ subcommandoptZopt_strcompletion_typepathsZoptionZ opt_labeloptsZflattened_optsr)r"rrrr autocompletes               rArr:r@cCs|dks ||ddsdS|D]7}|jtjkrqt|dD]&}||ddd|krG|jr@tdd|jdDrG|jSq!qdS) 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) r$rN/rrcss|]}|dvVqdS))r#filedirNrrrrr s z+get_path_completion_type..)rrr2r3strrmetavarany)rr:r@r=orrrr6os   r6r"r>c#stj|\}tj|}t|tjsdStjfddt|D}|D]0}tj||}tjtj||}|dkrNtj |rN|Vq,tj |r\tj|dVq,dS)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|VqdS)N)r(r#normcaserrfilenamerrrEs  z&auto_complete_paths..rDr ) r(r#rabspathaccessR_OKrJlistdirr9isfileisdir)r"r>Z directoryZ current_pathZ file_listfr=Z comp_filerrKrr7s$    r7)r N)__doc__r2r(r- itertoolsrtypingrrrrZpip._internal.cli.main_parserrZpip._internal.commandsrr Zpip._internal.metadatar rArFr*r6r7rrrrs(    `