
    8@d'                        d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	  e j
        e          Zej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        d
ZdZdZed             Zed             Zd	 Zd
 ZdefdZddefdZddZ ddZ!d Z"d Z#dS )    N)_utilshookimpllsp)LABEL_RESOLVERSNIPPET_RESOLVER)
module	namespaceclassinstancefunctionparampathkeywordproperty	statement)import_nameimport_from)
error_nodec           	         |                      d|j                  }|                    dd          t          j        ||          }|                    dd          |d<    |                    d          j        d i |}|sdS | j                            d	i                               d
i           }|                    di           }|                    d          }|                    ddg          }	t          j        |	          |                    d          }
|                    dd          }|                    dd          }|                    dd          |                    dd          }||t          _
        |t          _
        |o|
ot          ||          |o|ot          ||          }|o|ot          ||          }fdt          |          D             }|rqt          |          D ]a\  }}|j        dk    rQt          |d|k               }t           j        j        |d<   |dxx         dz  cc<   |                    |           b|rqt          |          D ]a\  }}|j        dk    rQt          |d|k               }t           j        j        |d<   |dxx         dz  cc<   |                    |           b|D ]}d|j        i|d<   d t+          ||          D             |j        d<   |pdS )!z3Get formatted completions for current code positionjedi_completion)document_patheagerFfuzzyT)use_document_pathNtextDocument
completioncompletionItemsnippetSupportdocumentationFormatmarkdowninclude_paramsinclude_class_objectsinclude_function_objectsresolve_at_most   	cache_forc           
      \    g | ](\  }}t          ||j        d v rnd|k               )S ))r
   r   Fmarkup_kindr!   resolveresolve_label_or_snippet)_format_completiontype).0icr!   max_to_resolvepreferred_markup_kindresolve_eagerlys      =lib/python3.11/site-packages/pylsp/plugins/jedi_completion.py
<listcomp>z%pylsp_completions.<locals>.<listcomp>H   sd     	 	 	 Aq 	--.V7L-L-L>>RW#&'.&8	
 	
 	
	 	 	    r
   r(   kindlabelz objectr   doc_uridatac                 *    i | ]\  }}|d          ||fS )r8    )r.   r   r:   s      r4   
<dictcomp>z%pylsp_completions.<locals>.<dictcomp>v   s:     5 5 5 J 	7j$/5 5 5r6   LAST_JEDI_COMPLETIONSr<   )plugin_settingsr   getr   position_to_jedi_linecolumnjedi_scriptcompletecapabilitieschoose_markup_kindr   cached_modulesr   use_snippets	enumerater-   r,   r   CompletionItemKindTypeParameterappendurizipshared_data)configdocumentpositionsettingscode_positioncompletionscompletion_capabilitiesitem_capabilitiessnippet_supportsupported_markup_kindsshould_include_paramsshould_include_class_objectsshould_include_function_objectsmodules_to_cache_forr"   r#   ready_completionsr/   r0   completion_dictr!   r1   r2   r3   s                       @@@@r4   pylsp_completionsr_   &   s    %%&7x}%UUHll7E22O6xJJM%\\'599M'G(&&&>>GXX-XXK t$155nbIIMMl\^__/334DbII'++,<==O.223H:,WW"56LMM$LL)9::#+<<0G#O#O &.ll3Mu&U&U#\\"3R88N#<<T::'(<%*>'$c)>c<PXZbCcCcN+q0LqQ]^fhpQqQq.w3RwWcdlnvWwWw	 	 	 	 	 	 	 k**	 	 	  :k** 	: 	:DAqv  "4 5#(+./..@# # # +.*@*N'(((I5(((!((999 :k** 	: 	:DAqv##"4 5#(+./..@# # # +.*@*N'(((I5(((!((999, 
 
x|#

5 5 !$$5{ C C5 5 5H01 $$r6   c                 d   |j         d                             |d                   }| j                            di                               di           }|                    di           }|                    ddg          }t          j        |          }|r|\  }}	t          ||	|          S |S )	z>Resolve formatted completion for given non-resolved completionr>   r8   r   r   r   r   r    )r)   )rN   r@   rD   r   rE   _resolve_completion)
rO   completion_itemrP   rN   rU   rV   rX   r2   r   r:   s
             r4   pylsp_completion_item_resolverc      s     &'>?CCOT[D\]]K$155nbIIMMl\^__/334DbII.223H:,WW"56LMM X&
D":tAVWWWWr6   c                 p    	 | d t                                           D             v S # t          $ r Y dS w xY w)z
    Determine if a class name is an instance of an Exception.

    This returns `False` if the name given corresponds with a instance of
    the 'Exception' class, `True` otherwise
    c                     g | ]	}|j         
S r<   )__name__)r.   clss     r4   r5   z&is_exception_class.<locals>.<listcomp>   s    KKKKKKr6   F)	Exception__subclasses__AttributeError)names    r4   is_exception_classrl      sQ    KK	0H0H0J0JKKKKK    uus   $' 
55c                 b   |d         }| j                             d|          }||         d|d                  g}|dz  }d}|dk    r||         }|                                                    d          sN|                                                    d	          s'|                                                    d
          rE|                    d|           |dz  }|                                                    d	          rd}nn|dk    d	|d                                         v rd}d                    |                              dd          d                                         |z   }t          j	        |          }|j
        d         j        }	|	t          vo|	t          v od|v  S )z
    Determine if it's necessary to return snippets in code completions.

    This returns `False` if a completion is being requested on an import
    statement, `True` otherwise.
    line
N	character    \(,r   );)maxsplitimport)sourcesplitrstripendswithinsertstripjoinrsplitparsoparsechildrenr-   _IMPORTS_ERRORS)
rP   rQ   rn   lines	act_lineslast_characteract_linecodetokens	expr_types
             r4   rG   rG      s    FDO!!$--Et3h{3345IAIDN
));OO&&t,, 	!!**3//	!!**3//	 Q)))AID  ))#.. % "% )) im!!####99Y&&sQ&77;AACCnTD[F"'IX% <g%:(d*:;=r6   r)   c                     t          |          | d<   	 t          j        |                    d          d |                                D             |          }n# t
          $ r d}Y nw xY w|| d<   | S )NdetailT)rawc                 6    g | ]}|                                 S r<   )	to_string)r.   	signatures     r4   r5   z'_resolve_completion.<locals>.<listcomp>   s4        ##%%  r6   )
signaturesr)   rr   documentation)_detailr   format_docstring	docstringget_signaturesrh   )r   dr)   docss       r4   ra   ra      s    "1::Jx
&KKDK!! !"!1!1!3!3   $
 
 
    "&Js   AA A+*A+TFc                 h   t          | |          t                              | j                  t	          |           | j        d}|rt          || |          }| j        dk    rt          j        	                    | j                  }|
                    dd          }|
                    dd          }| j                            t          j                  rt          j        dk    r|dz   }n|dz   }||d<   |r9t          | j                  s%t          | |          }|                    |           |S )	N)r8   r7   sortText
insertTextr   rt   z\\/z\/ntr   )_label	_TYPE_MAPr@   r-   
_sort_textrk   ra   osr   normpathreplacer~   seprl   _snippetupdate)r   r)   r!   r*   r+   r   r   snippets           r4   r,   r,      s*   344af%%qMMf	 J  E(QDD
 	vw''||D&))||C'' 6??26"" 	$w$f}e|#'
<  #088 #1677'"""r6   c                 R    |s| j         S t          j        |           }|r|S | j         S N)rk   r   get_or_create)
definitionr*   sigs      r4   r   r      s7     

&z
2
2C
 
?r6   c                 6    |si S t          j        |           }|S r   )r   r   )r   r*   r   s      r4   r   r      s$     	,Z88GNr6   c                 l    	 |                                  j        pdS # t          $ r | j        pdcY S w xY w)Nrr   )parent	full_namerj   )r   s    r4   r   r     sP    *  "",22 * * *#)r)))*s    33c                 r    | j                             d          rdnd}|                    | j                   S )z` Ensure builtins appear at the bottom.
    Description is of format <type>: <module>.<item>
    _zz{}za{})rk   
startswithformat)r   prefixs     r4   r   r     s6     !o0055@UU5F==)))r6   )TFF)F)$loggingr   r   pylspr   r   r   pylsp.plugins._resolversr   r   	getLoggerrf   logrI   ModuleClass	ReferenceFunctionVariableFileKeywordPropertyr   r   r   r_   rc   rl   rG   strra   r,   r   r   r   r   r<   r6   r4   <module>r      s    				  ' ' ' ' ' ' ' ' ' ' E E E E E E E Eg!! $+'.#)&0&/#,"'%-&/'0 	 *  
U% U% 
U%p 
  
   =  =  =FC    $ s    D      * * ** * * * *r6   