B
    A!p\k	                 @   sL   d dl Z d dlmZ d dlmZ d dlmZmZ G dd deZdd Z	dS )	    N)BaseTokenChecker)check_messages)ITokenCheckerIAstroidCheckerc               @   sf   e Zd ZdZeefZdZddiZdddZ	dd	 Z
d
d Zdd Zdd Zdd Zeddd ZdS )ElseifUsedCheckerz=Checks for use of "else if" when an "elif" could be used
    Zelse_if_usedZR5501)z*Consider using "elif" instead of "else if"z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.Nc             C   s   t | | |   d S )N)r   __init___init)selflinter r   ;lib/python3.7/site-packages/pylint/extensions/check_elif.pyr       s    zElseifUsedChecker.__init__c             C   s   g | _ d| _d S )Nr   )_elifs_if_counter)r	   r   r   r   r   $   s    zElseifUsedChecker._initc             C   sF   x@|D ]8\}}}}}|dkr*| j d q|dkr| j d qW d S )NelifTifF)r   append)r	   tokens_tokenr   r   r   process_tokens(   s
    z ElseifUsedChecker.process_tokensc             C   s   |    d S )N)r   )r	   r   r   r   r   leave_module0   s    zElseifUsedChecker.leave_modulec             C   s   |  j d7  _ d S )N   )r   )r	   r   r   r   r   visit_ifexp3   s    zElseifUsedChecker.visit_ifexpc             C   s   |  j t|j7  _ d S )N)r   lenZifs)r	   noder   r   r   visit_comprehension6   s    z%ElseifUsedChecker.visit_comprehensionzelse-if-usedc             C   sP   t |jtjr>|jj}|r>||gkr>| j| j s>| jd|d |  jd7  _d S )Nzelse-if-used)r   r   )
isinstanceparentastroidZIforelser   r   Zadd_message)r	   r   r   r   r   r   visit_if9   s    zElseifUsedChecker.visit_if)N)__name__
__module____qualname____doc__r   r   Z__implements__nameZmsgsr   r   r   r   r   r   r   r    r   r   r   r   r      s   
r   c             C   s   |  t|  dS )zRequired method to auto register this checker.

    :param linter: Main interface object for Pylint plugins
    :type linter: Pylint object
    N)Zregister_checkerr   )r
   r   r   r   registerD   s    r&   )
r   Zpylint.checkersr   Zpylint.checkers.utilsr   Zpylint.interfacesr   r   r   r&   r   r   r   r   <module>
   s
   4