U ja@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)returncsdtjkrdStjdddttjd}z|dWntk rZdYnXt}tt}g}d}D]}||krv|}qqv|dk r |dkrt d d o|d k}|rt } 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|} drh|D]$} | jtjkr@|| j| j7}q@n t||} | rtt| }tdfdd |Dt ddS)z:Entry Point for completion of main and subcommand options.PIP_AUTO_COMPLETEN COMP_WORDS COMP_CWORDhelp-)show uninstallcs0g|](}|jr|jddkr|jqS)rN)canonical_name startswith).0dist)cwordslcx/private/var/folders/k6/_7fsz4ts3b78x3b3xwrxjh_c8s8xv7/T/pip-unpacked-wheel-bug3gbve/pip/_internal/cli/autocompletion.py 2s z autocomplete..T) local_onlycSsg|]}|ddqS)=r)splitrxrrrrFscs g|]\}}|kr||fqSrr)rr"v) prev_optsrrrGscs"g|]\}}|r||fqSrr)rkr#currentrrrIs cSsg|] }|dfqS)rr)rpathrrrrTsrz--rcSsg|] }|jqSr) option_list)rirrrr^s csg|]}|r|qSrr%r!r'rrrks ) osenvironr int IndexErrorrlistrsysexitrr lowerZiter_installed_distributionsprintr parseroption_list_allroptparse SUPPRESS_HELP _long_opts _short_optsappendnargsget_path_completion_typeauto_complete_paths option_groupsr+r from_iterablejoin)cwordr7 subcommandsoptionssubcommand_namewordshould_list_installedenv installedr subcommandoptopt_strcompletion_typepathsoption opt_labeloptsflattened_optsr)r(rrr$r autocompletes~               rU)rrDrSr 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|]}|dkVqdS))r)filedirNrr!rrr sz+get_path_completion_type..)rrr9r:strr metavarany)rrDrSrMorrrr?os   r?)r(rOr 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)normcaserr!filenamerrrYsz&auto_complete_paths..rXr) r.r)r abspathaccessR_OKr^listdirrCisfileisdir)r(rO directory current_path file_listfrM comp_filerr_rr@s     r@)__doc__r9r.r3 itertoolsrtypingrrrrpip._internal.cli.main_parserrpip._internal.commandsrr Zpip._internal.metadatar rUrZr0r?r@rrrrs   a