TL inddlZddlmZddlmZddlmZddlmZddl m Z m Z ddl m Z ddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZmZddl m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+ddl,m-Z-ddl.m/Z/Gdde'Z0dZ1dZ2dZ3dZ4dZ5d Z6e/jnd!Z8Gd"d#Z9d$Z:ejvd%Zd(Z? d+d)Z@d*ZAy),N)dedent) Parameter)PythonTokenTypes)tree)search_ancestorLeaf) split_lines)debug)settings)classes)helpers)keywords) complete_dict)complete_file_name)imports)ValueSet)infer_call_of_leafparse_dotted_names)get_global_filters) TreeInstance)DocstringModule)ParamNameWrapper SubModuleName)convert_values convert_namescut_value_at_position)plugin_managerceZdZdZy)ParamNameWithEqualsc |jdzS)N=) string_name)selfs Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/jedi/api/completion.pyget_public_namez#ParamNameWithEquals.get_public_names#%%N)__name__ __module__ __qualname__r&r'r%r r s&r'r c#0K|D]}t|jD]s\}}|j}||kr|tjk(r+|tjtj fvsN|j |vs]t|juywN) enumerateparamskindrPOSITIONAL_OR_KEYWORD KEYWORD_ONLYnamer _name) signaturespositional_count used_kwargscall_sigipr0s r%_get_signature_param_namesr;"s3hoo. 3DAq66D## 0O0O(O 779O9OPPk1)!''22  33sA(B+B:Bc|ryd}|D]q}t|jD]R\}}|j}|tjury||k\s-|tj tj fvsPd}n|rp|S|S)NTF)r.r/r0rVAR_POSITIONALr1POSITIONAL_ONLY)r5r6r7 must_be_kwarg signaturer9r:r0s r%_must_be_kwargrA.sM  i../ DAq66Dy///$$)2Q2Q2;2K2K2M*M %      r'c #Kt}tjr|j}|D]}|j} | |vr| |k7rtjr| j} t j | ||sRtj|||t|||} | j| jf} | |vs|j| |j} | "| j} | | jdk(r| yw)Nfuzzy)is_fuzzy cached_namedel_stmt)setr case_insensitive_completionlowerr#r matchr Completionlenr3completeadd tree_nameget_definitiontype)inference_statecompletion_namesstack like_namerDimported_namesrFcomp_dctr3stringnewkrP definitions r% filter_namesr]DsuH++OO%  !! ^ #)(;   / /\\^F ==% 8$$I' C3<<(A  Q NN (!*!9!9!;J!-*//Z2O  /sA>D AD AD c|Dchc]}|j}}|Dcgc]}|j|vs|c}Scc}wcc}wr-)r3) completionsother_completionsdnamescs r%_remove_duplicatesrdcs=. /QVV /E /" :!affE&9A :: 0 :s 9>>c^|jj|d}|j|S)zK Returns the scope in which the user resides. This includes flows. Tinclude_prefixes) tree_nodeget_leaf_for_positioncreate_context)module_contextpositionleafs r%get_user_contextrnhs1  # # 9 9(UY 9 ZD  ( ( ..r'c|j|d}t|tjtjfs7|j }t|tjtjfs7|S)NTrf)ri isinstancerScopeFlowparent) module_noderlnodes r%get_flow_scope_nodervpsW  , ,X , MD DII67{{ DII67 Kr'cgSr-r+)context function_namedecorator_nodess r%complete_param_namesr{xs  Ir'cbeZdZ ddZdZdZdZdZdZdZ dZ d Z dd Z dd Z d Zd Zy)rLc||_||_|j|_||_t j |j|||_||_||_ ||_ yr-) _inference_state_module_contextrh _module_node _code_linesr get_on_completion_name _like_name_original_position_signatures_callback_fuzzy)r$rSrk code_linesrlsignatures_callbackrDs r%__init__zCompletion.__init__s` /-*44%"889J9JJX`a#+$7! r'cjjjd}t|j\}}}t j j |xs|j|dn||zj}|e|scttjj |||jjj jj }||sd|vrj||}|Sj|\}}g}|j<|jj dvr$|j#t%|jtt'j|j(jj||} t+|| t-| fdzS) NTrfrC )import_as_namesdotted_as_names)rFc|jjj |jjd|jjd|jjfS)N___)r3 startswithrrJ)xr$s r%z%Completion.complete..sTQVV5F5Ft5W1W121B1B41H121B1B31G121Ar')key)rrir_extract_string_while_in_stringrrrrlistrr~rr_complete_in_string_complete_pythonrsrRextendextract_imported_namesr]rUrdsorted) r$rmrY start_leafquoteprefixed_completionsrFrTrWr_s ` r%rNzCompletion.completes  66  # #!7 %DD$JaJa$b! E,      $  # #ND++    &:#'(:%%t';';ZPV!:!:  $"9"9 )$  'DFN'+'?'? F'S$' '(,(=(=d(C% % ;; "t{{'7'7;a'a  ! !"8"E F<(=(=?O(, DOO(, ^Q\^_ 3[ A['AB B r'c |jj}dx|_}|jd|jdt |j z f|_d} tj||j||j x|_}t|jdvr|j j#|j d}|j%}|j d}|j&|j cxkr|j(ksn|j&d}||} t+| dd d d d } | n| j,} | d k(r.| j.d} t1| t2r| jd z} | j&d|k(r0| dk(rddgz n#| d k(rgdz n| d k(rj5dg} d} t7fdt8j:t8j<fDr|Dcgc]}|j>}}tA|}|r$|ddvr|t|jCdfSd|vr5tE|d|v\}}d|vxrd|v }| |jG|||z } nH|ddvrt|ddk(rl|j j#|j }|j,dk(r|j%}|jI|j%\}}| |z } n|jKr| |jM|z } n|ddvrw|ddvrp|jN|j }|rU|djP}t|jS}|jU}| tW|||z } tY|||} | s(| |jz } | |jCdz } | sZ|j|j ddz d|j d}| |j[| xs|ddvxr|ddd k7 !z } || fS#tj$r@}|jj}|dk(r |gfcYd}~S||jfcYd}~Sd}~wwxYwcc}w)"a Analyzes the current context of a completion and decides what to return. Technically this works by generating a parser stack and analysing the current stack for possible grammar nodes. Possible enhancements: - global/nonlocal search global - yield from / raise from <- could be only exceptions/generators - In args: */**: no completion - In params (also lambda): no completion before = Nr.ifTrfif_stmtfor_stmt while_stmttry_stmt error_node_stmtelifelse)exceptfinallyrFc3&K|]}|v ywr-r+).0tallowed_transitionss r% z.Completion._complete_python..sLAq''Ls)asdefclass) is_function import_stmt import_fromimport only_modules)trailer dotted_name endmarker)(,)rarglist decoratorz .;z...) only_values).r~grammarrUrrMr _positionr get_stack_at_positionr OnErrorLeaf error_leafvalue_complete_global_scoper)_allowed_transition_names_and_token_typesrriget_previous_leaf start_posend_posrrRchildrenrprappendanyrNAMEINDENT nonterminal _gather_nodes_complete_inheritedr_get_importer_names_complete_trailer_is_parameter_completion_complete_paramsr _call_detailsiter_used_keyword_argumentscount_positional_argumentsr;rA_complete_keywords)r$rmrrUrFer previous_leafindentstmttype_firstrT kwargs_only stack_node nonterminalsnodeslevelrbrdotnr5 call_detailsr7r6 current_liners @r%rzCompletion._complete_pythons''//!! U  # #A &  # #A &T__)= =   >!(!>!>))4" DJ @@B C  & &$$::4>>\`:aD 224M^^A&FNNdnnD D*($*i\:$D| IIE , $ a 0%eT2$)KK'$9E~~a(F2 I-/FF3CC/"j0/3PP/"j0/66v>), L2B2G2G2B2I2I2KL LFKKzJ22KLK!%(Er&<<#D)A)Ad)A)S$TTT,.1%,9VW u$1\$A$WhRWFWX  D$<$<!-%=% b!%??E"IQTDT''==dnnM88{*002C!%!7!78M8M8O!P Q A% ..0 D$9$9$$?? 9 *(,0SS!:!:!:DNN!KJ!'1!}'B'B &*<+S+S+U&V +7+R+R+T((,F&,'-( '5ZAQS^&_ "$(C(C(EE$$(@(@U(@(SS$++DNN1,=,ABCUDNNSTDUVL  7 7#%1!1"@\"5E5P6@%1"#%6%%?A!8!   ,,,g"" >LL&&E|#B& ; ; == = >hLs03P*R*Q==Q8Q=!Q82Q=8Q=c|jd}|jdk(rt|jdk(ry|jdvry|jdvxr|jddk(S)NrlambdefrT parameters) typedargslist varargslistr)rUrrMr)r$toss r%rz#Completion._is_parameter_completionTsdjjn ??i 'C Na,? ??l *"BB[syyQS}X[G[[r'c|jd}|jdk(r|jd}|jdk(rt|j|j}t |dd}||j dk(rA|jd}|j dk(r |j}n&|j dk(r|g}ng}n|j}|jd }t||j|SgS) Nrrfuncdefrr decoratorsrr) rUrrnrrrrRrget_decoratorsrr{r)r$rmrrxrurrrys r%rzCompletion._complete_paramsasZZ^  ! !\ 1BJ  ! !Y .&t';';T^^LG"4yAD99 , a(Avv-%&ZZ ;.&'S %' !%!4!4!6J * 0 0 3 +G]5H5H*UU r'c#K|D]M}t|ts|js%|r|dvs,tj|j |Oyw)N)TrueFalseNone)rpstrisalphar KeywordNamer~)r$rrr[s r%rzCompletion._complete_keywordsxsM$ IA!S!aiik"a+D&D"..t/D/DaHH IsAAA%Act|j|j}tjd|t |j |j}t||j|}g}|D]}||jz }|S)Nzglobal completion scope: %s) rnrrr dbgrvrrvalues)r$rxflow_scope_nodefiltersrTfilters r%rz!Completion._complete_global_scope~s"4#7#7H /9-d.?.?P$  NN    0F   /  0r'cH|jj|}t||}tjd|dd}t |dk(rA|\}|j r-t |jdk(r|jd}|dvr|}||j|fS)Nztrailer completion values: %sMAGENTA)colorrr)numpy tensorflow matplotlibpandas) rrjrr rrM is_module string_names_complete_trailer_for_values)r$rinferred_contextrrFv module_names r%rzCompletion._complete_trailers//>>}M#$4mD 16K v;! BA{{}q~~&!+"#.."3K"&UU&1 D==fEEEr'cZt|j|j}t||Sr-)rnrrcomplete_trailer)r$r user_contexts r%rz'Completion._complete_trailer_for_valuess%'(<(>>` - Having backticks that doesn't have whitespace inside it c3Kd}D]c}|s"|jds|jdrtjdd|ndttjd|}eyw)NFz>>> z ^( *>>> ?| +)z *>>>)rresubboolrK)linesinclude_next_linelrs r%iter_relevant_linesz;Completion._complete_in_string..iter_relevant_linessd %  ?$ U(;q||C?P&&!12q99J$('1)=$>!  ?sA,A/T)keependsrrz `([^`\s]+)r)rr r_complete_code_linesr'searchgroup)r$rrYr-relevant_code_linesrcrKrs @r%rzCompletion._complete_in_strings ? $7 "#6z#BC r " .EX"Y194!#;"Y "Y,,-@A A -B8 ,,ekk!n-=> > #Zs BcH|jjjdj|}t |j |j||}t |j|j||jd|jjS)Nr&)in_module_contextrSrtrcgSr-r+)argskwargss r%rz1Completion._complete_code_lines..sr')rrlrrD) r~rparsejoinrrrL as_contextrrrN)r$rrt module_values r%r/zCompletion._complete_code_liness++3399"''*:MN &"22 11#!    ! !  # # %! (( :++   (* r'N)F)rT)T)r(r)r*rrNrrrrrrrrrrr/r+r'r%rLrLsN,1*. `M-^ \.I  F$6 T 0Br'rLcng}|D]-}|jjdk(rg}||jz }/|S)N small_stmt)dfa from_ruler)rUrrs r%rrsD E& >> # #| 3E Z%% %E & Lr'z^\w*(\'{3}|"{3}|\'|")cfd}|jkry|jdk(r||Sg}||jdk(rd|jvsd|jvrt|jdkDr||Sd}|jsM|j }|9|jdk7s*t d |jjDsd}d jfd |D|xs||d n |jt|zfS|jd k7r y|jd ||j }|y) Ncji}|jdk(rd|jz |d<tj|jfi|}|sy|j d}|jdk(r$d|j|j zkryt||j d||fS)NrrendposNNN)linecolumn _string_startrKrr1endr)rmr7rKstartrls r%return_part_of_leafz<_extract_string_while_in_string..return_part_of_leafs 99 #'{T[[8F8 ##DJJ9&9# A 99 # dkkEIIK6O(O#$T84UYY[\BD%OOr'rCrYr"'rr3c3$K|]}|dv yw)rubfNr+)rrcs r%rz2_extract_string_while_in_string..s"R11;"Rsr&c36K|]}t|ywr-r)rr,rls r%rz2_extract_string_while_in_string.. sKq-a:Ksr) rrRrrMprefixrallrJr9rrDinsert)rmrlrIleaves prefix_leafs ` r%rrsT P$..  yyH"4(( F   99 $#*;sdjj?P4::"*400K;;"446 &+*:*:f*D""R 8I8I8O8O8Q"RR"&KKFKK#t"* 0A0A'h78  99 #    a%%'1  2 r'cxg}|D]g}|j|jD]}||jz }|jrHt |t sY|t ||z }it|}|D];}||vs|j|jD]}||jz }=|S)N) origin_scope)rrhris_stubrpr_complete_getattrr)rrrTrr python_valuesrcs r%rr0sG''\5K5K'L 0F   /  0}}:e\#B  1, F F  G#6*M 4 F?--\5K5K-L 4 FMMO3  44 r'cr|jdxs|jd}tjd|D}|D]p}|j}||jdk7r"|j D];}|jdk7r|j d}|jdk7r3|j d}|j d} t|j d k7s|jd k7s|jd k7r| j d} | jd k7st| j d kr|j} | j d} | j d } | j| | j}td|Ds| j| }t||ccSsgS)aV A heuristic to make completion for proxy objects work. This is not intended to work in all cases. It works exactly in this case: def __getattr__(self, name): ... return getattr(any_object, name) It is important that the return contains getattr directly, otherwise it won't work anymore. It's really just a stupid heuristic. It will not work if you write e.g. `return (getatr(o, name))`, because of the additional parentheses. It will also not work if you move the getattr to some other place that is not the return statement itself. It is intentional that it doesn't work in all cases. Generally it's really hard to do even this case (as you can see below). Most people will write it like this anyway and the other ones, well they are just out of luck I guess :) ~dave. __getattr____getattribute__c3<K|]}|jywr-)infer)rr3s r%rz$_complete_getattr..Ws#  #sr return_stmtr atom_exprrr3getattrrc3:K|]}|jdk(yw)paramN)r )rrs r%rz$_complete_getattr..vs@qzzW,@s)get_function_slot_namesr from_setsrhrRiter_return_stmtsrrMrr:gotorr infer_noder)rinstancerb functionsfuncrhr^r_atomrrrx object_node name_node name_listobjectss r%rWrWAs( - -m <E001CD ""##I";NN   ) ; $668 ;K=0#,,Q/I~~,%%a(D((+G9%%&!+tyyF/BzzY.&&q)G||y(C0@0@,AA,Eoo'G!**1-K ((+I Y 0C0CDI@i@@ ((5G#L': :; ; ";F Ir'c #K|ddD]q} g} |D]L} | | jk(s| j| jdvr|r0| t|| j z } Nt j d| |dd| }s|dj} |D]} | jj} |rtj| | |s |r:| | k(s@t| tr(| j Dcgc]}|j}}n| g}|r t|}|D]T}|r$tj||dt!| |}ntj"||}|r||j$k(sQ|Vycc}ww)Nr)module namespacezdot lookup on search %s from %s rC)rUlike_name_lengthrE)r#rPr rr]r rrJr rKrprr3rr rLrMNamerR)rSrkrb wanted_names wanted_typerNrDignore_importsconverts new_namesr last_namerYrn2def_s r%search_in_modulers#2    AAMM!;;*qzz=T/T*-"GGI    3Ycr K R &&(I $$&  fiuEFi$7!]+)*3A33%e, "--'"),Y!& D#<<J  4s*E:B(E: E:"E:3E5A%E:,E:cg}|jdvrt|jD]\}}|jdk(r`|dkDr?|j|dz jdk(r |j|dz jdk(rY|j |ju|jdk(s|j t ||S)N)rrimport_as_namer3rrkeywordrr)rRr.rrrrr)rurWindexchilds r%rrsN yyLL%dmm4 ELE5zzV#AI$-- ":"?"?9"L MM%!)4::dB%%ekk2//%%&rs /,*1".I5-:@K3'&*& 3,>; / qqh  34 -`"=B9>38'T r'