o
    ,º]g  ã                   @   s†   d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
mZmZ dZdZdZdZd	d
„ Zefdd„Zefdd„ZG dd„ dejƒZdS )zg
Fixer for Python 3 function parameter syntax
This fixer is rather sensitive to incorrect py3k syntax.
é    )Ú
fixer_base)ÚtokenÚStringÚNewlineÚCommaÚName)ÚindentationÚsuitifyÚ
DoubleStarz=%(name)s = %(kwargs)s['%(name)s']; del %(kwargs)s['%(name)s']z'if '%(name)s' in %(kwargs)s: %(assign)szelse: %(name)s = %(default)sÚ_3to2kwargsc                 c   sÈ   � | d j tjkrt| ƒdksJ ‚d}t| ƒ}||k rb| | }|j}|j tjkr-|d7 }q|dur9|j tjkr9dS |j}|j}|durQ|j tj	krQ|j}|d7 }nd}||fV  |d7 }||k sdS dS )zº
    Generator that yields tuples of (name, default_value) for each parameter in the list
    If no default is given, then it is default_value is None (not Leaf(token.NAME, 'None'))
    r   é   é   N)
Útyper   ÚSTARÚlenÚprev_siblingÚNAMEÚ
DOUBLESTARÚvalueÚnext_siblingÚEQUAL)Ú
raw_paramsÚcurr_idxÚmax_idxÚ	curr_itemÚ	prev_itemÚnameÚnxtÚdefault_value© r   ú[/var/www/html/myproject/venv/lib/python3.10/site-packages/libpasteurize/fixes/fix_kwargs.pyÚ
gen_params   s*   € 

ðr!   c                 C   s~   | d j tjks
J ‚| d j tjkr%| d  ¡  | d  ¡  | dd… }n| dd… }|D ]}|j tjkr:| ¡  q- dS dS )zî
    Removes all keyword-only args from the params list and a bare star, if any.
    Does not add the kwargs dict if needed.
    Returns True if more action is needed, False if not
    (more action is needed if no kwargs dict exists)
    r   r   r   Né   FT)r   r   r   ÚCOMMAÚremover   )r   Úkwargs_defaultÚ	kw_paramsÚparamr   r   r    Úremove_params+   s   
r(   c                 C   s€   d}d}| dd… D ]/}|j tjkrq
|j tjkr|sd}q
|j tjkr1|r1|r-|j  S d  S |j tjkr9d}q
|r>|S dS )z‹
    Returns string with the name of the kwargs dict if the params after the first star need fixing
    Otherwise returns empty string
    Fr   NTÚ )r   r   r#   r   r   r   )r   r%   Úfound_kwargsÚ	needs_fixÚtr   r   r    Úneeds_fixingA   s   €r-   c                   @   s   e Zd ZdZdZdd„ ZdS )Ú	FixKwargsé   z^funcdef< 'def' NAME parameters< '(' arglist=typedargslist< params=any* > ')' > ':' suite=any >c              
   C   s’  |d }t |ƒD ]\}}|jtjkr||d … } nqd S t|ƒ}|s%d S t|ƒ |jd }|jd }t|ƒ}	t|ƒD ]Q\}
}|d u rZ| 	dt
ƒ ¡ | 	dtt|
|dœ |	d�¡ q;| 	dt
ƒ ¡ | 	dtt|
|dœ |	d�¡ | 	dt
ƒ ¡ | 	dttt|
|dœ |
|dœ |	d�¡ q;|	|_d|jd _t|ƒ}|rÇ|d	 }t|jƒd
kr¶|jd jtjkr¶| tƒ ¡ | tdd�¡ | t|ƒ¡ d S d S )NÚparamsé   r   )r   Úkwargs)Úprefix)r   Údefault)Úassignr   r2   r)   Úarglistr   éÿÿÿÿú )Ú	enumerater   r   r   r-   r	   Úchildrenr   r!   Úinsert_childr   r   Ú_assign_templateÚ_else_templateÚ_if_templater3   r(   r   r#   Úappend_childr   r
   r   )ÚselfÚnodeÚresultsÚparams_rawlistÚiÚitemÚ
new_kwargsÚsuiteÚ
first_stmtÚidentr   r   Úmust_add_kwargsr6   r   r   r    Ú	transform`   s@   þ

 , ûzFixKwargs.transformN)Ú__name__Ú
__module__Ú__qualname__Ú	run_orderÚPATTERNrK   r   r   r   r    r.   Z   s    r.   N)Ú__doc__Úlib2to3r   Úlib2to3.fixer_utilr   r   r   r   r   Úlibfuturize.fixer_utilr   r	   r
   r<   r>   r=   Ú_kwargs_default_namer!   r(   r-   ÚBaseFixr.   r   r   r   r    Ú<module>   s    