U
    oufm                     @  sp   d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ ddgZG dd deZG d	d deZdS )
    )annotationsN)CallableIterable)CompleteEvent	Completer
Completion)DocumentPathCompleterExecutableCompleterc                   @  s<   e Zd ZdZddddddd	d
ddZddddddZdS )r	   a  
    Complete for Path variables.

    :param get_paths: Callable which returns a list of directories to look into
                      when the user enters a relative path.
    :param file_filter: Callable which takes a filename and returns whether
                        this file should show up in the completion. ``None``
                        when no filtering has to be done.
    :param min_input_len: Don't do autocompletion when the input string is shorter.
    FNr   boolzCallable[[], list[str]] | NonezCallable[[str], bool] | NoneintNone)only_directories	get_pathsfile_filtermin_input_len
expanduserreturnc                 C  s2   || _ |pdd | _|pdd | _|| _|| _d S )Nc                   S  s   dgS )N. r   r   r   H/tmp/pip-unpacked-wheel-8milen2s/prompt_toolkit/completion/filesystem.py<lambda>$       z(PathCompleter.__init__.<locals>.<lambda>c                 S  s   dS )NTr   )_r   r   r   r   %   r   )r   r   r   r   r   )selfr   r   r   r   r   r   r   r   __init__   s
    zPathCompleter.__init__r   r   zIterable[Completion])documentcomplete_eventr   c                 #  sD  |j  t | jk rd S z| jr.tj  tj }|rV fdd|  D }n|  }tj }g }|D ]8}tj	|rrt
|D ]}||r|||f qqrt|dd d}|D ]d\}}|t|d  }	tj||}
tj	|
r|d7 }n
| jrq| |
sqt|	d|dV  qW n tk
r>   Y nX d S )	Nc                   s"   g | ]}t jt j| qS r   )ospathdirnamejoin).0ptextr   r   
<listcomp><   s    z1PathCompleter.get_completions.<locals>.<listcomp>c                 S  s   | d S )N   r   )kr   r   r   r   O   r   z/PathCompleter.get_completions.<locals>.<lambda>)key/r   )r%   Zstart_positionZdisplay)Ztext_before_cursorlenr   r   r   r   r    r   basenameisdirlistdir
startswithappendsortedr!   r   r   r   OSError)r   r   r   r    directoriesprefix	filenames	directoryfilename
completionZ	full_namer   r$   r   get_completions)   sH    


zPathCompleter.get_completions)FNNr   F)__name__
__module____qualname____doc__r   r9   r   r   r   r   r	      s        c                      s&   e Zd ZdZdd fddZ  ZS )r
   z=
    Complete only executable files in the current path.
    r   )r   c                   s"   t  jdddd dd dd d S )NFr'   c                   S  s   t jddt jS )NPATH )r   environgetsplitpathsepr   r   r   r   r   s   r   z.ExecutableCompleter.__init__.<locals>.<lambda>c                 S  s   t | t jS )N)r   accessX_OK)namer   r   r   r   t   r   T)r   r   r   r   r   )superr   )r   	__class__r   r   r   o   s    zExecutableCompleter.__init__)r:   r;   r<   r=   r   __classcell__r   r   rH   r   r
   j   s   )
__future__r   r   typingr   r   Zprompt_toolkit.completionr   r   r   Zprompt_toolkit.documentr   __all__r	   r
   r   r   r   r   <module>   s   [