B ãxác¤-ã@s€dZddlmZmZddlZddlZddlZddlZddlZddl Z ddl m Z dd„Z Gdd „d e j ƒZd d „Zdd d „ZdS)z Main program for 2to3. é)Úwith_statementÚprint_functionNé)Úrefactorc Cs(| ¡}| ¡}tj||||ddddS)z%Return a unified diff of two strings.z (original)z (refactored)Ú)Zlineterm)Ú splitlinesÚdifflibZ unified_diff)ÚaÚbÚfilename©r ú1/opt/alt/python37/lib64/python3.7/lib2to3/main.pyÚ diff_textss  rcs>eZdZdZd ‡fdd„ Zdd„Z‡fdd„Zd d „Z‡ZS) ÚStdoutRefactoringToola2 A refactoring tool that can avoid overwriting its input files. Prints output to stdout. Output files can optionally be written to a different directory and or have an extra file suffix appended to their name for use in situations where you do not want to replace the input files. rc sP||_||_|r&| tj¡s&|tj7}||_||_||_tt |ƒ  |||¡dS)aF Args: fixers: A list of fixers to import. options: A dict with RefactoringTool configuration. explicit: A list of fixers to run even if they are explicit. nobackups: If true no backup '.bak' files will be created for those files that are being refactored. show_diffs: Should diffs of the refactoring be printed to stdout? input_base_dir: The base directory for all input files. This class will strip this path prefix off of filenames before substituting it with output_dir. Only meaningful if output_dir is supplied. All files processed by refactor() must start with this path. output_dir: If supplied, all converted files will be written into this directory tree instead of input_base_dir. append_suffix: If supplied, all files output by this tool will have this appended to their filename. Useful for changing .py to .py3 for example by passing append_suffix='3'. 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|ž|ŽdS)N)Ú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îyt |¡Wn.tk rì}z|  d|¡Wdd}~XYnXyt ||¡Wn2tk r0}z|  d||¡Wdd}~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Ú 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_filec Cs°|r| d|¡nš| d|¡|jr¬t|||ƒ}yX|jdk rp|j&x|D] }t|ƒqJWtj ¡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__Ú__doc__rr(r6rDÚ __classcell__r r )r r rs  'rcCstd|ftjddS)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}| |¡\}}|jr@d4|d5<|js:td6ƒd4|_|jrZ|jsZ|  d7¡|j rt|jst|  d8¡|jsŒ|j rŒtd9ƒ|js¦|jr¦|  d:¡|j rÞt d;ƒxt ˆ¡D]}t |ƒqÂW|sÞdt d?tjd>d@SdA|kr,d4}|jr,t dBtjd>d@S|jrdSX| 3¡t4t5|j-ƒƒS)NzþMain program. Args: fixer_pkg: the name of a package where the fixers are located. args: optional; a list of command line arguments. If omitted, sys.argv[1:] is used. Returns a suggested exit status (0, 1, 2). z2to3 [options] file|dir ...)Zusagez-dz--doctests_onlyÚ store_truezFix up doctests only)ÚactionÚhelpz-fz--fixr"z1Each FIX specifies a transformation; default: all)rMÚdefaultrNz-jz --processesZstorerÚintzRun 2to3 concurrently)rMrOÚtyperNz-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.)rMrQrOrNz-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.)rJzUse --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.)6ÚoptparseZ OptionParserZ add_optionÚ parse_argsrSr:r@rrr$Z add_suffixZno_diffsZ list_fixesr;rZget_all_fix_namesr<rKrÚverboseÚloggingÚDEBUGÚINFOÚrootZhandlersZ basicConfigZ getLoggerÚsetZget_fixers_from_packageZnofixrYÚaddÚunionÚ differencerr*Ú commonprefixrrr/r.ÚrstripÚinforÚsortedr!Úrefactor_stdinZ doctests_onlyZ processesZMultiprocessingUnsupportedÚAssertionErrorZ summarizerPÚbool)rZr&ÚparserrlÚflagsrZfixnamerWr#Z avail_fixesZunwanted_fixesrZ all_presentrYZ requestedZ fixer_namesrZrtr )rZr Úmain…sÎ                                 rq)N)rHZ __future__rrr<rrr`r7r]rrrZMultiprocessRefactoringToolrr@rqr r r r Ús  g