o
    b                     @   sZ   d Z ddlZddlmZ ddl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.    N)
interfaces)checkers)utils)_annotated_unpack_inferc                   @   s<   e Zd ZdZejZdZddiZdZ	dZ
ed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-exceptZW0714)zOverlapping exceptions (%s)overlapping-exceptz8Used when exceptions in handler overlap or are identical r   c              
   C   sZ  |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 ]L\}}	dd |	 D }
||	krx| jd|jd| | f d qU|	|v s||
v r||
v r|n|}|	|v r|n|}| jd|jd| | f 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.0Zancr	   r	   g/var/www/secure340b-portal/env/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%s and %s are the same)nodeargsz%s is an ancestor class of %s)handlerstyper   r   BoolOplistr   ZInferenceErrorZUninferableInstancer   Zinherit_from_std_exZ_proxiedr   Z	ancestorsZadd_message	as_string)selfr   handlerZexcsZhandled_in_clausepartexcZexc_ancestorsZ	prev_partZprev_excZprev_exc_ancestorsZancestorZ
descendantr	   r	   r   visit_tryexcept#   s^   


z,OverlappingExceptionsChecker.visit_tryexceptN)__name__
__module____qualname____doc__r   ZIAstroidCheckerZ__implements__nameZmsgspriorityoptionsr   Zcheck_messagesr   r	   r	   r	   r   r      s    r   c                 C   s   |  t|  dS )z.Required method to auto register this checker.N)Zregister_checkerr   )Zlinterr	   r	   r   registerX   s   r'   )r#   r   Zpylintr   r   Zpylint.checkersr   Zpylint.checkers.exceptionsr   ZBaseCheckerr   r'   r	   r	   r	   r   <module>   s   G