
    c[                        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dS )    )annotationsN)	TokenInfo)TYPE_CHECKING)nodes)BaseTokenChecker)only_required_for_messages)HIGH)PyLinterc                  r     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.linterr
   returnNonec                r    t                                          |           |                                  d S N)super__init___init)selfr   	__class__s     <lib/python3.11/site-packages/pylint/extensions/check_elif.pyr   zElseifUsedChecker.__init__#   s,       

    c                    i | _         d S r   _elifs)r   s    r   r   zElseifUsedChecker._init'   s    57r   tokenslist[TokenInfo]c                (    d |D             | _         dS )z+Process tokens and look for 'if' or 'elif'.c                (    i | ]\  }}}}}|d v ||S )>   ifelif ).0_tokenbegins       r   
<dictcomp>z4ElseifUsedChecker.process_tokens.<locals>.<dictcomp>,   s>     
 
 
2Qua@W
5
 
 
r   Nr   )r   r   s     r   process_tokensz ElseifUsedChecker.process_tokens*   s&    
 
6<
 
 
r   r'   nodes.Modulec                .    |                                   d S r   )r   )r   r'   s     r   leave_modulezElseifUsedChecker.leave_module0   s    

r   r   nodenodes.Ifc                   t          |j        t          j                  rb|j        j        |gk    rS|j        |j        f| j        v r@| j        |j        |j        f         dk    r%|                     d|t                     dS dS dS dS dS )z/Current if node must directly follow an 'else'.r#   r   )r/   
confidenceN)

isinstanceparentr   Iforelselineno
col_offsetr   add_messager	   )r   r/   s     r   visit_ifzElseifUsedChecker.visit_if3   s     t{EH--	I"tf,	I do.$+=	I T[$/:;tC		I ^$4HHHHH	I 	I 	I 	I 	I 	I 	I 	Ir   r   r
   r   r   )r   r   )r   r    r   r   )r'   r,   r   r   )r/   r0   r   r   )__name__
__module____qualname____doc__namemsgsr   r   r+   r.   r   r:   __classcell__)r   s   @r   r   r      s        CCD 
D     8 8 8 8
 
 
 
     //I I I 0/I I I I Ir   r   r   r
   r   r   c                J    |                      t          |                      d S r   )register_checkerr   )r   s    r   registerrE   ?   s%    
-f5566666r   r;   )
__future__r   tokenizer   typingr   astroidr   pylint.checkersr   pylint.checkers.utilsr   pylint.interfacesr	   pylint.lintr
   r   rE   r%   r   r   <module>rN      s   
 # " " " " "                          , , , , , , < < < < < < " " " " " " %$$$$$$'I 'I 'I 'I 'I( 'I 'I 'IT7 7 7 7 7 7r   