a
    ze                      @   sr   d dl mZ d dlmZ d dlmZmZmZ dd Zdd Z	dd	 Z
d
d Zdd Zdd ZG dd dejZdS )   )
fixer_base)token)symsNodeLeafc                 C   sz   | j D ]n}|jtjkr"t|  S |jtjkr|j r|j d }|jtjkr|j r|j d }t|tr|j	dkr dS qdS )N    __metaclass__TF)
childrentyper   suitehas_metaclasssimple_stmt	expr_stmt
isinstancer   value)parentnode	expr_nodeZ	left_side r   1/usr/lib/python3.9/lib2to3/fixes/fix_metaclass.pyr      s    



r   c                 C   s   | j D ]}|jtjkr d S qt| j D ]\}}|jtjkr( qJq(tdttjg }| j |d d  r| j |d  }|	|
  |  qV| 	| |}d S )NzNo class suite and no ':'!   )r	   r
   r   r   	enumerater   COLON
ValueErrorr   append_childcloneremove)cls_noder   ir   	move_noder   r   r   fixup_parse_tree-   s    


r    c           
      C   s   t |jD ]\}}|jtjkr
 q(q
d S |  ttjg }ttj	|g}|j|d  rz|j| }|
|  |  qJ| || |jd jd }|jd jd }	|	j|_d S )Nr   )r   r	   r
   r   SEMIr   r   r   r   r   r   r   insert_childprefix)
r   r   Z	stmt_nodeZsemi_indr   Znew_exprZnew_stmtr   Z	new_leaf1Z	old_leaf1r   r   r   fixup_simple_stmtG   s    

r$   c                 C   s*   | j r&| j d jtjkr&| j d   d S )N)r	   r
   r   NEWLINEr   )r   r   r   r   remove_trailing_newline_   s    r'   c                 c   s   | j D ]}|jtjkr q$qtdtt|j D ]t\}}|jtjkr2|j r2|j d }|jtjkr2|j r2|j d }t	|t
r2|jdkr2t||| t| |||fV  q2d S )NzNo class suite!r   r   )r	   r
   r   r   r   listr   r   r   r   r   r   r$   r'   )r   r   r   Zsimple_noder   Z	left_noder   r   r   
find_metasd   s    



r)   c                 C   sz   | j d d d }|r,| }|jtjkrq,q|rv| }t|tr^|jtjkr^|jrZd|_d S |	|j d d d  q,d S )Nr%    )
r	   popr
   r   INDENTr   r   DEDENTr#   extend)r   Zkidsr   r   r   r   fixup_indent{   s    r/   c                   @   s   e Zd ZdZdZdd ZdS )FixMetaclassTz
    classdef<any*>
    c                 C   s8  t |sd S t| d }t|D ]\}}}|}|  q |jd j}t|jdkr|jd jtjkrp|jd }n(|jd 	 }	t
tj|	g}|d| nt|jdkrt
tjg }|d| nZt|jdkrt
tjg }|dttjd |d| |dttjd ntd	|jd jd }
d
|
_|
j}|jrZ|ttjd d|
_nd|
_|jd }d|jd _d|jd _|| t| |js|  t|d}||_|| |ttjd nbt|jdkr4|jd jtjkr4|jd jtjkr4t|d}|d| |dttjd d S )Nr               r   )(zUnexpected class definition	metaclass, r*   r   pass
r%   )r   r    r)   r   r	   r
   lenr   arglistr   r   Z	set_childr"   r   r   RPARLPARr   r   r#   r   COMMAr/   r&   r,   r-   )selfr   resultsZlast_metaclassr   r   ZstmtZ	text_typer>   r   Zmeta_txtZorig_meta_prefixr   Z	pass_leafr   r   r   	transform   sb    





zFixMetaclass.transformN)__name__
__module____qualname__ZBM_compatibleZPATTERNrD   r   r   r   r   r0      s   r0   N)r*   r   Zpygramr   Z
fixer_utilr   r   r   r   r    r$   r'   r)   r/   ZBaseFixr0   r   r   r   r   <module>   s   