
    f&J                     x   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 Zd Zd)dZ d Z!d Z"d Z# G d de$      Z%d Z&d Z'd Z(d)dZ) G d d      Z*d  Z+d! Z,d" Z-d# Z. ed$      d%        Z/d& Z0d*d'Z1d( Z2y)+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)pathhas_dotnamec                 $    | j                  |      S N)
startswith)string	like_names     K/var/www/cvtools/html/venv/lib/python3.12/site-packages/jedi/api/helpers.py_start_matchr      s    Y''    c                     t        |      dk  r|| v S | j                  |d         }|dk\  rt        | |dz   d  |dd        S y)N   r   F)lenfind_fuzzy_match)r   r   poss      r   r"   r"      sS    
9~F""
++il
#C
axF378,im<<r   c                 6    |rt        | |      S t        | |      S r   )r"   r   )r   r   fuzzys      r   matchr&   &   s    FI..FI..r   c                     t        | d       S )Nc                     t        | j                  xs d      | j                  xs d| j                  xs d| j                  fS )N r   )strmodule_pathlinecolumnr   )xs    r   <lambda>z$sorted_definitions.<locals>.<lambda>/   s6    s1==+>B'?'(vv{'(xx}1'(vv'/ r   )key)sorted)defss    r   sorted_definitionsr3   -   s    $ / 0 0r   c                    | j                  |      }||j                  dv r6||d   dz
     }t        j                  d|d |d          j	                  d      S |j                  dvry|j
                  d |d   |j                  d   z
   S )N)r   
error_leafr   r   z(?!\d)\w+$|$)r   keywordr)   )get_leaf_for_positiontyperesearchgroupvalue	start_pos)module_nodelinespositionleafr,   s        r   get_on_completion_namerB   5   s    ,,X6D|tyy$<< Xa[1_%yy$|*<=CCAFF	-	-::6x{T^^A%6677r   c                 x    | |d   dz
  |d    }|d   d |d    |d<   |d   |d   d  |d<   dj                  |      S )Nr   r   r)   )join)
code_linesr=   end_posr?   s       r   	_get_coderH   C   sY    y|a'
3Eb	+71:&E"IQx	!&E!H775>r   c                       e Zd Zed        Zy)OnErrorLeafc                      | j                   d   S Nr   )argsselfs    r   r5   zOnErrorLeaf.error_leafN   s    yy|r   N)__name__
__module____qualname__propertyr5    r   r   rJ   rJ   M   s     r   rJ   c                    |j                   |k\  r|j                         }|y|j                  dk(  }|j                  dk(  r#|j                         }|y|j                  dk(  r#|j                  dk(  s|j                  dk(  r!|j                   d   |d   k  ryt        |      |}	 |j                  j                  dv rn|j                  }&|r|j                   d   |d   kD  ryt        | |j                         |      S )Nr)   newliner5   r   r   )
file_inputsuitesimple_stmtr   )r=   get_previous_leafr8   rJ   parentrH   get_start_pos_of_prefix)rF   rA   r@   is_after_newline	user_stmts        r   _get_code_for_stackr_   S   s    ~~!%%'<yyI-
))y
 %%'< ))y
 
 yyL DII$9>>!x{* $	$$(NN!((I 
 ""1%3  Y%F%F%H(SSr   c                 <     G d dt                fd}t        t        |||            }d|dz   z   }t         j                  d      }	 |j                   ||             t        d	t         ||            z        # $ r |j                  cY S w xY w)
zU
    Returns the possible node names (e.g. import_from, xor_test or yield_stmt).
    c                       e Zd Zy)/get_stack_at_position.<locals>.EndMarkerReachedN)rP   rQ   rR   rT   r   r   EndMarkerReachedrb      s    r   rc   c              3     K   j                  |       }|D ]d  }|j                  k(  r        |j                  j                        r        |j                  j                        r|         | f y wr   )	_tokenizer   prefixendswith)codetokenstokenrc   grammarsafewords      r   tokenize_without_endmarkerz9get_stack_at_position.<locals>.tokenize_without_endmarker   s}      ""4( 
	E||x'&((&&x0&((&&x0&((
	s   A<A?)ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDI T)error_recovery)ri   z7This really shouldn't happen. There's a bug in Jedi:
%s)		Exceptionr   r_   r	   _pgen_grammarparsestackSystemErrorlist)	rk   rF   rA   r#   rm   rh   prc   rl   s	   `      @@r   get_stack_at_positionrx   {   s    9 " %j$<=D ;H#: Dw$$T:A	1$78 B
)$/
0	1   wws   B BBc                 |   |j                   dk(  r| j                  ||      S |j                  }t        }|j                   dk(  r|j	                  |j                        }|S |j                   dk(  rt        ||      }|S t        |t        j                        rt        ||      S |j                   dv rt        |       S |S )Nr   atomtrailer)fstring_stringfstring_startfstring_end)r8   inferr[   r   
infer_noder   
isinstancer
   Literalr   r   )inference_statecontextrA   r[   definitionss        r   r   r      s    yyF$$Wd33[[FK{{f((5  
		!($7  
D$,,	''4((	H	H#O44r   c              #      K   | D ]f  }|j                         rPt        t        |j                         |            }d}|r|D ]  }|j                  d} |r| X|E d {    c| h y 7 w)N)follow_builtin_importsFT)	is_importrv   filter_follow_importsgotor=   )namesr   r   	new_namesfound_builtinnew_names         r   r   r      s      >>2		'= I "M% ) -H))1(,- 
$$$J# %s   AA1A1"A/#A1c                   T    e Zd Zd Zed        Zed        Zed        Zd Z	d Z
d Zy)	CallDetailsc                 .    || _         || _        || _        y r   )bracket_leaf	_children	_position)rO   r   childrenr@   s       r   __init__zCallDetails.__init__   s    (!!r   c                 H    t        | j                  | j                        d   S rL   _get_index_and_keyr   r   rN   s    r   indexzCallDetails.index       !$..$..A!DDr   c                 H    t        | j                  | j                        d   S )Nr   r   rN   s    r   keyword_name_strzCallDetails.keyword_name_str   r   r   c                 T    t        t        | j                  | j                              S r   )rv   _iter_argumentsr   r   rN   s    r   _list_argumentszCallDetails._list_arguments   s    ODNNDNNCDDr   c                    d}t               }d}| j                         }|s|ryy d}t        |      D ]B  \  }\  }}}	||	|dk(  z  z  }|r|dz   t        |      k7  s*|	r|j	                  |       >|dz  }D t        |      D ]  \  }}
|
j                         }|sB|t        j                  k(  r|c S |t        j                  t        j                  fv r	||k(  r|c S |dk(  r|dk(  sg|
j                  |vre|t        j                  k(  s|t        j                  k(  r?||k  r:|r|c S 	r|
j                  |k(  r#|c S |
j                  j                  |      r|c S |t        j                  k(  s|c S  y )Nr   rD   F   r   )setr   	enumerater    addget_kindr   VAR_POSITIONALPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYstring_nameKEYWORD_ONLYr   VAR_KEYWORD)rO   param_namespositional_count
used_names
star_countrM   is_kwargi	key_start	had_equal
param_namekinds               r   calculate_indexzCallDetails.calculate_index   s   U

##%5>t_ 		.1A1
Iy	Z1_55Hq5CI% "y1(A-(		. '{3 	MAz&&(D9333HI;;Y=V=VWW,, $Z1_
a));!Y%;%;; $	(G(G G!1Q!6!  %11Y>#$H%11<<YG#$H9000H3	4 r   c              #   d   K   t        | j                               D ]  \  }}}|s
|s|  y wr   )rv   r   )rO   r   r   r   s       r   iter_used_keyword_argumentsz'CallDetails.iter_used_keyword_arguments  s4     04T5I5I5K0L 	 ,J	9Y	 s   #000c                 Z    d}| j                         d d D ]  \  }}}|s|r |S |dz  } |S )Nr   rD   r   )r   )rO   countr   r   r   s        r   count_positional_argumentsz&CallDetails.count_positional_arguments  sL    040D0D0Fs0K 	,J	9Y QJE	 r   N)rP   rQ   rR   r   rS   r   r   r   r   r   r   r   rT   r   r   r   r      sY    "
 E E E E E E1f 
r   r   c              #   j  K   fd}| D cg c]  }|j                   k  s| }}|d   j                  dk(  r"t        |d   j                        E d {    y d}d}t	        |      D ]  \  }}|j                  dk(  rd}|j                  d   }	|j                  d   }
|
d	k(  r>|
j                   k  r!|	j                  d
k(  rd|	j
                  df nsd ||	      df ne|	dv r!t        |	j
                         ||
      df n@|j                         }|j                  d
k(  r|j                   k\  rd ||      df nd d}|j                  dk(  ri|j                  d d d   D ]1  }|j                  dk(  rd}|j                  d   }| ||      df d}3 t        t        |j                        dz        }Yt        |t        j                        r|j
                  dk(  r|s	|ddf d}d}t        |t        j                        r%|j
                  dv rt        |j
                        }|d	k(  s|d   sd}||dz
     }|j                  d
k(  rd|j
                  df nd d} |s+|d   j                  d
k(  r| ||d         df y |ddf y y c c}w 7 Zw)Nc                 h    | j                   dk7  ry | j                  d d   | j                  d   z
   S )Nr   r   )r8   r<   r=   )r   r@   s    r   remove_after_posz)_iter_arguments.<locals>.remove_after_pos"  s6    99zz:8A;)::;;r   rD   arglistFr   argumentTr   =r   )*z**)r   NFtestlist_star_exprr   	star_expr,r)   )r=   r8   r   r   r   r<   r    get_first_leafboolr   r
   
PythonLeaf)nodesr@   r   cnodes_beforeprevious_node_yielded
stars_seenr   nodefirstsecond
first_leafnbefores    `            r   r   r   !  s    <  %?!h(>A?L?B	)"<#3#<#<hGGG!J\* ,499
"$(!MM!$E]]1%F}##h.5::3GU[[$..-e4e;;+%%++&(8(@%GG "002
??f,1E1E1Q-j95@@((JYY..]]3Q3' 66[(!"J

1A "21"5u<<
 %)T]]);a)?$@!doo.4::3D( "e++
$)!doo.4::3LTZZJS[\"-$(!!!a%(F{{f$t++$$JY,\ !  F*.|B/?@%GGb%''	 !k @Gs.   
J3J+J+0J3J0G)J3J3	A(J3c                    | D cg c]  }|j                   |k  s| }}|d   j                  dk(  rt        |d   j                  |      S d}|d   }|j                  dk(  rH|j                  d   dk(  r6|j                  d   j                  |k  r|j                  d   j
                  }n|dk(  r|d   j
                  }|j                  d	      |fS c c}w )
zG
    Returns the amount of commas and the keyword argument string.
    rD   r   Nr   r   r   r   r   )r=   r8   r   r   rG   r<   r   )r   r@   r   r   key_strlasts         r   r   r   d  s      %?!h(>A?L?B	)!,r"2";";XFFGDyyJ4==#3s#:a ((H4--"((	r"((c"G++ @s
   CCc                 P   t        t        t        | j                                    D ]|  \  }}|dk(  s|j                  |k  s|dkD  s"| j                  |d  }|j                         }|D|j                  dk(  s|j                  j                  dv slt        |||z   |      c S  y )N(r   r   )r{   rz   )	reversedrv   r   r   rG   rZ   r8   r[   r   )r   additional_childrenr@   r   elementr   r   s          r   &_get_signature_details_from_error_noder   y  s    "4	$--(@#AB 
Vwc>goo9eai }}UV,H,,.D|yyF"dkk&6&6:M&M"7H7J,JHUU
Vr   c                    | j                  |d      }|j                  |k\  r|j                         }|y |j                  }|F|j                  dv ry g }t        |j                        D ]V  }|j                  |k  s|j                  dk(  r#t        |||      }||c S |j                  |dd E|j                  d|       X |j                  dk(  r|j                  d   dk(  s!|j                  dk(  r|j                  d	   dk(  ru||j                  d
   u r||j                  k\  sU|j                         }|y t        |j                  dk(  r|j                  d   n|j                  d	   |j                  |      S |j                  }|Fy )NT)include_prefixes)funcdefclassdef	decorated
async_stmt
error_noder   r{   r   	decoratorr   rD   )r7   r=   rZ   r[   r8   r   r   r   insertrG   r   )moduler@   rA   r   r   r   results          r   get_signature_detailsr     s   ''4'HD ~~!%%'< ;;D

99JJ  $--( 	1A{{X%66\)C.F )%/0zz'!,#**1a0	1 99	!dmmA&6#&=99+a0@C0G
 DMM"--(dll2J--/<"(,		Y(>DMM!$DMMRSDTMM  {{K 
N r   call_signatures_validityc              #   p  K   |d   dz
  }||   d|d    }||j                   d   | }dj                  ||gz         }t        j                  d|t        j                        }	|j                         j                         }
|
d n|
|	|j                   f t        | ||j                                yw)z'This function calculates the cache key.r   r   Nr)   z.*\()	r=   rE   r9   r&   DOTALLget_root_context
py__file__r   rZ   )r   r   r   rF   user_pos
line_indexbefore_cursorother_lineswholebefore_bracketr+   s              r   cache_signaturesr     s      !qJz*<HQK8M\33A6zBKGGK=/12EXXgubii8N**,779K
NL,B,BCC
&&( s   B4B6c                 0     t               d fd	       }|S )Nc                    |t        t        | j                        d      n|}d|cxk  r"t        | j                        k  st        d       t        d      | j                  |dz
     }t        |      }|j	                  d      r|dz  }n|j	                  d      r|dz  }||n|}d|cxk  r|k  sn t        d||||fz         | ||g|i |S )Nr   r   z)`line` parameter is not in a valid range.z
r   
zH`column` parameter (%d) is not in a valid range (0-%d) for line %d (%r).)maxr    _code_lines
ValueErrorrg   )rO   r,   r-   rM   kwargsline_stringline_lenfuncs          r   wrapperz%validate_line_column.<locals>.wrapper  s    04s3t''(!,$D1C 0 011HII 2HII&&tax0{#'MH!!$'MH#^V'x' 8!'4;FF G G D$8888r   )NNr   )r   r  s   ` r   validate_line_columnr    s     
4[9 9$ Nr   c                      fd}t        t        j                   j                         j	                                     }|s fd}|D cg c]  } ||      s| }}t        ||      S c c}w )zZ
    Returns a dictionary with name parts as keys and their call paths as
    values.
    c                 B    | j                         }xr |xs xr | S r   )is_definition)r   is_defr   
referencess     r   def_ref_filterz(get_module_names.<locals>.def_ref_filter  s(    ##%%vB)BF
Br   c                 `    t        |       }|r|j                  dk(  r|j                  }|d fv S )Nr   )r   r8   r[   )r   parent_scoper   s     r   is_module_scope_namez.get_module_names.<locals>.is_module_scope_name  s7    +D1L 1 1\ A+22FD>11r   )rv   r   from_iterableget_used_namesvaluesfilter)r   
all_scopesr   r  r  r   r  r   s   ` ``    r   get_module_namesr    si    
C $$V%:%:%<%C%C%EFGE	2 "=q%9!%<==.%(( >s   A/A/c                 `    | j                  d      \  }}}|dk(  rd}||j                  d      fS )Nro   deffunction.)
rpartitionsplit)r   r8   _dotted_namess       r   split_search_stringr    s9     OOC0D!\u}##C(((r   )F)TF)3__doc__r9   collectionsr   textwrapr   	itertoolsr   	functoolsr   inspectr   parso.python.parserr	   parso.pythonr
   jedi.inference.base_valuer   jedi.inference.syntax_treer   jedi.inference.helpersr   jedi.inference.compiledr   
jedi.cacher   r   jedi.parser_utilsr   r   r   r"   r&   r3   rB   rH   rq   rJ   r_   rx   r   r   r   r   r   r   r   r   r  r  r  rT   r   r   <module>r)     s    
 "     &  / 1 5 8 ; . .0KL(/08) %TP'T(*P Pf@(F,*V4n 01 2*.)6)r   