o ai @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.PIP_AUTO_COMPLETEN COMP_WORDS COMP_CWORDhelp-)show uninstallcs0g|]}|jr|jddvr|jqS)rN)canonical_name startswith).0dist)cwordslc/builddir/build/BUILDROOT/alt-python310-pip-21.3.1-5.el8.x86_64/opt/alt/python310/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py 2s z autocomplete..T) local_onlycSsg|] }|ddqS)=r)splitrxrrrrFcs g|] \}}|vr||fqSrr)rr"v) prev_optsrrrGs cs"g|] \}}|r||fqSrr)rkr$currentrrrIs"cSsg|]}|dfqS)rr)rpathrrrrTsrz--rcSsg|]}|jqSr) option_list)rirrrr^s csg|] }|r|qSrr&r!r(rrrkr#) osenvironr int IndexErrorrlistrsysexitrr loweriter_installed_distributionsprintr parseroption_list_allroptparse SUPPRESS_HELP _long_opts _short_optsappendnargsget_path_completion_typeauto_complete_paths option_groupsr,r from_iterablejoin)cwordr9 subcommandsoptionssubcommand_namewordshould_list_installedenv installedr subcommandoptopt_strcompletion_typepathsoption opt_labeloptsflattened_optsr)r)rrr%r autocompletes               rWrrFrUcCs|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*filedirNrr!rrr s z+get_path_completion_type..)rrr;r<strr metavarany)rrFrUrOorrrrAos   rAr)rQc#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*normcaserr!filenamerrr[s  z&auto_complete_paths..rZr) r/r*r abspathaccessR_OKr`listdirrEisfileisdir)r)rQ directory current_path file_listfrO comp_filerrarrBs$    rB)r N)__doc__r;r/r4 itertoolsrtypingrrrrpip._internal.cli.main_parserrpip._internal.commandsrr pip._internal.metadatar rWr\r1rArBrrrrs(    `