a Ra@sdZddlZddlZddlZddlmZddlmZmZm Z m Z ddl m Z ddl mZmZddlmZddd d Ze eeeee ed d d ZeeeedddZdS)zBLogic that powers autocompletion installed by ``pip completion``. N)chain)AnyIterableListOptional)create_main_parser) commands_dictcreate_command)get_default_environment)returncsdtjvrdStjdddttjd}z|dWntyXdYn0t}tt}g}d}D]}||vrt|}qqt|dur|dkrt d d o|d v}|r t } fd d |j d d D}|r |D] } t| qt dt|} | jjD]8} | jtjkr| j| jD]} || | jfq:qdd d|dDfdd |D}fdd |D}t|| jj} | rt| }dd |D}|D]>}|d}|dr|ddddkr|d7}t|qndd |jD}||jt|} drf|D]$} | jtjkr>|| j| j7}q>n t||} | rtt| }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)cwordslcQ/opt/alt/python39/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py 2s z autocomplete..T)Z local_onlycSsg|]}|ddqS)=r)splitrxrrrrFcs g|]\}}|vr||fqSrr)rrv) prev_optsrrrGrcs"g|]\}}|r||fqSrr)rkrcurrentrrrIrcSsg|] }|dfqS)rr)rpathrrrrTrrz--rcSsg|] }|jqSr) option_list)rirrrr^r 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~                rA)rr:r@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) r$rN/rrcss|]}|dvVqdS))r#filedirNrrrrr sz+get_path_completion_type..)rrr2r3strrmetavarany)rr:r@r=orrrr6os   r6)r"r>r c#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|VqdS)N)r(r#normcaserrfilenamerrrEsz&auto_complete_paths..rDr ) r(r#rabspathaccessR_OKrJlistdirr9isfileisdir)r"r>Z directoryZ current_pathZ file_listfr=Z comp_filerrKrr7s     r7)__doc__r2r(r- itertoolsrtypingrrrrZpip._internal.cli.main_parserrZpip._internal.commandsrr Zpip._internal.metadatar rArFr*r6r7rrrrs   a