3
^^	                 @   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)IAstroidCheckerITokenCheckerc               @   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*Consider using "elif" instead of "else if"else-if-usedUsed 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 j| | | j  d S )N)r   __init___init)selflinter r   >/tmp/pip-build-8app2_gc/pylint/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 jd q|dkr| j 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   | j   d S )N)r   )r   r   r   r   r   leave_module1   s    zElseifUsedChecker.leave_modulec             C   s$   t |jtjrd S |  jd7  _d S )N   )
isinstanceparentastroidFormattedValuer   )r   noder   r   r   visit_ifexp4   s    zElseifUsedChecker.visit_ifexpc             C   s   |  j t|j7  _ d S )N)r   lenZifs)r   r   r   r   r   visit_comprehension9   s    z%ElseifUsedChecker.visit_comprehensionc             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   )r   r   r   Iforelser   r   Zadd_message)r   r   r$   r   r   r   visit_if<   s    zElseifUsedChecker.visit_if)r   r   r	   )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   | j 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   registerG   s    r+   )
r   Zpylint.checkersr   Zpylint.checkers.utilsr   Zpylint.interfacesr   r   r   r+   r   r   r   r   <module>
   s
   6