
    c                        d Z ddlmZ ddlmZm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 erdd	lmZ  G d
 de	j                  ZddZdS )z!Looks for overlapping exceptions.    )annotations)TYPE_CHECKINGAnyN)nodes)checkers)utils)_annotated_unpack_infer)PyLinterc                  V    e Zd ZdZdZddiZdZ ej        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-exceptW0714)zOverlapping exceptions (%s)overlapping-exceptz8Used when exceptions in handler overlap or are identical r   nodenodes.TryExceptreturnNonec                   |j         D ]}|j        t          |j        t          j                  r+	 t          t          |j                            }n# t          j        $ r Y _w xY wg }|D ]]\  }}|t          j        u rt          |t          j	                  rt          j        |          r|j        }t          |t          j                  sed |                                D             }|D ]\  }}	d |	                                D             }
||	k    rH|                     d|j        |                                 d|                                 d           q|	|v s||
v rV||
v r|n|}|	|v r|n|}|                     d|j        |                                 d|                                            |||fgz  }_dS )	zCheck for empty except.Nc                F    g | ]}t          |t          j                  |S r   
isinstanceastroidClassDef.0ancs     Hlib/python3.11/site-packages/pylint/extensions/overlapping_exceptions.py
<listcomp>z@OverlappingExceptionsChecker.visit_tryexcept.<locals>.<listcomp>>   s:     ! ! !jgFV6W6W!! ! !    c                F    g | ]}t          |t          j                  |S r   r   r   s     r   r   z@OverlappingExceptionsChecker.visit_tryexcept.<locals>.<listcomp>C   s;     * * *%c7+;<<** * *r   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
descendants                r   visit_tryexceptz,OverlappingExceptionsChecker.visit_tryexcept'   st    } ,	3 ,	3G| ',77 3GLAABB)    8:! !3 !3	c'-- c7#344 '9RSV9W9W ',C!#w'788 ! !#&==??! ! ! ,=  'Ix* *#+#5#5#7#7* * *&
 h ((0!($-$7$7$9$9!_!_@P@P!_!_!_ )    
 "]2 c=O6O +.2D+D#S44)-5-F%UTTI
((0!($,$6$6$8$8!k!kS]SgSgSiSi!k!k )   
 "tSk]2!!C!3,	3 ,	3s   !AA('A(N)r   r   r   r   )
__name__
__module____qualname____doc__namemsgsoptionsr   only_required_for_messagesr:   r   r   r   r   r      sh          D 
D G%U%&:;;.3 .3 .3 <;.3 .3 .3r   r   linterr
   r   r   c                J    |                      t          |                      d S )N)register_checkerr   )rC   s    r   registerrF   Y   s%    
8@@AAAAAr   )rC   r
   r   r   )r>   
__future__r   typingr   r   r   r   pylintr   pylint.checkersr   pylint.checkers.exceptionsr	   pylint.lintr
   BaseCheckerr   rF   r   r   r   <module>rN      s   
 ( ' " " " " " " % % % % % % % %              ! ! ! ! ! ! > > > > > > %$$$$$$@3 @3 @3 @3 @38#7 @3 @3 @3FB B B B B Br   