
    e
                        d Z ddlmZ ddlmZmZ ddlZddlmZ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y)z!Looks for overlapping exceptions.    )annotations)TYPE_CHECKINGAnyN)nodesutil)checkers)utils)_annotated_unpack_infer)PyLinterc                  R    e Zd ZdZdZddiZdZ ej                  d      d	d       Z	y)
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   c                P   |j                   D ]  }|j                  t        |j                  t        j                        r6	 t        t        |j                              }g }|D ]  \  }}t        |t        j                        r"t        |t        j                        r!t        j                  |      r|j                  }t        |t        j                        sx|j                         D cg c]  }t        |t        j                        s|! }}|D ]  \  }	}
|
j                         D cg c]  }t        |t        j                        r|  }}||
k(  rA| j!                  d|j                  |	j#                          d|j#                          d       |
|v s||v s||v r|n|	}|
|v r|n|	}| j!                  d|j                  |j#                          d|j#                                  |||fgz  }  y# t        j                  $ r Y w xY wc c}w c c}w )zCheck for empty except.Nr   z and z are the same)nodeargsz is an ancestor class of )handlerstype
isinstanceastroidBoolOplistr
   InferenceErrorr   UninferableBaseInstancer	   inherit_from_std_ex_proxiedClassDef	ancestorsadd_message	as_string)selfr   handlerexcshandled_in_clausepartexcancexc_ancestors	prev_partprev_excprev_exc_ancestorsancestor
descendants                 J/usr/lib/python3/dist-packages/pylint/extensions/overlapping_exceptions.py	visit_tryz&OverlappingExceptionsChecker.visit_try'   s*    }} ,	3G||#',,73GLLAB 8:! !3	cc4#7#78c7#3#349R9RSV9W,,C!#w'7'78 $'==?!jgFVFV6WC! ! ,= 'Ix $,#5#5#7*%c7+;+;< *& *
 h((0!($-$7$7$9#:%@P?QQ^!_ ) 
 "]2c=O6O+.2D+D4)-5-FTI
((0!($,$6$6$8#99RS]SgSgSiRj!k ) ( "tSk]2!C!3,	3 )) !
*s$   H0HH0#H#
HHN)r   z	nodes.TryreturnNone)
__name__
__module____qualname____doc__namemsgsoptionsr	   only_required_for_messagesr1   r       r0   r   r      sD     D 
D G%U%%&:;.3 <.3r<   r   c                8    | j                  t        |              y )N)register_checkerr   )linters    r0   registerr@   Y   s    
8@Ar<   )r?   r   r2   r3   )r7   
__future__r   typingr   r   r   r   r   pylintr   pylint.checkersr	   pylint.checkers.exceptionsr
   pylint.lintr   BaseCheckerr   r@   r   r<   r0   <module>rH      s@   
 ( " %    ! >$@38#7#7 @3FBr<   