
    ee                        d dl 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	 d dl
mZ d dlmZ erd d	lmZ  G d
 de	      ZddZy)    )annotationsN)	TokenInfo)TYPE_CHECKING)nodes)BaseTokenChecker)only_required_for_messages)HIGH)PyLinterc                  f     e Zd ZdZdZddiZd fdZddZddZddZ	 e
d	      dd
       Z xZS )ElseifUsedCheckerz9Checks for use of "else if" when an "elif" could be used.else_if_usedR5501)zQConsider using "elif" instead of "else" then "if" to remove one indentation levelelse-if-usedzUsed when an else statement is immediately followed by an if statement and does not contain statements that would be unrelated to it.c                D    t         |   |       | j                          y N)super__init___init)selflinter	__class__s     >/usr/lib/python3/dist-packages/pylint/extensions/check_elif.pyr   zElseifUsedChecker.__init__#   s     

    c                    i | _         y r   _elifs)r   s    r   r   zElseifUsedChecker._init'   s	    57r   c           
     \    |D ci c]  \  }}}}}|dv s|| c}}}| _         yc c}}}w )z+Process tokens and look for 'if' or 'elif'.>   ifelifNr   )r   tokens_tokenbegins        r   process_tokensz ElseifUsedChecker.process_tokens*   s:     7=
 
2Qua@WE5L
 
s   ''c                $    | j                          y r   )r   )r   r!   s     r   leave_modulezElseifUsedChecker.leave_module0   s    

r   r   c                P   t        |j                  t        j                        r|j                  j                  |gk(  rg|j
                  |j                  f| j                  v rB| j                  |j
                  |j                  f   dk(  r| j                  d|t               yyyyy)z/Current if node must directly follow an 'else'.r   r   )node
confidenceN)

isinstanceparentr   Iforelselineno
col_offsetr   add_messager	   )r   r(   s     r   visit_ifzElseifUsedChecker.visit_if3   s     t{{EHH-""tf,doo.$++=T[[$//:;tC^$4H D > - .r   r   r
   returnNone)r3   r4   )r    zlist[TokenInfo]r3   r4   )r!   znodes.Moduler3   r4   )r(   znodes.Ifr3   r4   )__name__
__module____qualname____doc__namemsgsr   r   r$   r&   r   r1   __classcell__)r   s   @r   r   r      sI    CD 
D8
  /I 0Ir   r   c                8    | j                  t        |              y r   )register_checkerr   )r   s    r   registerr>   ?   s    
-f56r   r2   )
__future__r   tokenizer   typingr   astroidr   pylint.checkersr   pylint.checkers.utilsr   pylint.interfacesr	   pylint.lintr
   r   r>    r   r   <module>rH      s:   
 #      , < "$'I( 'IT7r   