
    yIf                        d 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  G d d	ej                  ZddZdS )zPOptional checker to warn when loop variables are overwritten in the loop's body.    )annotations)nodes)checkers)utils)HIGH)PyLinterc                       e Zd ZdZddiZd fdZ ej        d          dd            Z ej        d          dd            Z	 ej        d          dd            Z
 xZS )RedefinedLoopNameCheckerredefined-loop-nameW2901)z!Redefining %r from loop (line %s)r   z:Used when a loop variable is overwritten in the loop body.linterr   returnNonec                X    t                                          |           g | _        d S N)super__init___loop_variables)selfr   	__class__s     Y/var/www/piapp/venv/lib/python3.11/site-packages/pylint/extensions/redefined_loop_name.pyr   z!RedefinedLoopNameChecker.__init__   s.         	    nodenodes.AssignNamec                b   |                                 }t          |t          j        t          j        f          sd S |                                }| j        D ]V\  }}}||ur|j        |v rBt          j	        ||          s-| 
                    d|j        |j        f|t                      d S Wd S )Nr   argsr   
confidence)assign_type
isinstancer   Assign	AugAssignscoper   namer   in_for_else_branchadd_message
fromlinenor   )r   r   r   
node_scope	outer_forouter_variablesouter_for_scopes          r   visit_assignnamez)RedefinedLoopNameChecker.visit_assignname"   s    &&((+eo'FGG 	FZZ\\
;?;O 	 	7I00yO++E4L45 5+   ))Y%9:#	 !    	 	r   	nodes.Forc                    d |j                             t          j                  D             } fd|D             }|                                }|D ]U} j        D ]K\  }}}||ur||v r<t          j        ||          s'                     d||j	        f|t                      nLV j                            |||                                f           d S )Nc                    g | ]	}|j         
S  )r$   ).0as     r   
<listcomp>z6RedefinedLoopNameChecker.visit_for.<locals>.<listcomp>8   s    TTT!qvTTTr   c                \    g | ](}j         j        j                            |          &|)S r0   )r   configdummy_variables_rgxmatch)r1   varr   s     r   r3   z6RedefinedLoopNameChecker.visit_for.<locals>.<listcomp>:   sE     
 
 
;%9??DD

 
 
r   r   r   )targetnodes_of_classr   
AssignNamer#   r   r   r%   r&   r'   r   append)r   r   assigned_tor(   variabler)   r*   r+   s   `       r   	visit_forz"RedefinedLoopNameChecker.visit_for6   s    TTt{'A'A%BR'S'STTT
 
 
 
"
 
 
 ZZ\\
# 	 	H?C?S  ;	?O_44..u7Ot8 8. $$-&	(<=!#'	 %    E##T;

$EFFFFFr   c                8    | j                                          d S r   )r   pop)r   r   s     r   	leave_forz"RedefinedLoopNameChecker.leave_forR   s      """""r   r   r   r   r   )r   r   r   r   )r   r-   r   r   )__name__
__module____qualname__r$   msgsr   r   only_required_for_messagesr,   r?   rB   __classcell__)r   s   @r   r
   r
      s         D 	 
D      &U%&;<<   =<& &U%&;<<G G G =<G6 &U%&;<<# # # =<# # # # #r   r
   r   r   r   r   c                J    |                      t          |                      d S r   )register_checkerr
   )r   s    r   registerrL   W   s%    
4V<<=====r   NrC   )__doc__
__future__r   astroidr   pylintr   pylint.checkersr   pylint.interfacesr   pylint.lintr   BaseCheckerr
   rL   r0   r   r   <module>rU      s   
 W V " " " " " "             ! ! ! ! ! ! " " " " " "            C# C# C# C# C#x3 C# C# C#L> > > > > >r   