o
    Zh&J                     @   sz  d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ edg dZdd Zdd Zd=ddZ dd Z!dd Z"dd Z#G dd  d e$Z%d!d" Z&d#d$ Z'd%d& Z(d=d'd(Z)G d)d* d*Z*d+d, Z+d-d. Z,d/d0 Z-d1d2 Z.ed3d4d5 Z/d6d7 Z0d>d9d:Z1d;d< Z2dS )?z
Helpers for the API
    N)
namedtuple)dedent)chainwraps)	Parameter)Parser)tree)	NO_VALUES)
infer_atom)infer_call_of_leaf)get_string_value_set)signature_time_cachememoize_method)get_parent_scopeCompletionParts)pathZhas_dotnamec                 C   s
   |  |S N)
startswith)string	like_name r   G/var/www/html/lang_env/lib/python3.10/site-packages/jedi/api/helpers.py_start_match   s   
r   c                 C   sL   t |dkr
|| v S | |d }|dkr$t| |d d  |dd  S dS )N   r   F)lenfind_fuzzy_match)r   r   posr   r   r   r      s   r   Fc                 C   s   |rt | |S t| |S r   )r   r   )r   r   Zfuzzyr   r   r   match&   s   

r    c                 C   s   t | dd dS )Nc                 S   s$   t | jpd| jp
d| jpd| jfS )N r   )strmodule_pathlinecolumnr   )xr   r   r   <lambda>/   s
    z$sorted_definitions.<locals>.<lambda>)key)sorted)Zdefsr   r   r   sorted_definitions-   s   r*   c                 C   st   |  |}|d u s|jdv r%||d d  }td|d |d  dS |jdvr,dS |jd |d |jd   S )N)r   
error_leafr   r   z(?!\d)\w+$|$)r   keywordr!   )get_leaf_for_positiontyperesearchgroupvalue	start_pos)Zmodule_nodelinespositionleafr$   r   r   r   get_on_completion_name5   s   

r7   c                 C   sR   | |d d |d  }|d d |d  |d< |d |d d  |d< d |S )Nr   r   r!   )join)
code_linesr3   end_posr4   r   r   r   	_get_codeC   s   
r<   c                   @   s   e Zd Zedd ZdS )OnErrorLeafc                 C   s
   | j d S Nr   )argsselfr   r   r   r+   N   s   
zOnErrorLeaf.error_leafN)__name__
__module____qualname__propertyr+   r   r   r   r   r=   M   s    r=   c                 C   s   |j |kr| }|d u rdS |jdk}|jdkr(| }|d u r#dS |jdks|jdks2|jdkrA|j d |d k r=dS t||}	 |jjdv rKn|j}qD|r\|j d |d kr\dS t| | |S )	Nr!   newliner+   r   r   T)Z
file_inputZsuiteZsimple_stmtr   )r3   get_previous_leafr.   r=   parentr<   Zget_start_pos_of_prefix)r:   r6   r5   Zis_after_newlineZ	user_stmtr   r   r   _get_code_for_stackS   s0   



rI   c                    s   G dd dt   fdd}tt|||}d|d  }tjdd}z
|j||d	 W n  y=   |j Y S w td
t|| )zU
    Returns the possible node names (e.g. import_from, xor_test or yield_stmt).
    c                   @   s   e Zd ZdS )z/get_stack_at_position.<locals>.EndMarkerReachedN)rB   rC   rD   r   r   r   r   EndMarkerReached   s    rJ   c                 3   sZ     | }|D ]"}|jkr  |jr  |jr'|V    |V  qd S r   )	_tokenizer   prefixendswith)codetokenstokenrJ   grammarZsafewordr   r   tokenize_without_endmarker   s   

z9get_stack_at_position.<locals>.tokenize_without_endmarkerZ)ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDI T)Zerror_recovery)rO   z7This really shouldn't happen. There's a bug in Jedi:
%s)		Exceptionr   rI   r   Z_pgen_grammarparsestackSystemErrorlist)rR   r:   r6   r   rS   rN   pr   rQ   r   get_stack_at_position{   s    

r[   c                 C   s~   |j dkr| ||S |j}t}|j dkr||j}|S |j dkr)t||}|S t|tjr4t	||S |j dv r=t
| S |S )Nr   atomtrailer)Zfstring_stringZfstring_startZfstring_end)r.   inferrH   r
   Z
infer_noder   
isinstancer	   Literalr   r   )inference_statecontextr6   rH   definitionsr   r   r   r^      s   

	



r^   c                 c   sj    | D ]/}|  r/tt| |d}d}|r#|D ]	}|jd u r"d}q|r)|V  q|E d H  q|V  qd S )N)follow_builtin_importsFT)Z	is_importrY   filter_follow_importsZgotor3   )namesrd   r   Z	new_namesZfound_builtinnew_namer   r   r   re      s$   
re   c                   @   sP   e Zd Zdd Zedd Zedd Zedd Zd	d
 Z	dd Z
dd ZdS )CallDetailsc                 C   s   || _ || _|| _d S r   )bracket_leaf	_children	_position)rA   ri   childrenr5   r   r   r   __init__   s   
zCallDetails.__init__c                 C      t | j| jd S r>   _get_index_and_keyrj   rk   r@   r   r   r   index      zCallDetails.indexc                 C   rn   )Nr   ro   r@   r   r   r   keyword_name_str   rr   zCallDetails.keyword_name_strc                 C   s   t t| j| jS r   )rY   _iter_argumentsrj   rk   r@   r   r   r   _list_arguments   rr   zCallDetails._list_argumentsc                 C   s\  d}t  }d}|  }|s|rdS d S d}t|D ]&\}\}}}	||	|dkB O }|r+q|d t|kr?|	r;|| q|d7 }qt|D ]g\}}
|
 }|sg|tjkrW|  S |tjtj	fv rg||krg|  S |d uro|dkrs|dkr|
j
|vr|tjks|tjkr||kr|r|  S |	r|
j
|kr|  S n
|
j
|r|  S |tjkr|  S qDd S )Nr   r8   F   r   )setru   	enumerater   addZget_kindr   VAR_POSITIONALPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYZstring_nameKEYWORD_ONLYr   VAR_KEYWORD)rA   Zparam_namesZpositional_countZ
used_names
star_countr?   Zis_kwargi	key_start	had_equal
param_namekindr   r   r   calculate_index   sV   





zCallDetails.calculate_indexc                 c   s,    t |  D ]\}}}|r|r|V  qd S r   )rY   ru   )rA   r   r   r   r   r   r   iter_used_keyword_arguments  s   z'CallDetails.iter_used_keyword_argumentsc                 C   s:   d}|   d d D ]\}}}|s|r |S |d7 }q
|S )Nr   r8   r   )ru   )rA   countr   r   r   r   r   r   count_positional_arguments  s   
z&CallDetails.count_positional_argumentsN)rB   rC   rD   rm   rE   rq   rs   r   ru   r   r   r   r   r   r   r   rh      s    


3rh   c                 #   sZ    fdd} fdd| D }|d j dkr$t|d j E d H  d S d}d}t|D ]\}}|j d	krd
}|jd }|jd }	|	dkr`|	j k rW|j dkrWd|jd
fV  n3d||dfV  n*|dv rpt|j||	dfV  n| }
|
j dkr|
j krd||
dfV  ndV  d}q,|j dkr|jd d d D ]}|j dkrd}|jd }|||dfV  d}qtt|jd }q,t	|t
jr|jdkr|s|ddfV  d}d}q,t	|t
jr|jdv rt|j}q,|dkr|d rd
}||d  }|j dkrd|jd
fV  ndV  d}q,|s+|d j dkr#|||d dfV  d S |ddfV  d S d S )Nc                    s*   | j dkrd S | jd  d | jd   S )Nr   r   )r.   r2   r3   )r   r5   r   r   remove_after_pos"  s   
z)_iter_arguments.<locals>.remove_after_posc                       g | ]	}|j  k r|qS r   r3   .0cr   r   r   
<listcomp>(      z#_iter_arguments.<locals>.<listcomp>r8   arglistFr   argumentTr   =r   )*z**)r   NFZtestlist_star_exprrv   Z	star_expr,r!   )r.   rt   rl   rx   r3   r2   r   Zget_first_leafboolr_   r	   Z
PythonLeaf)nodesr5   r   nodes_beforeZprevious_node_yieldedZ
stars_seenr   nodefirstsecondZ
first_leafnbeforer   r   r   rt   !  sh   





rt   c                    s    fdd| D }|d j dkrt|d j S d}|d }|j dkr9|jd dkr9|jd j kr9|jd	 j}n	|dkrB|d
 j}|d|fS )zG
    Returns the amount of commas and the keyword argument string.
    c                    r   r   r   r   r   r   r   r   h  r   z&_get_index_and_key.<locals>.<listcomp>r8   r   Nr   r   r   r   r   )r.   rp   rl   r;   r2   r   )r   r5   r   Zkey_strlastr   r   r   rp   d  s   
rp   c                 C   s   t tt| jD ]6\}}|dkr?|j|kr?|dkr?| j|d  }| }|d u r*q	|jdks5|jjdv r?t||| |  S q	d S )N(r   r   )r]   r\   )	reversedrY   rx   rl   r;   rG   r.   rH   rh   )r   additional_childrenr5   rq   elementrl   r   r   r   r   &_get_signature_details_from_error_nodey  s   r   c                 C   s>  | j |dd}|j|kr| }|d u rd S |j}|d ur|jdv r$d S g }t|jD ](}|j|k rS|jdkrMt|||}|d urE|  S |j|dd< q+|d| q+|jdkr`|jd dksl|jdkr|jd	 dkr||jd
 u rx||j	ks| }|d u rd S t
|jdkr|jd n|jd	 |j|S |j}|d usd S )NT)Zinclude_prefixes)ZfuncdefZclassdefZ	decorated
async_stmtZ
error_noder   r]   r   	decoratorrv   r8   )r-   r3   rG   rH   r.   r   rl   r   insertr;   rh   )moduler5   r6   r   r   r   resultr   r   r   get_signature_details  sH   



'r   Zcall_signatures_validityc                 c   s    |d d }|| d|d  }||j d | }d||g }td|tj}	|  }
|
du r8dV  n|
|	|j fV  t| || V  dS )z'This function calculates the cache key.r   r   Nr!   z.*\()	r3   r9   r/   r    DOTALLZget_root_contextZ
py__file__r^   rG   )ra   rb   ri   r:   Zuser_pos
line_indexZbefore_cursorZother_linesZwholeZbefore_bracketr#   r   r   r   cache_signatures  s   
r   c                    s   t  d fdd	}|S )Nc                    s   |d u rt t| jdn|}d|  k rt| jks#td td| j|d  }t|}|dr8|d8 }n	|drA|d8 }|d u rG|n|}d|  krS|ks^n td||||f  | ||g|R i |S )Nr   r   z)`line` parameter is not in a valid range.z
rv   
zH`column` parameter (%d) is not in a valid range (0-%d) for line %d (%r).)maxr   Z_code_lines
ValueErrorrM   )rA   r$   r%   r?   kwargsline_stringline_lenfuncr   r   wrapper  s$   


z%validate_line_column.<locals>.wrapper)NNr   )r   r   r   r   r   validate_line_column  s   r   Tc                    sP    fdd}t t  }|s#fddfdd|D }t||S )zZ
    Returns a dictionary with name parts as keys and their call paths as
    values.
    c                    s   |   } r|po| S r   )Zis_definition)r   Zis_def)rc   
referencesr   r   def_ref_filter  s   z(get_module_names.<locals>.def_ref_filterc                    s(   t | }|r|jdkr|j}| d fv S )Nr   )r   r.   rH   )r   Zparent_scope)r   r   r   is_module_scope_name  s   z.get_module_names.<locals>.is_module_scope_namec                    s   g | ]} |r|qS r   r   )r   r   )r   r   r   r     s    z$get_module_names.<locals>.<listcomp>)rY   r   from_iterableZget_used_namesvaluesfilter)r   Z
all_scopesrc   r   r   rf   r   )rc   r   r   r   r   get_module_names  s   
r   c                 C   s*   |  d\}}}|dkrd}||dfS )NrT   deffunction.)
rpartitionsplit)r   r.   _Zdotted_namesr   r   r   split_search_string  s   r   )F)TF)3__doc__r/   collectionsr   textwrapr   	itertoolsr   	functoolsr   inspectr   Zparso.python.parserr   Zparso.pythonr	   Zjedi.inference.base_valuer
   Zjedi.inference.syntax_treer   Zjedi.inference.helpersr   Zjedi.inference.compiledr   Z
jedi.cacher   r   Zjedi.parser_utilsr   r   r   r   r    r*   r7   r<   rU   r=   rI   r[   r^   re   rh   rt   rp   r   r   r   r   r   r   r   r   r   r   <module>   sJ    
	
(*
SC7

