
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,ak  ã                   @   s
  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZmZ ddlmZ ddlmZmZ ddlmZ d d
d„ZG dd„ deƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!dS )!z#Guido van Rossum <guido@python.org>é    N)Úchainé   )ÚdriverÚtokenizeÚtoken)Ú	find_root)ÚpytreeÚpygram)Úbtm_matcherTc                 C   sT   t | g g dgƒ}g }t |j¡D ].\}}}| d¡r |rD|dd … }| |¡ q |S )NÚ*Úfix_é   )Ú
__import__ÚpkgutilZiter_modulesÚ__path__Ú
startswithÚappend)Z	fixer_pkgZremove_prefixZpkgZ	fix_namesÚfinderÚnameZispkg© r   ú5/opt/alt/python38/lib64/python3.8/lib2to3/refactor.pyÚget_all_fix_names   s    
r   c                   @   s   e Zd ZdS )Ú
_EveryNodeN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   +   s   r   c                 C   s’   t | tjtjfƒr(| jd kr t‚| jhS t | tjƒrH| jrDt| jƒS t‚t | tj	ƒr‚t
ƒ }| jD ]}|D ]}| t|ƒ¡ qhq`|S td|  ƒ‚d S )Nz$Oh no! I don't understand pattern %s)Ú
isinstancer   ZNodePatternZLeafPatternÚtyper   ZNegatedPatternZcontentÚ_get_head_typesZWildcardPatternÚsetÚupdateÚ	Exception)ZpatÚrÚpÚxr   r   r   r   /   s    


r   c              	   C   s¾   t  t¡}g }| D ]x}|jrdzt|jƒ}W n tk
rH   | |¡ Y qŠX |D ]}||  |¡ qNq|jd k	r€||j  |¡ q| |¡ qtt	j
j ¡ t	j
jƒD ]}||  |¡ q¢t|ƒS ©N)ÚcollectionsÚdefaultdictÚlistÚpatternr   r   r   Z_accept_typer   r	   Úpython_grammarZsymbol2numberÚvaluesÚtokensÚextendÚdict)Z
fixer_listZ
head_nodesZeveryÚfixerZheadsZ	node_typer   r   r   Ú_get_headnode_dictK   s$    

ÿr1   c                    s   ‡ fdd„t ˆ dƒD ƒS )Nc                    s   g | ]}ˆ d  | ‘qS ©Ú.r   )Ú.0Úfix_name©Zpkg_namer   r   Ú
<listcomp>h   s   ÿz+get_fixers_from_package.<locals>.<listcomp>F)r   r6   r   r6   r   Úget_fixers_from_packaged   s    
ÿr8   c                 C   s   | S r&   r   )Úobjr   r   r   Ú	_identityk   s    r:   c                    sX  d}t  t | ¡j¡‰ ‡ fdd„}ttjt jtj	hƒ}t
ƒ }zü|ƒ \}}||krTq>q>|tjkrl|rf�q6d}q>|tjk�r6|dk�r6|ƒ \}}|tjksž|dkr¢�q6|ƒ \}}|tjks¾|dkrÂ�q6|ƒ \}}|tjkrè|dkrè|ƒ \}}|tjk�r4| |¡ |ƒ \}}|tjk�s.|d	k�r"�q4|ƒ \}}qèq>�q6q>W n tk
�rN   Y nX t|ƒS )
NFc                     s   t ˆ ƒ} | d | d fS )Nr   r   )Únext)Útok©Úgenr   r   Úadvancer   s    z(_detect_future_features.<locals>.advanceTÚfromZ
__future__Úimportú(ú,)r   Úgenerate_tokensÚioÚStringIOÚreadlineÚ	frozensetr   ÚNEWLINEÚNLÚCOMMENTr    ÚSTRINGÚNAMEÚOPÚaddÚStopIteration)ÚsourceZhave_docstringr?   ÚignoreÚfeaturesÚtpÚvaluer   r=   r   Ú_detect_future_featureso   sB    








rV   c                   @   s   e Zd ZdS )Ú
FixerErrorNr   r   r   r   r   rW   —   s   rW   c                   @   sä   e Zd ZdddœZdZdZd4dd„Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zd5dd„Zd6dd„Zdd„ Zd7dd„Zdd„ Zd8dd„Zdd„ Zd d!„ Zd9d"d#„Zd:d$d%„Zd&Zd'Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ ZdS );ÚRefactoringToolF)Úprint_functionÚwrite_unchanged_filesZFixr   Nc                 C   s.  || _ |pg | _| j ¡ | _|d k	r0| j |¡ | jd rDtj| _ntj	| _| j 
d¡| _g | _t d¡| _g | _d| _tj| jtj| jd�| _|  ¡ \| _| _g | _t ¡ | _g | _g | _t| j| jƒD ]F}|j râ| j !|¡ qÊ|| jkrú| j "|¡ qÊ|| jkrÊ| j "|¡ qÊt#| jƒ| _$t#| jƒ| _%d S )NrY   rZ   rX   F)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr!   r	   Ú!python_grammar_no_print_statementÚgrammarr+   ÚgetrZ   ÚerrorsÚloggingZ	getLoggerr\   Ú	fixer_logÚwroter   ZDriverr   r[   Ú
get_fixersÚ	pre_orderÚ
post_orderÚfilesÚbmZBottomMatcherÚBMZbmi_pre_orderZbmi_post_orderr   ZBM_compatibleZ	add_fixerr   r1   Úbmi_pre_order_headsÚbmi_post_order_heads)ÚselfZfixer_namesra   r^   r0   r   r   r   Ú__init__£   s>    


þ


zRefactoringTool.__init__c              	   C   sX  g }g }| j D �]}t|i i dgƒ}| dd¡d }| | j¡rR|t| jƒd … }| d¡}| jd dd„ |D ƒ¡ }zt	||ƒ}W n& t
k
rª   td	||f ƒd ‚Y nX || j| jƒ}	|	jrâ| jd
k	râ|| jkrâ|  d|¡ q|  d|¡ |	jdk�r| |	¡ q|	jdk�r| |	¡ qtd|	j ƒ‚qt d¡}
|j|
d� |j|
d� ||fS )Nr   r3   r   éÿÿÿÿÚ_Ú c                 S   s   g | ]}|  ¡ ‘qS r   )Útitle)r4   r$   r   r   r   r7   ç   s     z.RefactoringTool.get_fixers.<locals>.<listcomp>zCan't find %s.%sTzSkipping optional fixer: %szAdding transformation: %sZpreZpostzIllegal fixer order: %rZ	run_order©Úkey)r]   r   Úrsplitr   ÚFILE_PREFIXÚlenÚsplitÚCLASS_PREFIXÚjoinÚgetattrÚAttributeErrorrW   ra   rg   r^   Úlog_messageÚ	log_debugÚorderr   ÚoperatorÚ
attrgetterÚsort)rq   Zpre_order_fixersZpost_order_fixersZfix_mod_pathÚmodr5   ÚpartsÚ
class_nameZ	fix_classr0   Zkey_funcr   r   r   ri   ×   s:    
ÿ
zRefactoringTool.get_fixersc                  O   s   ‚ d S r&   r   )rq   ÚmsgÚargsÚkwdsr   r   r   Ú	log_errorÿ   s    zRefactoringTool.log_errorc                 G   s   |r|| }| j  |¡ d S r&   )r\   Úinfo©rq   rŠ   r‹   r   r   r   r�     s    zRefactoringTool.log_messagec                 G   s   |r|| }| j  |¡ d S r&   )r\   Údebugr�   r   r   r   r‚   	  s    zRefactoringTool.log_debugc                 C   s   d S r&   r   )rq   Úold_textÚnew_textÚfilenameÚequalr   r   r   Úprint_output  s    zRefactoringTool.print_outputc                 C   s8   |D ].}t j |¡r$|  |||¡ q|  |||¡ qd S r&   )ÚosÚpathÚisdirÚrefactor_dirÚrefactor_file)rq   ÚitemsÚwriteÚdoctests_onlyZdir_or_filer   r   r   Úrefactor  s    zRefactoringTool.refactorc           
      C   sš   t jd }t  |¡D ]€\}}}|  d|¡ | ¡  | ¡  |D ]>}| d¡s>t j |¡d |kr>t j ||¡}	|  	|	||¡ q>dd„ |D ƒ|d d …< qd S )NÚpyzDescending into %sr3   r   c                 S   s   g | ]}|  d ¡s|‘qS r2   )r   )r4   Zdnr   r   r   r7   .  s     
 z0RefactoringTool.refactor_dir.<locals>.<listcomp>)
r–   ÚextsepÚwalkr‚   r†   r   r—   Úsplitextr~   rš   )
rq   Zdir_namerœ   r�   Zpy_extÚdirpathZdirnamesÚ	filenamesr   Úfullnamer   r   r   r™     s    

ÿzRefactoringTool.refactor_dirc              
   C   sœ   zt |dƒ}W n6 tk
rD } z|  d||¡ W Y ¢dS d }~X Y nX zt |j¡d }W 5 | ¡  X tj |d|dd��}| ¡ |fW  5 Q R £ S Q R X d S )NÚrbzCan't open %s: %s)NNr   r#   ru   ©ÚencodingÚnewline)	ÚopenÚOSErrorr�   Úcloser   Údetect_encodingrG   rE   Úread)rq   r“   ÚfÚerrr¨   r   r   r   Ú_read_python_source0  s    
z#RefactoringTool._read_python_sourcec                 C   sº   |   |¡\}}|d krd S |d7 }|rn|  d|¡ |  ||¡}| jsL||kr`|  |||||¡ q¶|  d|¡ nH|  ||¡}| jsŠ|rª|jrª| jt|ƒd d… |||d� n|  d|¡ d S )NÚ
zRefactoring doctests in %szNo doctest changes in %srs   )rœ   r¨   zNo changes in %s)r±   r‚   Úrefactor_docstringrZ   Úprocessed_fileÚrefactor_stringÚwas_changedÚstr)rq   r“   rœ   r�   Úinputr¨   ÚoutputÚtreer   r   r   rš   @  s"     ÿzRefactoringTool.refactor_filec              
   C   s    t |ƒ}d|krtj| j_zVz| j |¡}W n@ tk
rl } z"|  d||jj	|¡ W Y ¢W ¢d S d }~X Y nX W 5 | j| j_X ||_
|  d|¡ |  ||¡ |S )NrY   zCan't parse %s: %s: %szRefactoring %s)rV   r	   rb   r   rc   Zparse_stringr"   r�   Ú	__class__r   Úfuture_featuresr‚   Úrefactor_tree)rq   Údatar   rS   rº   r°   r   r   r   rµ   W  s"    
  ÿ zRefactoringTool.refactor_stringc                 C   sŒ   t j ¡ }|rN|  d¡ |  |d¡}| js2||krB|  |d|¡ qˆ|  d¡ n:|  |d¡}| jsj|r~|jr~|  t	|ƒd|¡ n
|  d¡ d S )NzRefactoring doctests in stdinz<stdin>zNo doctest changes in stdinzNo changes in stdin)
ÚsysÚstdinr®   r‚   r³   rZ   r´   rµ   r¶   r·   )rq   r�   r¸   r¹   rº   r   r   r   Úrefactor_stdinr  s    

zRefactoringTool.refactor_stdinc           
   
   C   sÜ  t | j| jƒD ]}| ||¡ q|  | j| ¡ ¡ |  | j| ¡ ¡ | j | 	¡ ¡}t
| ¡ ƒ�r´| jjD �]D}||krj|| rj|| jtjjdd� |jr°|| jtjjd� t|| ƒD ]ò}||| krÚ||  |¡ zt|ƒ W n tk
�r    Y q¼Y nX |j�r||jk�rq¼| |¡}|r¼| ||¡}|d k	r¼| |¡ | ¡ D ] }|j�s^g |_|j |¡ �qL| j | 	¡ ¡}|D ]*}	|	|k�r˜g ||	< ||	  ||	 ¡ �q‚q¼qjqTt | j| jƒD ]}| ||¡ �qÂ|jS )NT)rx   Úreverserw   )r   rj   rk   Z
start_treeÚtraverse_byro   rp   rn   ÚrunZleavesÚanyr,   r]   r†   r   ZBaseZdepthZkeep_line_orderZ
get_linenor)   Úremover   Ú
ValueErrorZfixers_appliedÚmatchÚ	transformÚreplacer   r.   Zfinish_treer¶   )
rq   rº   r   r0   Z	match_setÚnodeÚresultsÚnewZnew_matchesZfxrr   r   r   r½   ‚  sJ    



zRefactoringTool.refactor_treec                 C   sV   |sd S |D ]D}||j  D ]4}| |¡}|r| ||¡}|d k	r| |¡ |}qqd S r&   )r   rÈ   rÉ   rÊ   )rq   r]   Z	traversalrË   r0   rÌ   rÍ   r   r   r   rÃ   Ñ  s    

zRefactoringTool.traverse_byc                 C   s†   | j  |¡ |d kr.|  |¡d }|d kr.d S ||k}|  ||||¡ |r`|  d|¡ | js`d S |rv|  ||||¡ n|  d|¡ d S )Nr   zNo changes to %szNot writing changes to %s)rl   r   r±   r•   r‚   rZ   Ú
write_file)rq   r’   r“   r‘   rœ   r¨   r”   r   r   r   r´   è  s    zRefactoringTool.processed_filec                 C   s´   zt j|d|dd�}W n6 tk
rL } z|  d||¡ W Y ¢d S d }~X Y nX |�F z| |¡ W n0 tk
r’ } z|  d||¡ W 5 d }~X Y nX W 5 Q R X |  d|¡ d| _d S )NÚwru   r§   zCan't create %s: %szCan't write %s: %szWrote changes to %sT)rE   rª   r«   r�   rœ   r‚   rh   )rq   r’   r“   r‘   r¨   Úfpr°   r   r   r   rÎ   ý  s    *zRefactoringTool.write_filez>>> z... c           
   	   C   s  g }d }d }d }d}|j dd�D ]È}|d7 }| ¡  | j¡r~|d k	rZ| |  ||||¡¡ |}|g}| | j¡}	|d |	… }q |d k	r¸| || j ¡s¬||| j ¡  d kr¸| 	|¡ q |d k	rÖ| |  ||||¡¡ d }d }| 	|¡ q |d k	�r
| |  ||||¡¡ d 
|¡S )Nr   T©Úkeependsr   r²   ru   )Ú
splitlinesÚlstripr   ÚPS1r.   Úrefactor_doctestÚfindÚPS2Úrstripr   r~   )
rq   r¸   r“   ÚresultÚblockZblock_linenoÚindentÚlinenoÚlineÚir   r   r   r³     sJ     ÿÿþ ÿ
 ÿz"RefactoringTool.refactor_docstringc           
   
      s  zˆ  ||ˆ ¡}W nj tk
r| } zLˆj tj¡rN|D ]}ˆ d| d¡¡ q6ˆ d|||j	j
|¡ | W Y ¢S d }~X Y nX ˆ ||¡�rt|ƒjdd�}|d |d … ||d d …  }	}|d  d¡sÜ|d  d7  < ˆ ˆj | d¡ g}|�r|‡ ‡fd	d
„|D ƒ7 }|S )Nz
Source: %sr²   z+Can't parse docstring in %s line %s: %s: %sTrÑ   r   rs   r   c                    s   g | ]}ˆ ˆj  | ‘qS r   )rØ   )r4   rÞ   ©rÜ   rq   r   r   r7   Z  s     z4RefactoringTool.refactor_doctest.<locals>.<listcomp>)Úparse_blockr"   r\   ZisEnabledForrf   ÚDEBUGr‚   rÙ   r�   r»   r   r½   r·   rÓ   ÚendswithrÕ   Úpop)
rq   rÛ   rÝ   rÜ   r“   rº   r°   rÞ   rÍ   Zclippedr   rà   r   rÖ   @  s,       ÿ"z RefactoringTool.refactor_doctestc                 C   sÆ   | j rd}nd}| js$|  d|¡ n"|  d|¡ | jD ]}|  |¡ q6| jrl|  d¡ | jD ]}|  |¡ q\| jrÂt| jƒdkrŒ|  d¡ n|  dt| jƒ¡ | jD ]\}}}| j|f|ž|Ž q¤d S )	NÚwerez
need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:r   zThere was 1 error:zThere were %d errors:)rh   rl   r�   rg   re   r{   )rq   rå   ÚfileÚmessagerŠ   r‹   rŒ   r   r   r   Ú	summarize]  s$    


zRefactoringTool.summarizec                 C   s"   | j  |  |||¡¡}tƒ |_|S r&   )r   Zparse_tokensÚ	wrap_toksrH   r¼   )rq   rÛ   rÝ   rÜ   rº   r   r   r   rá   t  s    zRefactoringTool.parse_blockc                 c   sd   t  |  ||¡j¡}|D ]F\}}\}}\}	}
}||d 7 }|	|d 7 }	||||f|	|
f|fV  qd S )Nr   )r   rD   Ú	gen_linesÚ__next__)rq   rÛ   rÝ   rÜ   r-   r   rU   Zline0Zcol0Zline1Zcol1Z	line_textr   r   r   ré   ~  s
    zRefactoringTool.wrap_toksc                 c   sx   || j  }|| j }|}|D ]N}| |¡r>|t|ƒd … V  n(|| ¡ d krVdV  ntd||f ƒ‚|}qdV  qld S )Nr²   zline=%r, prefix=%rru   )rÕ   rØ   r   r{   rÙ   ÚAssertionError)rq   rÛ   rÜ   Úprefix1Zprefix2ÚprefixrÞ   r   r   r   rê   Œ  s    


zRefactoringTool.gen_lines)NN)FF)FF)FF)F)NFN)N)r   r   r   r_   r}   rz   rr   ri   r�   r�   r‚   r•   rž   r™   r±   rš   rµ   rÁ   r½   rÃ   r´   rÎ   rÕ   rØ   r³   rÖ   rè   rá   ré   rê   r   r   r   r   rX   ›   s>   ÿ
4(
	


O  ÿ

+
rX   c                   @   s   e Zd ZdS )ÚMultiprocessingUnsupportedNr   r   r   r   r   rï      s   rï   c                       sB   e Zd Z‡ fdd„Zd‡ fdd„	Z‡ fdd„Z‡ fd	d
„Z‡  ZS )ÚMultiprocessRefactoringToolc                    s"   t t| ƒj||Ž d | _d | _d S r&   )Úsuperrð   rr   ÚqueueÚoutput_lock©rq   r‹   Úkwargs©r»   r   r   rr   ¦  s    z$MultiprocessRefactoringTool.__init__Fr   c              
      sö   |dkrt tˆƒ |||¡S zdd l‰ W n tk
r@   t‚Y nX ˆjd k	rTtdƒ‚ˆ  ¡ ˆ_ˆ  	¡ ˆ_
‡ ‡fdd„t|ƒD ƒ}z*|D ]}| ¡  q†t tˆƒ |||¡ W 5 ˆj ¡  t|ƒD ]}ˆj d ¡ q¾|D ]}| ¡ rÔ| ¡  qÔd ˆ_X d S )Nr   r   z already doing multiple processesc                    s   g | ]}ˆ j ˆjd �‘qS ))Útarget)ZProcessÚ_child)r4   rß   ©Úmultiprocessingrq   r   r   r7   ¸  s   ÿz8MultiprocessRefactoringTool.refactor.<locals>.<listcomp>)rñ   rð   rž   rú   ÚImportErrorrï   rò   ÚRuntimeErrorZJoinableQueueZLockró   Úranger~   ÚputZis_aliveÚstart)rq   r›   rœ   r�   Znum_processesZ	processesrß   r$   rö   rù   r   rž   «  s<    
  ÿ



ÿ
ÿ

z$MultiprocessRefactoringTool.refactorc                    sN   | j  ¡ }|d k	rJ|\}}ztt| ƒj||Ž W 5 | j  ¡  X | j  ¡ }q
d S r&   )rò   rd   Z	task_donerñ   rð   rš   )rq   Ztaskr‹   rõ   rö   r   r   rø   È  s    

 ÿz"MultiprocessRefactoringTool._childc                    s2   | j d k	r| j  ||f¡ ntt| ƒj||ŽS d S r&   )rò   rþ   rñ   rð   rš   rô   rö   r   r   rš   Ó  s    

 ÿz)MultiprocessRefactoringTool.refactor_file)FFr   )r   r   r   rr   rž   rø   rš   Ú__classcell__r   r   rö   r   rð   ¤  s     ÿrð   )T)"Ú
__author__rE   r–   r   r¿   rf   r„   r'   Ú	itertoolsr   Zpgen2r   r   r   Z
fixer_utilr   ru   r   r	   r
   rm   r   r"   r   r   r1   r8   r:   rV   rW   ÚobjectrX   rï   rð   r   r   r   r   Ú<module>   s6   
(    	