o
    ,º]V  ã                   @   sn   d Z ddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ dZG dd„ dejƒZd	d
„ Zdd„ Zdd„ ZdS )a  
Based on fix_next.py by Collin Winter.

Replaces it.next() -> next(it), per PEP 3114.

Unlike fix_next.py, this fixer doesn't replace the name of a next method with __next__,
which would break Python 2 compatibility without further help from fixers in
stage 2.
é    )Útoken)Úpython_symbols)Ú
fixer_base)ÚNameÚCallÚfind_bindingz;Calls to builtin next() possibly shadowed by global bindingc                       s0   e Zd ZdZdZdZ‡ fdd„Zdd„ Z‡  ZS )ÚFixNextCallTzÓ
    power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > >
    |
    power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > >
    |
    global=global_stmt< 'global' any* 'next' any* >
    Úprec                    s@   t t| ƒ ||¡ td|ƒ}|r|  |t¡ d| _d S d| _d S )NÚnextTF)Úsuperr   Ú
start_treer   ÚwarningÚbind_warningÚshadowed_next)ÚselfÚtreeÚfilenameÚn©Ú	__class__© ú\/var/www/html/myproject/venv/lib/python3.10/site-packages/libfuturize/fixes/fix_next_call.pyr       s   


zFixNextCall.start_treec                 C   sØ   |sJ ‚|  d¡}|  d¡}|  d¡}|r5| jrd S dd„ |D ƒ}d|d _| ttd|jd	�|ƒ¡ d S |r9d S |r[t|ƒrY|d
 }d dd„ |D ƒ¡ ¡ dkrW|  	|t
¡ d S d S d|v rj|  	|t
¡ d| _d S d S )NÚbaseÚattrÚnamec                 S   s   g | ]}|  ¡ ‘qS r   )Úclone©Ú.0r   r   r   r   Ú
<listcomp>7   ó    z)FixNextCall.transform.<locals>.<listcomp>Ú r   r
   )ÚprefixÚheadc                 S   s   g | ]}t |ƒ‘qS r   )Ústrr   r   r   r   r   E   r   Ú__builtin__ÚglobalT)Úgetr   r!   Úreplacer   r   Úis_assign_targetÚjoinÚstripr   r   )r   ÚnodeÚresultsr   r   r   r"   r   r   r   Ú	transform*   s.   



ü
þzFixNextCall.transform)	Ú__name__Ú
__module__Ú__qualname__ÚBM_compatibleÚPATTERNÚorderr   r-   Ú__classcell__r   r   r   r   r      s    
r   c                 C   sF   t | ƒ}|d u r
dS |jD ]}|jtjkr dS t|| ƒr  dS qdS )NFT)Úfind_assignÚchildrenÚtyper   ÚEQUALÚ
is_subtree)r+   ÚassignÚchildr   r   r   r(   R   s   

ÿr(   c                 C   s4   | j tjkr| S | j tjks| jd u rd S t| jƒS ©N)r7   ÚsymsÚ	expr_stmtÚsimple_stmtÚparentr5   ©r+   r   r   r   r5   ^   s
   
r5   c                    s$   | ˆ krdS t ‡ fdd„| jD ƒƒS )NTc                 3   s   � | ]}t |ˆ ƒV  qd S r<   )r9   )r   ÚcrA   r   r   Ú	<genexpr>h   s   € zis_subtree.<locals>.<genexpr>)Úanyr6   )Úrootr+   r   rA   r   r9   e   s   r9   N)Ú__doc__Úlib2to3.pgen2r   Úlib2to3.pygramr   r=   Úlib2to3r   Úlib2to3.fixer_utilr   r   r   r   ÚBaseFixr   r(   r5   r9   r   r   r   r   Ú<module>   s    >