o
    ï›hS  ã                   @   sò   d Z ddlmZ ddlmZ ddlmZ dedfdedfd	e	d
fde
dfde
dfde
dfde
dfde
dfde
dfde
dfde
dfde
dfde
dfdedfdedfdœZG dd„ dƒZG dd„ deƒZdedfdd„Zdd „ Zd!d"„ Zd%d#d$„ZdS )&z
Module for statical analysis.
é    )Útree)Údebug)Ú	is_stringé   zPotential AttributeError.é   zPotential NameError.é   zPotential ImportError.é   Né   é   é   é   é	   é
   é   é   é   é   é   )úattribute-errorz
name-errorzimport-errorztype-error-too-many-argumentsztype-error-too-few-argumentsztype-error-keyword-argumentztype-error-multiple-valuesztype-error-star-starztype-error-starztype-error-operationztype-error-not-iterableztype-error-isinstanceztype-error-not-subscriptablezvalue-error-too-many-valueszvalue-error-too-few-valuesc                   @   sb   e Zd Zd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d„ Zdd„ ZdS )ÚErrorNc                 C   s2   || _ || _|| _|d u rt| j d }|| _d S )Nr   )ÚpathÚ
_start_posÚnameÚCODESÚmessage)Úselfr   Úmodule_pathÚ	start_posr   © r   úMc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/inference/analysis.pyÚ__init__   s   
zError.__init__c                 C   ó
   | j d S ©Nr   ©r   ©r   r   r   r   Úline&   ó   
z
Error.linec                 C   r!   )Nr   r#   r$   r   r   r   Úcolumn*   r&   zError.columnc                 C   s"   | j jd }|tt| j d ƒ S r"   )Ú	__class__Ú__name__Ústrr   r   )r   Úfirstr   r   r   Úcode.   s   z
Error.codec                 C   s   d| j | j| j| j| jf S )Nz%s:%s:%s: %s %s)r   r%   r'   r,   r   r$   r   r   r   Ú__str__4   s   ÿzError.__str__c                 C   s$   | j |j ko| j|jko| j|jkS ©N)r   r   r   ©r   Úotherr   r   r   Ú__eq__8   s   
ÿzError.__eq__c                 C   s   |   |¡ S r.   )r1   r/   r   r   r   Ú__ne__<   s   zError.__ne__c                 C   s   t | j| j| jfƒS r.   )Úhashr   r   r   r$   r   r   r   Ú__hash__?   s   zError.__hash__c                 C   s&   d| j j| j| j| jd | jd f S )Nz<%s %s: %s@%s,%s>r   r   )r(   r)   r   r   r   r$   r   r   r   Ú__repr__B   s   þzError.__repr__r.   )r)   Ú
__module__Ú__qualname__r    Úpropertyr%   r'   r,   r-   r1   r2   r4   r5   r   r   r   r   r      s    



r   c                   @   s   e Zd ZdS )ÚWarningN)r)   r6   r7   r   r   r   r   r9   H   s    r9   c           
      C   sb   t | d }t| |||ƒrd S |  ¡ }| ¡ }||||j|ƒ}	tjt|	ƒdd� | jj	 
|	¡ |	S )Nr   F)Úformat)r   Ú_check_for_exception_catchÚget_root_contextZ
py__file__r   r   Úwarningr*   Úinference_stateZanalysisÚappend)
Únode_contextZ
error_nameÚnoder   ÚtypÚpayloadÚ	exceptionZmodule_contextr   Zissue_instancer   r   r   ÚaddL   s   rE   c                    sV   |   ¡ }|j‰ ˆ du rdS zˆ  ¡ d }W n
 ty   Y dS w t‡ fdd„|D ƒƒS )zU
    Check if there's any setattr method inside an instance. If so, return True.
    NFÚsetattrc                 3   sH   � | ]}ˆ j |j   k oˆ jk n  o|jjd ko|jj|k V  qdS )ZfuncdefN)r   Úend_posÚparentÚtyper   )Ú.0Ún©rA   r   r   Ú	<genexpr>i   s   € ý
þz%_check_for_setattr.<locals>.<genexpr>)r<   Z	tree_nodeZget_used_namesÚKeyErrorÚany)ÚinstanceÚmoduleZ
stmt_namesr   rL   r   Ú_check_for_setattrZ   s   ÿýrR   c                 C   sJ   d||f }t }| ¡ r| ¡ st|ƒrt}||f}t| d||||ƒ d S )Nz'AttributeError: %s has no attribute %s.r   )r   Zis_instanceZis_compiledrR   r9   rE   )Zname_contextZlookup_valuer   r   rB   rC   r   r   r   Úadd_attribute_erroro   s   rS   c                    sº   dd„ ‰ ‡ ‡‡fdd„}‡‡‡fdd„}ˆ}|dur[t |tjtjfƒs[t |tjƒrK|jdkr5|||ƒr5d	S |tkrK|jd
v rK||jd |jd ƒrKd	S |j}|dur[t |tjtjfƒr#dS )a  
    Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and
    doesn't count as an error (if equal to `exception`).
    Also checks `hasattr` for AttributeErrors and uses the `payload` to compare
    it.
    Returns True if the exception was catched.
    c                 S   s<   |   ¡ sdS | ¡ D ]}|  ¡ |jkr| j ¡ r dS q
dS )NFT)Úis_classÚmroZ
py__name__r)   Zparent_contextZis_builtins_module)ÚclsrD   Z
python_clsr   r   r   Úcheck_match†   s   ÿ€z/_check_for_exception_catch.<locals>.check_matchc                    sî   t | jƒ}|D ]!}t|ƒ t|ƒ}|dkr(|jˆj  k r$|jks( dS   dS q|  ¡ D ]G}|d u r6 dS ˆ |¡}|D ]6}ddlm} t	||j
ƒrj|jdkrj| ¡ D ]}	|	 ¡ D ]}
ˆ |
|ƒrg    dS qZqTq=ˆ ||ƒrs  dS q=q-d S )NÚtryFTr   )ÚiterableÚtuple)ÚiterÚchildrenÚnextr   rG   Zget_except_clause_testsZ
infer_nodeZjedi.inference.valuerY   Ú
isinstanceÚSequenceZ
array_typeZ
py__iter__Úinfer)ÚobjrD   ÚiteratorZbranch_typeÚsuiterA   Zexcept_classesrV   rY   Ú
lazy_valuerB   )rW   Ú	jedi_namer@   r   r   Úcheck_try_for_except�   s<   
ÿ€


ÿÿÿ
ÿöûz8_check_for_exception_catch.<locals>.check_try_for_exceptc                    s>  z”|j ˆ j   kr|jk sJ ‚ J ‚| jdv sJ ‚| jd }|jdkr(|jdks*J ‚| jd }|jdks6J ‚|jd }|jdksBJ ‚ddlm} |ˆjˆ|ƒ}t| 	¡ ƒ}t
|ƒd	ks]J ‚|d \}}	t|	 ¡ ƒ}
t
|
ƒdkrut|
d ƒswJ ‚|
d  ¡ ˆd jks„J ‚|d \}}	|	 ¡ }ˆd |v W S  tyž   Y d
S w )N)ÚpowerZ	atom_exprr   r   Úhasattrr   ÚtrailerÚarglist)ÚTreeArgumentsr   F)r   rG   rI   r\   ÚvalueZjedi.inference.argumentsrk   r>   ÚlistÚunpackÚlenr`   r   Zget_safe_valueÚAssertionError)rA   rc   Úbaseri   rj   rk   ÚargsZunpacked_argsÚkeyrd   ÚnamesÚobjects)re   r@   rC   r   r   Úcheck_hasattr¬   s.   "


ÿz1_check_for_exception_catch.<locals>.check_hasattrNZtry_stmtT)Zif_stmtZ
while_stmtr   r   F)	r^   r   ÚFunctionÚClassZFlowrI   ÚAttributeErrorr\   rH   )r@   re   rD   rC   rf   rv   ra   r   )rW   re   r@   rC   r   r;   ~   s   
÷r;   r.   )Ú__doc__Zparso.pythonr   Zjedir   Zjedi.inference.helpersr   ry   Ú	NameErrorÚImportErrorÚ	TypeErrorÚ
ValueErrorr   r   r9   rE   rR   rS   r;   r   r   r   r   Ú<module>   s4    ñ+