U e5d…-ã@s|ddlmZmZddlZddlZddlZddlZddlZddlZddl m Z dd„Z Gdd„de j ƒZ d d „Zd d d „ZdS)é)Úwith_statementÚprint_functionNé)Úrefactorc Cs(| ¡}| ¡}tj||||dddd�S)Nz (original)z (refactored)Ú)Zlineterm)Ú splitlinesÚdifflibZ unified_diff)ÚaÚbÚfilename©r ú$/usr/lib64/python3.8/lib2to3/main.pyÚ diff_textss þrcs:eZdZd ‡fdd„ Zdd„Z‡fdd„Zdd „Z‡ZS) ÚStdoutRefactoringToolrc sP||_||_|r&| tj¡s&|tj7}||_||_||_tt |ƒ  |||¡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*|j |||f¡|jj|f|ž|ŽdSr)ÚerrorsÚappendÚloggerÚerror)rÚmsgÚargsÚkwargsr r r Ú log_errorAszStdoutRefactoringTool.log_errorc sz|}|jrH| |j¡r6tj |j|t|jƒd…¡}ntd||jfƒ‚|jrX||j7}||kr”tj  |¡}tj  |¡s†|r†t  |¡|  d||¡|j �s2|d}tj |¡rîzt |¡Wn.tk rì}z|  d|¡W5d}~XYnXzt ||¡Wn2tk �r0}z|  d||¡W5d}~XYnXtt|ƒj} | ||||ƒ|j �s`t ||¡||k�rvt ||¡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Úwriter!r r r8EsJ  ÿÿÿ   ÿ     z StdoutRefactoringTool.write_filec Csª|r| d|¡n”| d|¡|jr¦t|||ƒ}zP|jdk rl|j�"|D] }t|ƒqHtj ¡W5QRXn|D] }t|ƒqpWn$tk r¤t d|fƒYdSXdS)NzNo changes to %sz Refactored %sz+couldn't encode %s's diff for your terminal) r3rrZ 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*r8rFÚ __classcell__r r r!r rs ÿ 'rcCstd|ftjd�dS)Nz WARNING: %s©Úfile)r=r>Ústderr)r'r r r rB�srBc sðtjdd�}|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�r@d4|d5<|j�s:td6ƒd4|_|j�rZ|j�sZ|  d7¡|j �rt|j�st|  d8¡|j�sŒ|j �rŒtd9ƒ|j�s¦|j�r¦|  d:¡|j �rÚt d;ƒt ˆ¡D]}t |ƒ�qÀ|�sÚd�t d?tjd>�d@SdA|k�r(d4}|j�r(t dBtjd>�d@S|j�r8d4|dC<|j�rFtjntj}tjdD|dE�t dF¡}tt ˆ¡ƒ} t‡fdGdH„|jDƒƒ} tƒ} |j�râd'} |jD](} | dIk�r¶d4} n|  ˆdJ| ¡�q¢| �rÜ|  | ¡n| }n |  | ¡}| | ¡}t j! "|¡}|�r0| #t j$¡�s0t j! %|¡�s0t j! &|¡}|j�rT| 't j$¡}| (dK|j|¡t)t*|ƒ|t*| ƒ|j|j ||j|j dL�}|j+�sâ|�r–| ,¡nDz| ||j|j-|j.¡Wn(tj/k �rØt dMtjd>�YdSX| 0¡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)rOÚdefaultrPz-jz --processesZstorerÚintzRun 2to3 concurrently)rOrQÚtyperPz-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.)rOrSrQrPz-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.rKzUse --help to show usage.éú-zCan't write to stdin.rz%(name)s: %(message)s)ÚformatÚlevelz lib2to3.mainc3s|]}ˆd|VqdS)ú.fix_Nr )Ú.0Úfix©Ú fixer_pkgr r Ú Ýszmain..ÚallrZz7Output in %r will mirror the input directory %r layout.)rrr z+Sorry, -j isn't supported on this platform.)3ÚoptparseZ OptionParserZ add_optionÚ parse_argsrUr<rBrrr&Z add_suffixZno_diffsZ list_fixesr=rZget_all_fix_namesr>rMrÚverboseÚloggingÚDEBUGÚINFOZ basicConfigZ getLoggerÚsetZget_fixers_from_packageZnofixr\ÚaddÚunionÚ differencerr,Ú commonprefixrrr1r0ÚrstripÚinforÚsortedr#Úrefactor_stdinZ doctests_onlyZ processesZMultiprocessingUnsupportedZ summarizerRÚbool)r^r(ÚparserroÚflagsrZfixnamerYr%Z avail_fixesZunwanted_fixesrZ all_presentr\Z requestedZ fixer_namesrZrtr r]r Úmain…sú  ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ            ÿ  ÿû ÿÿrs)N)Z __future__rrr>rrrdr9rarrrZMultiprocessRefactoringToolrrBrsr r r r Ús  g