
    c                        d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ e	rd dlmZ d dlmZ e
ej        gdf         Z G d	 d
          ZdS )    )annotationsN)defaultdict)Sequence)TYPE_CHECKINGCallable)nodes)BaseChecker)PyLinterc                  .    e Zd ZddZdd	ZddZddZdS )	ASTWalkerlinterr
   returnNonec                    d| _         t          t                    | _        t          t                    | _        || _        d| _        d S )Nr   F)nbstatementsr   listvisit_eventsleave_eventsr   exception_msg)selfr   s     7lib/python3.11/site-packages/pylint/utils/ast_walker.py__init__zASTWalker.__init__   s?    ALTARARALTARAR"    methodAstCallbackboolc                h     t          |d          sdS t           fd|j        D                       S )Nchecks_msgsTc              3  L   K   | ]}j                             |          V  d S )N)r   is_message_enabled).0mr   s     r   	<genexpr>z/ASTWalker._is_method_enabled.<locals>.<genexpr>(   s3      QQ4;11!44QQQQQQr   )hasattranyr   )r   r   s   ` r   _is_method_enabledzASTWalker._is_method_enabled%   s@    v}-- 	4QQQQf>PQQQQQQr   checkerr	   c                   t                      }t                      }| j        }| j        }t          |          D ]}|dd         }|dk    r|                    d          rVt          ||          }|                     |          r0||                             |           |                    |           ~|                    d          rUt          ||          }	|                     |	          r0||                             |	           |                    |           t          |dd          }
|
rGt          j
        D ]<}|j                                        }||vr||                             |
           ;dS dS )z>Walk to the checker's dir and collect visit and leave methods.   Ndefaultvisit_leave_visit_default)setr   r   dir
startswithgetattrr&   appendaddr   ALL_NODE_CLASSES__name__lower)r   r'   vcidslcidsvisitsleavesmembercidv_methl_methr-   clss               r   add_checkerzASTWalker.add_checker*   s   %%%%""'ll 	# 	#F*Ci   ** # &11**622 #3K&&v...IIcNNN""8,, # &11**622 #3K&&v...IIcNNN$?? 	6- 6 6l((**e# 63K&&}555		6 	66 6r   astroidnodes.NodeNGc                ~   |j         j                                        }| j                            |d          }| j                            |d          }	 |j        r| xj        dz  c_        |D ]} ||           |                                D ]}| 	                    |           |D ]} ||           dS # t          $ rw | j        du rlt          |                                dd          }t          dt          |           d| dt           j        	           t%          j                     d
| _         w xY w)zvCall visit events of astroid checkers for the given node, recurse on
        its children, then leave events.
            FfileNzException on node z
 in file '')rF   T)	__class__r5   r6   r   getr   is_statementr   get_childrenwalk	Exceptionr   r1   rootprintreprsysstderr	traceback	print_exc)r   rA   r<   r   r   callbackchildrF   s           r   rL   zASTWalker.walkH   s    (..00 /3.?.C.CC.L.L.2.?.C.CC.L.L	# '!!Q&!!( " "!!!! --// ! !		%    ( " "!!!!" " 		 		 		!U* *w||~~vt<<IgII$III    #%%%%)"		s   A#B; ;BD<N)r   r
   r   r   )r   r   r   r   )r'   r	   r   r   )rA   rB   r   r   )r5   
__module____qualname__r   r&   r@   rL   rD   r   r   r   r      sh        # # # #R R R R
6 6 6 6<" " " " " "r   r   )
__future__r   rQ   rS   collectionsr   collections.abcr   typingr   r   rA   r   pylint.checkers.base_checkerr	   pylint.lintr
   NodeNGr   r   rD   r   r   <module>r`      s   
 # " " " " " 



     # # # # # # $ $ $ $ $ $ * * * * * * * *       %888888$$$$$$ ~t+,N N N N N N N N N Nr   