U e5d-@s|ddlmZmZddlZddlZddlZddlZddlZddlZddl m Z ddZ Gddde j Z d d Zd d d ZdS))with_statementprint_functionN)refactorc Cs(|}|}tj||||ddddS)Nz (original)z (refactored))Zlineterm) splitlinesdifflibZ unified_diff)abfilenamer $/usr/lib64/python3.8/lib2to3/main.py diff_textss rcs:eZdZd fdd ZddZfddZdd ZZS) StdoutRefactoringToolrc sP||_||_|r&|tjs&|tj7}||_||_||_tt | |||dSN) nobackups show_diffsendswithossep_input_base_dir _output_dir_append_suffixsuperr__init__) selfZfixersoptionsexplicitrrinput_base_dir output_dir append_suffix __class__r r r$s zStdoutRefactoringTool.__init__cOs*|j|||f|jj|f||dSr)errorsappendloggererror)rmsgargskwargsr r r log_errorAszStdoutRefactoringTool.log_errorc sz|}|jrH||jr6tj|j|t|jd}ntd||jf|jrX||j7}||krtj |}tj |s|rt || d|||j s2|d}tj|rzt|Wn.tk r}z| d|W5d}~XYnXzt||Wn2tk r0}z| d||W5d}~XYnXtt|j} | |||||j s`t||||krvt||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 startswithrrpathjoinlen ValueErrorrdirnameisdirmakedirs log_messagerlexistsremoveOSErrorrenamerr write_fileshutilZcopymode) rZnew_textr Zold_textencodingZ orig_filenamerZbackuperrwriter!r r r8EsJ          z StdoutRefactoringTool.write_filec Cs|r|d|n|d||jrt|||}zP|jdk rl|j"|D] }t|qHtjW5QRXn|D] }t|qpWn$tk rt d|fYdSXdS)NzNo changes to %sz Refactored %sz+couldn't encode %s's diff for your terminal) r3rrZ output_lockprintsysstdoutflushUnicodeEncodeErrorwarn)roldnewr ZequalZ diff_linesliner r r print_outputls$    z"StdoutRefactoringTool.print_output)rrr)__name__ __module__ __qualname__rr*r8rF __classcell__r r r!r rs  'rcCstd|ftjddS)Nz WARNING: %sfile)r=r>stderr)r'r r r rBsrBc 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}||\}}|jr@d4|d5<|js:td6d4|_|jrZ|jsZ| d7|j rt|jst| d8|js|j rtd9|js|jr| d:|j rt d;tD]}t |q|sdt d?tjd>d@SdA|kr(d4}|jr(t dBtjd>d@S|jr8d4|dC<|jrFtjntj}tjdD|dEtdF}tt} tfdGdH|jD} t} |jrd'} |jD](} | dIkrd4} n| dJ| q| r| | n| }n | | }|| }t j!"|}|r0|#t j$s0t j!%|s0t j!&|}|jrT|'t j$}|(dK|j|t)t*||t*| |j|j ||j|j dL}|j+s|r|,nDz|||j|j-|j.Wn(tj/k rt dMtjd>YdSX|0t1t2|j+S)NNz2to3 [options] file|dir ...)Zusagez-dz--doctests_only store_truezFix up doctests only)actionhelpz-fz--fixr$z1Each FIX specifies a transformation; default: all)rOdefaultrPz-jz --processesZstorerintzRun 2to3 concurrently)rOrQtyperPz-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-dirstrrzXPut 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.Twrite_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)formatlevelz lib2to3.mainc3s|]}d|VqdS).fix_Nr ).0fix fixer_pkgr r szmain..allrZz7Output in %r will mirror the input directory %r layout.)rrr z+Sorry, -j isn't supported on this platform.)3optparseZ OptionParserZ add_option parse_argsrUr<rBrrr&Z add_suffixZno_diffsZ list_fixesr=rZget_all_fix_namesr>rMrverboseloggingDEBUGINFOZ basicConfigZ getLoggersetZget_fixers_from_packageZnofixr\addunion differencerr, commonprefixrrr1r0rstripinforsortedr#refactor_stdinZ doctests_onlyZ processesZMultiprocessingUnsupportedZ summarizerRbool)r^r(parserroflagsrZfixnamerYr%Z avail_fixesZunwanted_fixesrZ all_presentr\Z requestedZ fixer_namesrZrtr r]r mains                            rs)N)Z __future__rrr>rrrdr9rarrrZMultiprocessRefactoringToolrrBrsr r r r s  g