grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \…-ã@s|ddlmZmZddlZddlZddlZddlZddlZddlZddl m Z dd„Z Gdd„de j ƒZ d d „Zd d d „ZdS)é)Úwith_statementÚprint_functionNé)Úrefactorc Cs(|jƒ}|jƒ}tj||||dddd�S)Nz (original)z (refactored)Ú)Zlineterm)Ú splitlinesÚdifflibZ unified_diff)ÚaÚbÚfilename©r ú$/usr/lib64/python3.6/lib2to3/main.pyÚ diff_textss  rcs:eZdZd ‡fdd„ Zdd„Z‡fdd„Zdd „Z‡ZS) ÚStdoutRefactoringToolrc sR||_||_|r(|jtjƒ r(|tj7}||_||_||_tt |ƒj |||ƒdS)N) Ú nobackupsÚ show_diffsÚendswithÚosÚsepÚ_input_base_dirÚ _output_dirÚ_append_suffixÚsuperrÚ__init__) ÚselfZfixersÚoptionsÚexplicitrrÚinput_base_dirÚ output_dirÚ append_suffix)Ú __class__r r r$s zStdoutRefactoringTool.__init__cOs*|jj|||fƒ|jj|f|ž|ŽdS)N)ÚerrorsÚappendÚloggerÚerror)rÚmsgÚargsÚkwargsr r r Ú log_errorAszStdoutRefactoringTool.log_errorc !s||}|jrH|j|jƒr6tjj|j|t|jƒd…ƒ}ntd||jfƒ‚|jrX||j7}||kr–tjj |ƒ}tjj |ƒ rˆ|rˆtj |ƒ|j d||ƒ|j �s4|d}tjj|ƒrðytj|ƒWn.tk rî}z|j d|ƒWYdd}~XnXytj||ƒWn2tk �r2}z|j d||ƒWYdd}~XnXtt|ƒj} | ||||ƒ|j �sbtj||ƒ||k�rxtj||ƒdS)Nz5filename %s does not start with the input_base_dir %szWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)rÚ startswithrrÚpathÚjoinÚlenÚ ValueErrorrÚdirnameÚisdirÚmakedirsÚ log_messagerÚlexistsÚremoveÚOSErrorÚrenamerrÚ write_fileÚshutilZcopymode) rZnew_textr Zold_textÚencodingZ orig_filenamerZbackupÚerrÚwrite)r r r r6Es@          z StdoutRefactoringTool.write_filecCs°|r|jd|ƒnš|jd|ƒ|jr¬t|||ƒ}yX|jdk rp|j�&x|D] }t|ƒqJWtjjƒWdQRXnx|D] }t|ƒqvWWn"tk rªt d|fƒdSXdS)NzNo changes to %sz Refactored %sz+couldn't encode %s's diff for your terminal) r1rrZ output_lockÚprintÚsysÚstdoutÚflushÚUnicodeEncodeErrorÚwarn)rÚoldÚnewr ZequalZ diff_linesÚliner r r Ú print_outputls"       z"StdoutRefactoringTool.print_output)rrr)Ú__name__Ú __module__Ú __qualname__rr(r6rDÚ __classcell__r r )r r rs  'rcCstd|ftjd�dS)Nz WARNING: %s)Úfile)r;r<Ústderr)r%r r r r@�sr@c stjdd�}|jddddd�|jdd d gd d �|jd dddddd�|jddd gdd �|jddddd�|jddddd�|jddddd�|jd dd!d�|jd"d#dd$d�|jd%d&dd'd(d �|jd)d*dd+d,d-d.�|jd/d0dd1d�|jd2dd+d,d3d.�d'}i}|j|ƒ\}}|j�r@d4|d5<|j�s:td6ƒd4|_|j�r\|j �r\|j d7ƒ|j �rx|j �rx|j d8ƒ|j �r’|j �r’td9ƒ|j �r®|j�r®|j d:ƒ|j �ræt d;ƒxtjˆƒD]}t |ƒ�qÊW|�sæd�t d?tjd>�d@SdA|k�r4d4}|j�r4t dBtjd>�d@S|j�rDd4|dC<|j�rRtjntj}tjdD|dE�tjdFƒ}ttjˆƒƒ} t‡fdGdH„|jDƒƒ} tƒ} |j�ròd'} x2|jD](} | dIk�rÄd4} n| jˆdJ| ƒ�q°W| �rì| j| ƒn| }n | j| ƒ}|j| ƒ}t j!j"|ƒ}|�rD|j#t j$ƒ �rDt j!j%|ƒ �rDt j!j&|ƒ}|j�rh|j't j$ƒ}|j(dK|j|ƒt)t*|ƒ|t*| ƒ|j|j ||j|j dL�}|j+�sô|�rª|j,ƒnBy|j||j|j-|j.ƒWn&tj/k �rêt dMtjd>�dSX|j0ƒt1t2|j+ƒƒS)NNz2to3 [options] file|dir ...)Zusagez-dz--doctests_onlyÚ store_truezFix up doctests only)ÚactionÚhelpz-fz--fixr"z1Each FIX specifies a transformation; default: all)rLÚdefaultrMz-jz --processesZstorerÚintzRun 2to3 concurrently)rLrNÚtyperMz-xz--nofixz'Prevent a transformation from being runz-lz --list-fixeszList available transformationsz-pz--print-functionz0Modify the grammar so that print() is a functionz-vz --verbosezMore verbose loggingz --no-diffsz#Don't show diffs of the refactoringz-wz--writezWrite back modified filesz-nz --nobackupsFz&Don't write backups for modified filesz-oz --output-dirÚstrrzXPut output files in this directory instead of overwriting the input files. Requires -n.)rLrPrNrMz-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 usefulzCan't use -n without -wz2Available transformations for the -f/--fix option:rz1At least one file or directory argument required.)rIzUse --help to show usage.éú-zCan't write to stdin.rz%(name)s: %(message)s)ÚformatÚlevelz lib2to3.mainc3s|]}ˆd|VqdS)z.fix_Nr )Ú.0Úfix)Ú fixer_pkgr r ú Ýszmain..Úallz.fix_z7Output in %r will mirror the input directory %r layout.)rrrz+Sorry, -j isn't supported on this platform.)3ÚoptparseZ OptionParserZ add_optionÚ parse_argsrRr:r@rrr$Z add_suffixZno_diffsZ list_fixesr;rZget_all_fix_namesr<rJrÚverboseÚloggingÚDEBUGÚINFOZ basicConfigZ getLoggerÚsetZget_fixers_from_packageZnofixrXÚaddÚunionÚ differencerr*Ú commonprefixrrr/r.ÚrstripÚinforÚsortedr!Úrefactor_stdinZ doctests_onlyZ processesZMultiprocessingUnsupportedZ summarizerOÚbool)rYr&ÚparserrjÚflagsrZfixnamerVr#Z avail_fixesZunwanted_fixesrZ all_presentrXZ requestedZ fixer_namesrZrtr )rYr Úmain…sÊ                                 rn)N)Z __future__rrr<rrr_r7r\rrrZMultiprocessRefactoringToolrr@rnr r r r Ús  g