o
    ?HhV                     @   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__ _/home/air/sanwanet/gpt-api/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    >