U
    ËAš`¡  ã                   @   s:   d Z ddlmZmZ ddlmZmZ G dd„ dejƒZdS )z:
Optional fixer to transform set() calls to set literals.
é    )Ú
fixer_baseÚpytree)ÚtokenÚsymsc                   @   s    e Zd ZdZdZdZdd„ ZdS )ÚFixSetLiteralTaj  power< 'set' trailer< '('
                     (atom=atom< '[' (items=listmaker< any ((',' any)* [',']) >
                                |
                                single=any) ']' >
                     |
                     atom< '(' items=testlist_gexp< any ((',' any)* [',']) > ')' >
                     )
                     ')' > >
              c           	      C   sÊ   |  d¡}|r2t tj| ¡ g¡}| |¡ |}n|d }t tj	d¡g}| 
dd„ |jD ƒ¡ | t tjd¡¡ |jj|d _t tj|¡}|j|_t|jƒdkrÆ|jd	 }| ¡  |j|jd _|S )
NÚsingleÚitemsú{c                 s   s   | ]}|  ¡ V  qd S )N)Úclone)Ú.0Ún© r   ú3/usr/lib/python3.8/lib2to3/fixes/fix_set_literal.pyÚ	<genexpr>'   s     z*FixSetLiteral.transform.<locals>.<genexpr>ú}éÿÿÿÿé   é   )Úgetr   ZNoder   Z	listmakerr
   ÚreplaceZLeafr   ÚLBRACEÚextendZchildrenÚappendÚRBRACEZnext_siblingÚprefixZdictsetmakerÚlenÚremove)	ÚselfZnodeZresultsr   Zfaker   ÚliteralZmakerr   r   r   r   Ú	transform   s"    


zFixSetLiteral.transformN)Ú__name__Ú
__module__Ú__qualname__ZBM_compatibleZexplicitZPATTERNr   r   r   r   r   r      s   
r   N)	Ú__doc__Zlib2to3r   r   Zlib2to3.fixer_utilr   r   ZBaseFixr   r   r   r   r   Ú<module>   s   