a
    lc 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   L/var/www/html/django/DPS/env/lib/python3.9/site-packages/jedi/api/helpers.py_start_match   s    r   c                 C   sL   t |dkr|| v S | |d }|dkrHt| |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 d 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 rJ||d d  }td|d |d  dS |jdvrXd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rH| }|d u r(dS q(|jdks\|jdkr||j d |d k rrdS t|nD|}|jjdv rq|j}q|r|j d |d krdS t| | |S d S )Nr!   newliner+   r   r   )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   s*    



rI   c                    s   G dd dt   fdd}tt|||}d|d  }tjdd}z|j||d	 W n  yz   |j Y S 0 td
t|| dS )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   s^    | }|D ]J}|jkr$  q|jr8  q|jrR|V    q|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:
%sN)		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   sz   |j dkr| ||S |j}t}|j dkr8||j}n>|j dkrNt||}n(t|tjrdt	||S |j dv rvt
| 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   sh   | D ]^}|  r\tt| |d}d}|rD|D ]}|jd u r0d}q0|rP|V  qb|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   s   t | j| jd S r>   _get_index_and_keyrj   rk   r@   r   r   r   index   s    zCallDetails.indexc                 C   s   t | j| jd S )Nr   rn   r@   r   r   r   keyword_name_str   s    zCallDetails.keyword_name_strc                 C   s   t t| j| jS r   )rY   _iter_argumentsrj   rk   r@   r   r   r   _list_arguments   s    zCallDetails._list_argumentsc                 C   sl  d}t  }d}|  }|s&|r"dS d S d}t|D ]L\}\}}}	||	|dkB O }|rVq2|d t|kr2|	rv|| q2|d7 }q2t|D ]\}}
|
 }|s|tjkr|  S |tjtj	fv r||kr|  S |d ur|dkr|dkr|
j
|vrT|tjks|tjkrT||krT|r"|  S |	r>|
j
|krT|  S n|
j
|rT|  S |tjkr|  S qd S )Nr   r8   F   r   )setrs   	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   rs   )rA   r}   r   r   r   r   r   iter_used_keyword_arguments  s    z'CallDetails.iter_used_keyword_argumentsc                 C   s4   d}|   d d D ]\}}}|r& q0|d7 }q|S )Nr   r8   r   )rs   )rA   countr}   r   r   r   r   r   count_positional_arguments  s    
z&CallDetails.count_positional_argumentsN)rB   rC   rD   rm   rE   rp   rq   r   rs   r   r   r   r   r   r   r   rh      s   


3rh   c                 #   s\   fdd} fdd| D }|d j dkrFt|d j E d H  d S d}d}t|D ]\}}|j d	krd
}|jd }|jd }	|	dkr|	j k rd|jd
fV  nd||dfV  nX|dv rt|j||	dfV  n8| }
|
j dkr
|
j kr
d||
dfV  ndV  d}qV|j dkr||jd d d D ]4}|j dkrPd}|jd }|||dfV  d}q2tt|jd }qVt	|t
jr|jdkr|s|ddfV  d}d}qVt	|t
jr|jdv rt|j}qV|dkrV|d rVd
}||d  }|j dkrd|jd
fV  ndV  d}qV|sX|d j dkrL|||d dfV  n|ddfV  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                    s   g | ]}|j  k r|qS r   r3   .0cr   r   r   
<listcomp>(      z#_iter_arguments.<locals>.<listcomp>r8   arglistFr   argumentTr   =)*z**r   )r   NFZtestlist_star_exprrt   Z	star_expr,r!   )r.   rr   rl   rv   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   rr   !  sb    



rr   c                    s    fdd| D }|d j dkr0t|d j S d}|d }|j dkrr|jd dkrr|jd j krr|jd	 j}n|dkr|d
 j}|d|fS )zG
    Returns the amount of commas and the keyword argument string.
    c                    s   g | ]}|j  k r|qS r   r   r   r   r   r   r   h  r   z&_get_index_and_key.<locals>.<listcomp>r8   r   Nr   r   r   r   r   )r.   ro   rl   r;   r2   r   )r   r5   r   Zkey_strlastr   r   r   ro   d  s    
ro   c                 C   s   t tt| jD ]l\}}|dkr|j|kr|dkr| j|d  }| }|d u rTq|jdksj|jjdv rt||| |  S qd S )N(r   r   )r]   r\   )	reversedrY   rv   rl   r;   rG   r.   rH   rh   )r   additional_childrenr5   rp   elementrl   r   r   r   r   &_get_signature_details_from_error_nodey  s    r   c                 C   sD  | j |dd}|j|kr,| }|d u r,d S |j}|d ur@|jdv rJd S g }t|jD ]P}|j|k rX|jdkrt|||}|d ur|  S |j|dd< qX|d| qX|jdkr|jd dks|jdkr8|jd	 dkr8||jd
 u r||j	ks8| }|d u rd S t
|jdkr&|jd n|jd	 |j|S |j}q2d S )NT)Zinclude_prefixes)ZfuncdefZclassdefZ	decorated
async_stmtZ
error_noder   r]   r   	decoratorrt   r8   )r-   r3   rG   rH   r.   r   rl   r   insertr;   rh   )moduler5   r6   r   r   r   resultr   r   r   get_signature_details  sJ    





r   Zcall_signatures_validityc                 c   s   |d d }|| d|d  }||j d | }d||g }td|tj}	|  }
|
du rnd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 r6t| jks@n td| j|d  }t|}|drj|d8 }n|dr||d8 }|d u r|n|}d|  kr|ksn td||||f  | ||g|R i |S )Nr   r   z)`line` parameter is not in a valid range.z
rt   
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  }|sF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     r   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)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   rr   ro   r   r   r   r   r   r   r   r   r   r   <module>   sH   	

(*
SC7

