3
^^t                 @   s&   d dl Z d dlmZ G dd dZdS )    N)nodesc               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	ASTWalkerc             C   s(   d| _ tjt| _tjt| _|| _d S )Nr   )nbstatementscollectionsdefaultdictlistvisit_eventsleave_eventslinter)selfr
    r   9/tmp/pip-build-8app2_gc/pylint/pylint/utils/ast_walker.py__init__   s    zASTWalker.__init__c             C   s2   t |dsdS x|jD ]}| jj|rdS qW dS )Nchecks_msgsTF)hasattrr   r
   Zis_message_enabled)r   methodZmsg_descr   r   r   _is_method_enabled   s    
zASTWalker._is_method_enabledc             C   s   t  }t  }| j}| j}xt|D ]}|dd }|dkr<q"|jdrtt||}| j|r|| j| |j| q"|jdr"t||}	| j|	r"|| j|	 |j| q"W t|dd}
|
rx.t	j
D ]$}|jj }||kr|| j|
 qW dS )z=walk to the checker's dir and collect visit and leave methods   Ndefaultvisit_Zleave_visit_default)setr   r	   dir
startswithgetattrr   appendaddr   ZALL_NODE_CLASSES__name__lower)r   checkerZvcidsZlcidsZvisitsZleavesmembercidZv_methZl_methr   clsr   r   r   add_checker   s0    






zASTWalker.add_checkerc             C   s   |j jj }| jj|f }| jj|f }|jr<|  jd7  _x|pDf D ]}|| qFW x|j D ]}| j	| q`W x|pzf D ]}|| q|W dS )zvcall visit events of astroid checkers for the given node, recurse on
        its children, then leave events.
           N)
	__class__r   r   r   getr	   Zis_statementr   Zget_childrenwalk)r   astroidr!   r   r	   callbackchildr   r   r   r'   9   s    zASTWalker.walkN)r   
__module____qualname__r   r   r#   r'   r   r   r   r   r      s   r   )r   r(   r   r   r   r   r   r   <module>   s   