o
     JAf                      @   st   	 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   s|   	 | j D ]7}|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   2/usr/lib/python3.10/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! nqtdttjg }| j |d d  rP| j |d  }|	|
  |  | j |d d  s5| 	| |}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 nqd S |  ttjg }ttj	|g}|j|d  rD|j| }|
|  |  |j|d  s-| || |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   s2   | j r| j d jtjkr| j d   d S d S 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 nqtdtt|j D ]:\}}|jtjkrT|j rT|j d }|jtjkrT|j rT|j d }t	|t
rT|jdkrTt||| t| |||fV  qd 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   s   	 | j d d d }|r| }|jtjkrn|s|r@| }t|tr1|jtjkr1|jr/d|_d S |	|j d d d  |sd S 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   s@  t |sd S t| d }t|D ]\}}}|}|  q|jd j}t|jdkrM|jd jtjkr8|jd }nU|jd 	 }	t
tj|	g}|d| n@t|jdkrat
tjg }|d| n,t|jdkrt
tjg }|dttjd |d| |dttjd ntd	|jd jd }
d
|
_|
j}|jr|ttjd d|
_nd|
_|jd }d|jd _d|jd _|| t| |js|  t|d}||_|| |ttjd d S t|jdkr|jd jtjkr|jd jtjkrt|d}|d| |dttjd d S d S d S 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   sd   





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    