o
    g                     @   sr   d Z ddlmZmZmZ ddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ G dd	 d	ejZd
d ZdS )z!Looks for overlapping exceptions.    )AnyListTupleN)nodes)checkers
interfaces)utils)_annotated_unpack_inferc                   @   sH   e Zd ZdZejZdZddiZdZ	dZ
eddejd	d
fddZd
S )OverlappingExceptionsCheckerzChecks for two or more exceptions in the same exception handler
    clause that are identical or parts of the same inheritance hierarchy
    (i.e. overlapping).zoverlap-exceptW0714)zOverlapping exceptions (%s)overlapping-exceptz8Used when exceptions in handler overlap or are identical r   nodereturnNc              
   C   s`  |j D ]}|jdu rqt|jtjrqz	tt|j}W n
 tjy&   Y qw g }|D ]\}}|tju r5q+t|tj	rCt
|rC|j}t|tjsJq+dd | D }|D ]O\}}	dd |	 D }
||	krz| jd|j|  d|  dd qU|	|v s||
v r||
v r|n|}|	|v r|n|}| jd|j|  d	|  d qU|||fg7 }q+qdS )
zcheck for empty exceptNc                 S      g | ]
}t |tjr|qS r   
isinstanceastroidClassDef.0ancr   r   f/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pylint/extensions/overlapping_exceptions.py
<listcomp>:   s
    z@OverlappingExceptionsChecker.visit_tryexcept.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r   ?   s    
r   z and z are the same)r   argsz is an ancestor class of )handlerstyper   r   BoolOplistr	   InferenceErrorUninferableInstancer   inherit_from_std_ex_proxiedr   	ancestorsadd_message	as_string)selfr   handlerexcshandled_in_clausepartexcexc_ancestors	prev_partprev_excprev_exc_ancestorsancestor
descendantr   r   r   visit_tryexcept"   sV   


z,OverlappingExceptionsChecker.visit_tryexcept)__name__
__module____qualname____doc__r   IAstroidChecker__implements__namemsgspriorityoptionsr   check_messagesr   	TryExceptr4   r   r   r   r   r
      s    r
   c                 C   s   |  t|  dS )z.Required method to auto register this checker.N)register_checkerr
   )linterr   r   r   registerU   s   rC   )r8   typingr   r   r   r   r   pylintr   r   pylint.checkersr   pylint.checkers.exceptionsr	   BaseCheckerr
   rC   r   r   r   r   <module>   s   E