U 巀g@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)returncs dtjkrdStjdr&tjds*dStjdddttjd}z|dWntk rvdYnXt}tt}g}d}D]}||kr|}qq|dk rb|dkrt d d o|d k}|r,t } fd d |jd d D}|r,|D]} t| qt d d o@|dk} | rltdD]} t| qRt dt|} | jjD]2jtjkr||fdd jjD7}q|dd d|dDfdd |D}fdd |D}t|| jj} | rt| }dd |D}|D]>}|d}|drT|ddddkrT|d7}t|q ndd |jD}||jt|} dr|D]$jtjkr|jj7}qn 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)cwordslcN/opt/hc_python/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py 6s z autocomplete..T) local_onlyinstallpathcsg|]}|jfqSr)nargs)ropt_str)optrrrNscSsg|]}|ddqS)=r)splitrxrrrrSscs g|]\}}|kr||fqSrr)rr'v) prev_optsrrrTscs"g|]\}}|r||fqSrr)rkr(currentrrrVs cSsg|] }|dfqS)rr)rr rrrrasrz--r$cSsg|] }|jqSr) option_list)rirrrrks csg|]}|r|qSrr*r&r,rrrxs ) osenvirongetr%int IndexErrorrlistrsysexitrr loweriter_installed_distributionsprintauto_complete_pathsr parseroption_list_allroptparse SUPPRESS_HELP _long_opts _short_optsget_path_completion_type option_groupsappendr/r from_iterablejoin)cwordr> subcommandsoptionssubcommand_namewordshould_list_installedenv installedrshould_list_installablesr subcommandcompletion_typepathsoption opt_labeloptsflattened_optsr)r-rrr#r)r autocompletes                   rY)rrIrWr 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/r$rcss|]}|dkVqdS))r filedirNrr&rrr sz+get_path_completion_type..)rrr@rAstrr%metavarany)rrIrWr#orrrrD|s   rD)r-rSr c#stj|\}tj|}t|tjs.dStjfddt|D}|D]`}tj||}tjtj||}|dkrtj |r|VqVtj |rVtj|dVqVdS)atIf ``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``) :return: A generator of regular files and/or directories Nc3s$|]}tj|r|VqdS)N)r2r normcaserr&filenamerrr]sz&auto_complete_paths..r\r) r2r r%abspathaccessR_OKrblistdirrHisfileisdir)r-rS directory current_path file_listfr# comp_filerrcrr=s     r=)__doc__r@r2r8 itertoolsrtypingrrrrpip._internal.cli.main_parserrpip._internal.commandsrr pip._internal.metadatar rYr^r5rDr=rrrrs   n