
    ue                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ  e j                  e	      Z
 G d d      Zd Z eed	
      Zd Z eei 
      Zy)    N)defaultdict)time)
Completion)lspc                   r    e Zd ZddZed        Zej                  d        Zd Zd Zde	fdZ
de	fdZd	 Zy
)Resolverc                     || _         || _        i | _        || _        t	        t
              | _        d| _        h d| _        y )N   >   numpypandas
matplotlib
tensorflow)	callbackresolve_on_error_cache_time_to_liver   set
_cache_ttl_clear_every_cached_modules)selfr   r   time_to_lives       :/usr/lib/python3/dist-packages/pylsp/plugins/_resolvers.py__init__zResolver.__init__   s<      0)%c*N    c                     | j                   S N)r   r   s    r   cached_moduleszResolver.cached_modules   s    ###r   c                 $    t        |      | _        y r   )r   r   )r   	new_values     r   r   zResolver.cached_modules    s    "9~r   c                     | j                         }| j                  D cg c]
  }||k  s	| }}|D ]0  }| j                  |   D ]  }| j                  |=  | j                  |= 2 y c c}w r   )time_keyr   r   )r   now	timestampto_clearr#   keys         r   clear_outdatedzResolver.clear_outdated$   so    mmo/3R))c/IRR  	*Hx0 %KK$%)	* Ss
   
A&A&c                 B    t        t               | j                  z        S r   )intr   r   r   s    r   r#   zResolver.time_key,   s    46D...//r   
completionc                    |j                   sd}n0|j                   j                  d      }|xr |d   | j                  v }|r| j                  |      }|| j                  vrz| j                         | j                  z  dk(  r| j                          | j                  |      | j                  |<   | j                  | j                            j                  |       | j                  |   S | j                  |      S )NF.r   )	full_namesplitr   _create_completion_idr   r#   r   r(   resolver   add)r   r+   	use_cachemodule_partsr'   s        r   get_or_createzResolver.get_or_create/   s    ##I%//55c:L$PaD<P<P)PI,,Z8C$++%==?T%6%66!;'')#'<<
#;C 044S9;;s##||J''r   c                 |    |j                   |j                  |j                  |j                  | j	                         fS r   )r.   module_pathlinecolumnr#   )r   r+   s     r   r0   zResolver._create_completion_idB   s7      ""OOMMO
 	
r   c                     	 |j                         }| j                  ||      S # t        $ r1}t        j	                  d| d|        | j
                  cY d }~S d }~ww xY w)Nz.Something went wrong when resolving label for z: )get_signaturesr   	Exceptionlogwarningr   )r   r+   siges       r   r1   zResolver.resolveK   s`    	)++-C==S11 	)KK@BqcR (((		)s   !$ 	A&AAAN)i  )__name__
__module____qualname__r   propertyr   setterr(   r#   r   r5   r0   r1    r   r   r   r      s]    O $ $ . .*0(
 (&

 
)r   r   c                     |rQ| j                   dv rCdj                  d |d   j                  D              }dj                  | j                  |      }|S | j                  S )N)functionmethod, c              3   4   K   | ]  }|j                     y wr   )name).0params     r   	<genexpr>zformat_label.<locals>.<genexpr>Z   s     A%5::As   r   z{}({}))typejoinparamsformatrL   )r+   r?   rR   labels       r   format_labelrU   X   sP    
z"88A3q6==AA
8??r    )r   r   c                 @   |si S i }|d   j                   D cg c]   }d|j                  vr|j                  dvr|" }}t        |      dkD  r{t        j
                  j                  |d<   | j                  dz   }t        |      D ]5  \  }}|d|dz   d|j                  d	z  }|t        |      dz
  k  s1|d
z  }7 |dz  }||d<   |S t        |      dk(  r1t        j
                  j                  |d<   | j                  dz   |d<   |S | j                  dz   |d<   |S c c}w )Nr   =>   */   insertTextFormat(z${:}rJ   z)$0
insertTextz($0)z())rR   descriptionrL   lenr   InsertTextFormatSnippet	enumerate)r+   r?   snippet_completionrN   positional_argssnippetis          r   format_snippetrj   e   sR   	 V]]e'''EJJj,H 	O  ?a141E1E1M1M-.//C'!/2 	 HAuQUEJJ77G3'!++4	  	5+2<(  
_		"141E1E1M1M-.+5??V+C<(  ,6??T+A<(-s   %D)loggingcollectionsr   r   jedi.api.classesr   pylspr   	getLoggerrA   r=   r   rU   LABEL_RESOLVERrj   SNIPPET_RESOLVERrF   r   r   <module>rr      s\     #  ' g!
B) B)N <"E
> ^bI r   