mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 d61de7f18d
			
		
	
	
		d61de7f18d
		
	
	
	
	
		
			
			svn+ssh://pythondev@svn.python.org/python/trunk
................
  r66653 | benjamin.peterson | 2008-09-27 16:09:10 -0500 (Sat, 27 Sep 2008) | 49 lines
  Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
  svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
  ........
    r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
    remove a  useless if __name__ == '__main__'
  ........
    r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
    avoid the perils of mutable default arguments
  ........
    r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
    some places in RefactoringTool should raise an error instead of logging it
  ........
    r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
    fix doctest refactoring
  ........
    r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
    don't print to stdout when 2to3 is used as a library
  ........
    r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
    let fixer modules and classes have different prefixes
  ........
    r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
    raise errors when 2to3 is used as a library
  ........
    r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
    fix docstring
  ........
    r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
    make use of enumerate
  ........
    r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
    revert last revision; it breaks things
  ........
    r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
    add tests for lib2to3.refactor
  ........
................
  r66654 | benjamin.peterson | 2008-09-27 16:12:20 -0500 (Sat, 27 Sep 2008) | 1 line
  enable refactor tests
................
		
	
			
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Main program for 2to3.
 | |
| """
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| import logging
 | |
| import optparse
 | |
| 
 | |
| from . import refactor
 | |
| 
 | |
| 
 | |
| class StdoutRefactoringTool(refactor.RefactoringTool):
 | |
|     """
 | |
|     Prints output to stdout.
 | |
|     """
 | |
| 
 | |
|     def log_error(self, msg, *args, **kwargs):
 | |
|         self.errors.append((msg, args, kwargs))
 | |
|         self.logger.error(msg, *args, **kwargs)
 | |
| 
 | |
|     def print_output(self, lines):
 | |
|         for line in lines:
 | |
|             print(line)
 | |
| 
 | |
| 
 | |
| def main(fixer_pkg, args=None):
 | |
|     """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).
 | |
|     """
 | |
|     # Set up option parser
 | |
|     parser = optparse.OptionParser(usage="refactor.py [options] file|dir ...")
 | |
|     parser.add_option("-d", "--doctests_only", action="store_true",
 | |
|                       help="Fix up doctests only")
 | |
|     parser.add_option("-f", "--fix", action="append", default=[],
 | |
|                       help="Each FIX specifies a transformation; default all")
 | |
|     parser.add_option("-l", "--list-fixes", action="store_true",
 | |
|                       help="List available transformations (fixes/fix_*.py)")
 | |
|     parser.add_option("-p", "--print-function", action="store_true",
 | |
|                       help="Modify the grammar so that print() is a function")
 | |
|     parser.add_option("-v", "--verbose", action="store_true",
 | |
|                       help="More verbose logging")
 | |
|     parser.add_option("-w", "--write", action="store_true",
 | |
|                       help="Write back modified files")
 | |
| 
 | |
|     # Parse command line arguments
 | |
|     refactor_stdin = False
 | |
|     options, args = parser.parse_args(args)
 | |
|     if options.list_fixes:
 | |
|         print("Available transformations for the -f/--fix option:")
 | |
|         for fixname in refactor.get_all_fix_names(fixer_pkg):
 | |
|             print(fixname)
 | |
|         if not args:
 | |
|             return 0
 | |
|     if not args:
 | |
|         print("At least one file or directory argument required.", file=sys.stderr)
 | |
|         print("Use --help to show usage.", file=sys.stderr)
 | |
|         return 2
 | |
|     if "-" in args:
 | |
|         refactor_stdin = True
 | |
|         if options.write:
 | |
|             print("Can't write to stdin.", file=sys.stderr)
 | |
|             return 2
 | |
| 
 | |
|     # Set up logging handler
 | |
|     level = logging.DEBUG if options.verbose else logging.INFO
 | |
|     logging.basicConfig(format='%(name)s: %(message)s', level=level)
 | |
| 
 | |
|     # Initialize the refactoring tool
 | |
|     rt_opts = {"print_function" : options.print_function}
 | |
|     avail_names = refactor.get_fixers_from_package(fixer_pkg)
 | |
|     explicit = []
 | |
|     if options.fix:
 | |
|         explicit = [fixer_pkg + ".fix_" + fix
 | |
|                     for fix in options.fix if fix != "all"]
 | |
|         fixer_names = avail_names if "all" in options.fix else explicit
 | |
|     else:
 | |
|         fixer_names = avail_names
 | |
|     rt = StdoutRefactoringTool(fixer_names, rt_opts, explicit=explicit)
 | |
| 
 | |
|     # Refactor all files and directories passed as arguments
 | |
|     if not rt.errors:
 | |
|         if refactor_stdin:
 | |
|             rt.refactor_stdin()
 | |
|         else:
 | |
|             rt.refactor(args, options.write, options.doctests_only)
 | |
|         rt.summarize()
 | |
| 
 | |
|     # Return error status (0 if rt.errors is zero)
 | |
|     return int(bool(rt.errors))
 |