o
    Zh                     @   sr   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 G dd deZ
dd	 Zd
d ZdddZdd ZdS )    N)classes)
StringNameget_quote_ending)match)get_str_or_nonec                   @   s   e Zd ZdZdS )PathNamepathN)__name__
__module____qualname__Zapi_type r   r   I/var/www/html/lang_env/lib/python3.10/site-packages/jedi/api/file_name.pyr   	   s    r   c
              	   c   sj   t tj|}
t||}|drtj|}|d u rd S || }tj|}tj|}|| }|o=tdd |D }|rTt	|||d j
}|d u rPd}n|| }tj| jj|}ztt|dd d}W n ttfyv   Y d S w t|||}|D ]3}|j}t|||	d	r|s| s||7 }n|tjj7 }tj| t| |t ||
 d  d |
|	d
V  qd S )N~c                 s   s    | ]}|j d kV  qdS )zos.path.joinN)Z	full_name).0sr   r   r   	<genexpr>   s    z%complete_file_name.<locals>.<genexpr>r   Fc                 S   s   | j S )N)name)er   r   r   <lambda>(   s    z$complete_file_name.<locals>.<lambda>)key)fuzzy)stacklike_name_lengthZis_fuzzy)lenosr   basename_get_string_additions
startswith
expanduserdirnameall_add_os_path_joinbracket_startjoinprojectsortedscandirFileNotFoundErrorOSErrorr   r   r   is_dirsepr   Z
Completionr   )Zinference_statemodule_context
start_leafquotestringZ	like_nameZsignatures_callbackZ
code_linespositionr   r   additionZmust_start_withZsigsZis_in_os_path_joinZto_be_added	base_pathZlistedZquote_endingentryr   r   r   r   complete_file_name   sN   


r3   c                    s>    fdd}|    dkrdS | |}t|tt| S )Nc                  3   sR     j } d}t| jd | j  D ]}|rd}|V  q|dkr$ d S d}qd S )NTF+)parentreversedchildrenindex)nodeZwas_addition
child_noder0   r   r   iterate_nodes?   s   z,_get_string_additions.<locals>.iterate_nodesr4    )Zget_previous_leafcreate_context_add_stringsr6   list)r+   r,   r<   contextr   r;   r   r   >   s   
r   Fc           	      C   sn   d}d}|D ].}|  |}t|dkr d S |\}t|}|d u r$ d S |s.|r.|tjj7 }||7 }d}q|S )Nr=   T   F)Z
infer_noder   r   r   r   r*   )	rA   nodes	add_slashr.   firstr:   valuescr   r   r   r   r?   S   s   
r?   c                    s   fdd}|j dkrT|j}|j|}|dkrR|j|d  }|j dkrRt|jdkrRd}|jd	 j d
krA|jd	 j}|d8 }ng }||j|d  |d d d S d S |}|jd uro|jj dvro|j}|jd uro|jj dvsa| |urwd S |j}	|	d u rd S |	j|}|	jd | }|	j d
kr|	j}
|
j dkr|
j|	}|dksJ |
j|d  dksJ ||
j|d  |d d d S |
j dkr||
jd |d d d S d S |	j dkr||	jd g S |	j dkr||d	 g S d S )Nc                    s6   | j  krd S |sdS |d }t||ddpdS )Nr=   r   T)rD   )	start_posr>   r?   )Zmaybe_bracketrC   rA   r"   r+   r   r   checkf   s   
z _add_os_path_join.<locals>.checkZ
error_leafr   rB   
error_node   arglist)rO   trailerrK   (rP   )typer5   r7   r8   r   Zget_first_leaf)r+   r,   r"   rJ   Z
value_noder8   rK   Zarglist_nodesZsearched_node_childZsearched_noderP   Ztrailer_indexr   rI   r   r!   e   sT   
	







r!   )F)r   Zjedi.apir   Zjedi.api.stringsr   r   Zjedi.api.helpersr   Zjedi.inference.helpersr   r   r3   r   r?   r!   r   r   r   r   <module>   s    1
