o
     JAfN.                     @   s~   	 d dl mZm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 ZG dd de
jZd	d
 ZdddZdS )    )with_statementprint_functionN   )refactorc              	   C   s*   	 |   } |  }tj| |||ddddS )Nz
(original)z(refactored) )Zlineterm)
splitlinesdifflibZunified_diff)abfilename r   #/usr/lib/python3.10/lib2to3/main.py
diff_texts   s   r   c                       s>   e Zd Z	 	d
 fdd	Zdd Z fddZdd	 Z  ZS )StdoutRefactoringToolr   c	           	         sR   	 || _ || _|r|tjs|tj7 }|| _|| _|| _tt	| 
||| d S N)	nobackups
show_diffsendswithossep_input_base_dir_output_dir_append_suffixsuperr   __init__)	selfZfixersoptionsexplicitr   r   input_base_dir
output_dirappend_suffix	__class__r   r   r   $   s   
zStdoutRefactoringTool.__init__c                 O   s0   | j |||f | jj|g|R i | d S r   )errorsappendloggererror)r   msgargskwargsr   r   r   	log_errorA   s   zStdoutRefactoringTool.log_errorc           	         sV  |}| j r$|| jrtj| j |t| jd  }n	td|| jf | jr,|| j7 }||krJtj	|}tj
|sC|rCt| | d|| | js|d }tj|rnzt| W n tym   | d| Y nw zt|| W n ty   | d|| Y nw tt| j}||||| | jst|| ||krt|| d S d S )Nz5filename %s does not start with the input_base_dir %szWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)r   
startswithr   r   pathjoinlen
ValueErrorr   dirnameisdirmakedirslog_messager   lexistsremoveOSErrorrenamer   r   
write_fileshutilcopymode)	r   Znew_textr   Zold_textencodingZorig_filenamer   Zbackupwriter!   r   r   r8   E   sN   


z StdoutRefactoringTool.write_filec                 C   s   |r
|  d| d S |  d| | jrct|||}z8| jd urF| j |D ]}t| q%tj  W d    n1 s;w   Y  W d S W d S |D ]}t| qHW d S  tyb   t	d|f  Y d S w d S )NzNo changes to %szRefactored %sz+couldn't encode %s's diff for your terminal)
r3   r   r   Zoutput_lockprintsysstdoutflushUnicodeEncodeErrorwarn)r   oldnewr   ZequalZ
diff_linesliner   r   r   print_outputl   s,   

(
z"StdoutRefactoringTool.print_output)r   r   r   )__name__
__module____qualname__r   r*   r8   rF   __classcell__r   r   r!   r   r      s    
'r   c                 C   s   t d| f tjd d S )NzWARNING: %sfile)r=   r>   stderr)r'   r   r   r   rB      s   rB   c              
      s  	 t jdd}|jddddd |jdd	d
g dd |jddddddd |jddd
g dd |jddddd |jddddd |jddddd |jd d!dd"d |jd#dd$d |jd%d&dd'd |jd(d)dd*d+d |jd,d-dd.d/d0d1 |jd2d3dd4d |jd5dd.d/d6d1 d*}i }||\}}|jrd7|d8< |jstd9 d7|_|jr|js|	d: |j
r|js|	d; |js|jrtd< |js|jr|	d= |jrtd> t D ]}t| q|sd?S |std@tjdA tdBtjdA dCS dD|v rd7}|jrtdEtjdA dCS |jrd7|dF< |jr d7|dG< |jr'tjntj}tjdH|dI tdJ}tt }	t fdKdL|jD }
t }|jrvd*}|jD ]}|dMkr`d7}qU| dN |  qU|rs|	|n|}n|	|}| |
}t!j"#|}|r|$t!j%st!j"&|st!j"'|}|jr|(t!j%}|)dO|j| t*t+||t+||j|j ||j|j
dP}|j,s|r|-  n!z|||j|j.|j/ W n tj0y   tdQtjdA Y dS w |1  t2t3|j,S )RNz2to3 [options] file|dir ...)usagez-dz--doctests_only
store_truezFix up doctests only)actionhelpz-fz--fixr$   z1Each FIX specifies a transformation; default: all)rP   defaultrQ   z-jz--processesstorer   intzRun 2to3 concurrently)rP   rR   typerQ   z-xz--nofixz'Prevent a transformation from being runz-lz--list-fixeszList available transformationsz-pz--print-functionz0Modify the grammar so that print() is a functionz-ez--exec-functionz/Modify the grammar so that exec() is a functionz-vz	--verbosezMore verbose loggingz
--no-diffsz#Don't show diffs of the refactoringz-wz--writezWrite back modified filesz-nz--nobackupsFz&Don't write backups for modified filesz-oz--output-dirstrr   zXPut output files in this directory instead of overwriting the input files.  Requires -n.)rP   rU   rR   rQ   z-Wz--write-unchanged-fileszYAlso write files even if no changes were required (useful with --output-dir); implies -w.z--add-suffixzuAppend this string to all output filenames. Requires -n if non-empty.  ex: --add-suffix='3' will generate .py3 files.Twrite_unchanged_filesz&--write-unchanged-files/-W implies -w.z%Can't use --output-dir/-o without -n.z"Can't use --add-suffix without -n.z@not writing files and not printing diffs; that's not very usefulzCan't use -n without -wz2Available transformations for the -f/--fix option:r   z1At least one file or directory argument required.rK   zUse --help to show usage.   -zCan't write to stdin.r   exec_functionz%(name)s: %(message)s)formatlevelzlib2to3.mainc                 3   s    | ]	} d  | V  qdS ).fix_Nr   ).0fix	fixer_pkgr   r   	<genexpr>   s    zmain.<locals>.<genexpr>allr]   z7Output in %r will mirror the input directory %r layout.)r   r   r    z+Sorry, -j isn't supported on this platform.)4optparseZOptionParserZ
add_option
parse_argsrW   r<   rB   r   r   r&   Z
add_suffixZno_diffsZ
list_fixesr=   r   Zget_all_fix_namesr>   rM   r   rZ   verboseloggingDEBUGINFObasicConfig	getLoggersetZget_fixers_from_packageZnofixr_   addunion
differencer   r,   commonprefixr   r   r1   r0   rstripinfor   sortedr#   refactor_stdinZdoctests_only	processesZMultiprocessingUnsupportedZ	summarizerT   bool)ra   r(   parserrt   flagsr   Zfixnamer\   r%   Zavail_fixesZunwanted_fixesr   Zall_presentr_   Z	requestedZfixer_namesr   Zrtr   r`   r   main   s   




















ry   r   )Z
__future__r   r   r>   r   r   rg   r9   rd   r   r   r   ZMultiprocessRefactoringToolr   rB   ry   r   r   r   r   <module>   s    	g