a
    4Da                     @   s   d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ ddd	d
Ze	e eee e
e dddZeeee dddZdS )zBLogic that powers autocompletion installed by ``pip completion``.
    N)chain)AnyIterableListOptional)create_main_parser)commands_dictcreate_command)get_default_environment)returnc                     s  dt jvrdS t jd  dd tt jd } z| d   W n tyX   d Y n0 t }tt}g }d}D ]}||v rt|} qqt|dur|dkrt	d  
d o|d	v }|rt }  fd
d|jddD }|r|D ]}	t|	 qt	d t|}
|
jjD ]8}|jtjkr|j|j D ]}|||jf q:qdd d| d  D fdd|D } fdd|D }t| |
jj}|rt |}dd |D }|D ]>}|d }|d r|d dd dkr|d7 }t| qndd |jD }||j t|} 
drf|D ]$}|jtjkr>||j|j 7 }q>n t| |}|rtt |}td fdd|D  t	d dS )z:Entry Point for completion of main and subcommand options.PIP_AUTO_COMPLETEN
COMP_WORDS   
COMP_CWORD help-)show	uninstallc                    s0   g | ](}|j r|j  d d vr|j qS )r   N)canonical_name
startswith).0dist)cwordslc p/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py
<listcomp>2   s   z autocomplete.<locals>.<listcomp>T)
local_onlyc                 S   s   g | ]}| d d qS )=r   )splitr   xr   r   r   r   F       c                    s    g | ]\}}| vr||fqS r   r   )r   r"   v)	prev_optsr   r   r   G   r#   c                    s"   g | ]\}}|  r||fqS r   r   )r   kr$   currentr   r   r   I   r#   c                 S   s   g | ]}|d fqS )r   r   )r   pathr   r   r   r   T   r#   r      z--r   c                 S   s   g | ]
}|j qS r   )option_list)r   ir   r   r   r   ^   r#    c                    s   g | ]}|  r|qS r   r&   r!   r(   r   r   r   k   r#   ) osenvironr    int
IndexErrorr   listr   sysexitr   r
   lowerZiter_installed_distributionsprintr	   parseroption_list_allr   optparseSUPPRESS_HELP
_long_opts_short_optsappendnargsget_path_completion_typeauto_complete_pathsoption_groupsr,   r   from_iterablejoin)cwordr8   subcommandsoptionssubcommand_namewordshould_list_installedenv	installedr   
subcommandoptopt_strcompletion_typepathsoption	opt_labeloptsflattened_optsr   )r)   r   r   r%   r   autocomplete   s~    







 
rV   )r   rE   rT   r   c                 C   s   |dk s| |d   dsdS |D ]n}|jtjkr4q"t|dD ]L}| |d  dd |krB|jrtdd |jdD rB|j    S qBq"dS )	aL  Get 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+   r   N/r   r   c                 s   s   | ]}|d v V  qdS ))r*   filedirNr   r!   r   r   r   	<genexpr>   s   z+get_path_completion_type.<locals>.<genexpr>)r   r   r:   r;   strr    metavarany)r   rE   rT   rN   or   r   r   r@   o   s    

r@   )r)   rP   r   c                 #   s   t j| \} t j|}t |t js.dS t j   fddt |D }|D ]`}t j||}t jt j||}|dkrt j	|r|V  qVt j
|rVt j|dV  qVdS )ao  If ``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
    Nc                 3   s$   | ]}t j| r|V  qd S )N)r/   r*   normcaser   r!   filenamer   r   rZ      s   z&auto_complete_paths.<locals>.<genexpr>rY   r   )r/   r*   r    abspathaccessR_OKr_   listdirrD   isfileisdir)r)   rP   	directorycurrent_path	file_listfrN   	comp_filer   r`   r   rA      s    	
rA   )__doc__r:   r/   r4   	itertoolsr   typingr   r   r   r   pip._internal.cli.main_parserr   pip._internal.commandsr   r	   Zpip._internal.metadatar
   rV   r[   r1   r@   rA   r   r   r   r   <module>   s   a