| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  | # Copyright 2006 Google, Inc. All Rights Reserved. | 
					
						
							|  |  |  | # Licensed to PSF under a Contributor Agreement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """Base class for fixers (optional, but recommended).""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Python imports | 
					
						
							|  |  |  | import logging | 
					
						
							|  |  |  | import itertools | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Local imports | 
					
						
							| 
									
										
											  
											
												Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
  r63661 | georg.brandl | 2008-05-26 05:26:20 -0500 (Mon, 26 May 2008) | 2 lines
  Add import fixes for dbm package.
........
  r63666 | georg.brandl | 2008-05-26 05:49:09 -0500 (Mon, 26 May 2008) | 2 lines
  Add xmlrpc package fixes.
........
  r63695 | georg.brandl | 2008-05-26 10:14:33 -0500 (Mon, 26 May 2008) | 2 lines
  Add fixer entries for http package.
........
  r63711 | benjamin.peterson | 2008-05-26 13:43:51 -0500 (Mon, 26 May 2008) | 2 lines
  add import mapping for test.test_support -> test.support
........
  r63729 | benjamin.peterson | 2008-05-26 16:31:03 -0500 (Mon, 26 May 2008) | 2 lines
  mapping for commands module -> subprocess
........
  r63769 | brett.cannon | 2008-05-29 00:13:13 -0500 (Thu, 29 May 2008) | 1 line
  Fixer for UserString.UserString over to the collections module.
........
  r63790 | brett.cannon | 2008-05-29 14:13:51 -0500 (Thu, 29 May 2008) | 4 lines
  Add a fixer for UserList.
  Closes issue #2878. Thanks to Quentin Gallet-Gilles for the patch.
........
  r63880 | collin.winter | 2008-06-01 18:09:38 -0500 (Sun, 01 Jun 2008) | 6 lines
  Move lib2to3/fixes/{basefix,util}.py down to lib2to3/.
  This is step 1 of turning lib2to3/ into a general-purpose refactoring
  library, reusable by other projects.
........
  r63886 | collin.winter | 2008-06-01 22:15:01 -0500 (Sun, 01 Jun 2008) | 5 lines
  Allow refactoring tools to specify a directory for fixer modules.
  This is step 2 of turning lib2to3/ into a general-purpose refactoring
  library, reusable by other projects. Step 1: r63880.
........
											
										 
											2008-06-15 02:31:05 +00:00
										 |  |  | from .patcomp import PatternCompiler | 
					
						
							|  |  |  | from . import pygram | 
					
						
							|  |  |  | from .fixer_util import does_tree_import | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BaseFix(object): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """Optional base class for fixers.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The subclass name must be FixFooBar where FooBar is the result of | 
					
						
							|  |  |  |     removing underscores and capitalizing the words of the fix name. | 
					
						
							|  |  |  |     For example, the class name for a fixer named 'has_key' should be | 
					
						
							|  |  |  |     FixHasKey. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PATTERN = None  # Most subclasses should override with a string literal | 
					
						
							|  |  |  |     pattern = None  # Compiled pattern, set by compile_pattern() | 
					
						
							|  |  |  |     options = None  # Options object passed to initializer | 
					
						
							|  |  |  |     filename = None # The filename (set by set_filename) | 
					
						
							|  |  |  |     logger = None   # A logger (set by set_filename) | 
					
						
							|  |  |  |     numbers = itertools.count(1) # For new_name() | 
					
						
							|  |  |  |     used_names = set() # A set of all used NAMEs | 
					
						
							|  |  |  |     order = "post" # Does the fixer prefer pre- or post-order traversal | 
					
						
							|  |  |  |     explicit = False # Is this ignored by refactor.py -f all? | 
					
						
							| 
									
										
											  
											
												Merged revisions 61602-61723 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
  r61626 | david.wolever | 2008-03-19 17:19:16 +0100 (Mi, 19 Mär 2008) | 1 line
  Added fixer for implicit local imports.  See #2414.
........
  r61628 | david.wolever | 2008-03-19 17:57:43 +0100 (Mi, 19 Mär 2008) | 1 line
  Added a class for tests which should not run if a particular import is found.
........
  r61629 | collin.winter | 2008-03-19 17:58:19 +0100 (Mi, 19 Mär 2008) | 1 line
  Two more relative import fixes in pgen2.
........
  r61635 | david.wolever | 2008-03-19 20:16:03 +0100 (Mi, 19 Mär 2008) | 1 line
  Fixed print fixer so it will do the Right Thing when it encounters __future__.print_function.  2to3 gets upset, though, so the tests have been commented out.
........
  r61637 | david.wolever | 2008-03-19 21:37:17 +0100 (Mi, 19 Mär 2008) | 3 lines
  Added a fixer for itertools imports (from itertools import imap, ifilterfalse --> from itertools import filterfalse)
........
  r61645 | david.wolever | 2008-03-19 23:22:35 +0100 (Mi, 19 Mär 2008) | 1 line
  SVN is happier when you add the files you create... -_-'
........
  r61654 | david.wolever | 2008-03-20 01:09:56 +0100 (Do, 20 Mär 2008) | 1 line
  Added an explicit sort order to fixers -- fixes problems like #2427
........
  r61664 | david.wolever | 2008-03-20 04:32:40 +0100 (Do, 20 Mär 2008) | 3 lines
  Fixes #2428 -- comments are no longer eatten by __future__ fixer.
........
  r61673 | david.wolever | 2008-03-20 17:22:40 +0100 (Do, 20 Mär 2008) | 1 line
  Added 2to3 node pretty-printer
........
  r61679 | david.wolever | 2008-03-20 20:50:42 +0100 (Do, 20 Mär 2008) | 1 line
  Made node printing a little bit prettier
........
  r61723 | martin.v.loewis | 2008-03-22 00:59:27 +0100 (Sa, 22 Mär 2008) | 2 lines
  Fix whitespace.
........
											
										 
											2008-03-22 00:01:12 +00:00
										 |  |  |     run_order = 5   # Fixers will be sorted by run order before execution | 
					
						
							|  |  |  |                     # Lower numbers will be run first. | 
					
						
							| 
									
										
											  
											
												Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
  r73771 | benjamin.peterson | 2009-07-02 10:56:55 -0500 (Thu, 02 Jul 2009) | 1 line
  force the imports fixer to be run after the import one #6400
........
  r73811 | benjamin.peterson | 2009-07-03 09:03:14 -0500 (Fri, 03 Jul 2009) | 1 line
  check for sep, not pathsep when looking for a subpackage #6408
........
  r73840 | benjamin.peterson | 2009-07-04 09:52:28 -0500 (Sat, 04 Jul 2009) | 1 line
  don't print diffs by default; it's annoying
........
  r73842 | benjamin.peterson | 2009-07-04 09:58:46 -0500 (Sat, 04 Jul 2009) | 1 line
  complain when not showing diffs or writing
........
  r73848 | alexandre.vassalotti | 2009-07-04 23:38:19 -0500 (Sat, 04 Jul 2009) | 2 lines
  Fix test_refactor_stdin to handle print_output() method with 4 arguments.
........
  r73849 | alexandre.vassalotti | 2009-07-04 23:43:18 -0500 (Sat, 04 Jul 2009) | 5 lines
  Issue 2370: Add fixer for the removal of operator.isCallable() and
  operator.sequenceIncludes().
  Patch contributed by Jeff Balogh (and updated by me).
........
  r73861 | benjamin.peterson | 2009-07-05 09:15:53 -0500 (Sun, 05 Jul 2009) | 1 line
  cleanup and use unicode where appropiate
........
  r73957 | benjamin.peterson | 2009-07-11 15:49:56 -0500 (Sat, 11 Jul 2009) | 1 line
  fix calls to str() with unicode()
........
  r73958 | benjamin.peterson | 2009-07-11 15:51:51 -0500 (Sat, 11 Jul 2009) | 1 line
  more str() -> unicode()
........
  r73959 | benjamin.peterson | 2009-07-11 16:40:08 -0500 (Sat, 11 Jul 2009) | 1 line
  add tests for refactor_dir()
........
  r73960 | benjamin.peterson | 2009-07-11 16:44:32 -0500 (Sat, 11 Jul 2009) | 1 line
  don't parse files just because they end with 'py' (no dot)
........
  r73964 | benjamin.peterson | 2009-07-11 17:30:15 -0500 (Sat, 11 Jul 2009) | 1 line
  simplify
........
  r73965 | benjamin.peterson | 2009-07-11 17:31:30 -0500 (Sat, 11 Jul 2009) | 1 line
  remove usage of get_prefix()
........
  r73966 | benjamin.peterson | 2009-07-11 17:33:35 -0500 (Sat, 11 Jul 2009) | 1 line
  revert unintended change in 73965
........
  r73967 | benjamin.peterson | 2009-07-11 17:34:44 -0500 (Sat, 11 Jul 2009) | 1 line
  avoid expensive checks and assume the node did change
........
  r73968 | benjamin.peterson | 2009-07-11 20:46:46 -0500 (Sat, 11 Jul 2009) | 1 line
  use a regular dict for the heads to avoid adding lists in the loop
........
  r73969 | benjamin.peterson | 2009-07-11 20:50:43 -0500 (Sat, 11 Jul 2009) | 1 line
  prefix headnode functions with '_'
........
  r73972 | benjamin.peterson | 2009-07-11 21:25:45 -0500 (Sat, 11 Jul 2009) | 1 line
  try to make the head node dict as sparse as possible
........
  r73973 | benjamin.peterson | 2009-07-11 21:59:49 -0500 (Sat, 11 Jul 2009) | 1 line
  a better idea; add an option to *not* print diffs
........
  r73974 | benjamin.peterson | 2009-07-11 22:00:29 -0500 (Sat, 11 Jul 2009) | 1 line
  add space
........
  r73977 | benjamin.peterson | 2009-07-12 10:16:07 -0500 (Sun, 12 Jul 2009) | 1 line
  update get_headnode_dict tests for recent changes
........
  r73981 | benjamin.peterson | 2009-07-12 12:06:39 -0500 (Sun, 12 Jul 2009) | 4 lines
  detect when "from __future__ import print_function" is given
  Deprecate the 'print_function' option and the -p flag
........
  r73984 | benjamin.peterson | 2009-07-12 16:16:37 -0500 (Sun, 12 Jul 2009) | 1 line
  add tests for Call; thanks Joe Amenta
........
  r74065 | benjamin.peterson | 2009-07-17 12:52:49 -0500 (Fri, 17 Jul 2009) | 1 line
  pathname2url and url2pathname are in urllib.request not urllib.parse #6496
........
  r74113 | benjamin.peterson | 2009-07-20 08:56:57 -0500 (Mon, 20 Jul 2009) | 1 line
  fix deprecation warnings in tests
........
											
										 
											2009-07-20 15:33:09 +00:00
										 |  |  |     _accept_type = None # [Advanced and not public] This tells RefactoringTool | 
					
						
							|  |  |  |                         # which node type to accept when there's not a pattern. | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Shortcut for access to Python grammar symbols | 
					
						
							|  |  |  |     syms = pygram.python_symbols | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, options, log): | 
					
						
							|  |  |  |         """Initializer.  Subclass may override.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Args: | 
					
						
							| 
									
										
										
										
											2008-09-03 00:21:32 +00:00
										 |  |  |             options: an dict containing the options passed to RefactoringTool | 
					
						
							|  |  |  |             that could be used to customize the fixer through the command line. | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |             log: a list to append warnings and other messages to. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.options = options | 
					
						
							|  |  |  |         self.log = log | 
					
						
							|  |  |  |         self.compile_pattern() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def compile_pattern(self): | 
					
						
							|  |  |  |         """Compiles self.PATTERN into self.pattern.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Subclass may override if it doesn't want to use | 
					
						
							|  |  |  |         self.{pattern,PATTERN} in .match(). | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if self.PATTERN is not None: | 
					
						
							|  |  |  |             self.pattern = PatternCompiler().compile_pattern(self.PATTERN) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def set_filename(self, filename): | 
					
						
							|  |  |  |         """Set the filename, and a logger derived from it.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The main refactoring tool should call this. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.filename = filename | 
					
						
							|  |  |  |         self.logger = logging.getLogger(filename) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def match(self, node): | 
					
						
							|  |  |  |         """Returns match for a given parse tree node.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Should return a true or false object (not necessarily a bool). | 
					
						
							|  |  |  |         It may return a non-empty dict of matching sub-nodes as | 
					
						
							|  |  |  |         returned by a matching pattern. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Subclass may override. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         results = {"node": node} | 
					
						
							|  |  |  |         return self.pattern.match(node, results) and results | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def transform(self, node, results): | 
					
						
							|  |  |  |         """Returns the transformation for a given parse tree node.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Args: | 
					
						
							|  |  |  |           node: the root of the parse tree that matched the fixer. | 
					
						
							|  |  |  |           results: a dict mapping symbolic names to part of the match. | 
					
						
							| 
									
										
										
										
											2008-03-19 05:22:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |         Returns: | 
					
						
							|  |  |  |           None, or a node that is a modified copy of the | 
					
						
							|  |  |  |           argument node.  The node argument may also be modified in-place to | 
					
						
							|  |  |  |           effect the same change. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Subclass *must* override. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         raise NotImplementedError() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-09 01:01:14 +00:00
										 |  |  |     def new_name(self, template=u"xxx_todo_changeme"): | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |         """Return a string suitable for use as an identifier
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The new name is guaranteed not to conflict with other identifiers. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         name = template | 
					
						
							|  |  |  |         while name in self.used_names: | 
					
						
							| 
									
										
										
										
											2009-05-09 01:01:14 +00:00
										 |  |  |             name = template + unicode(self.numbers.next()) | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |         self.used_names.add(name) | 
					
						
							|  |  |  |         return name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def log_message(self, message): | 
					
						
							|  |  |  |         if self.first_log: | 
					
						
							|  |  |  |             self.first_log = False | 
					
						
							|  |  |  |             self.log.append("### In file %s ###" % self.filename) | 
					
						
							|  |  |  |         self.log.append(message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def cannot_convert(self, node, reason=None): | 
					
						
							|  |  |  |         """Warn the user that a given chunk of code is not valid Python 3,
 | 
					
						
							|  |  |  |         but that it cannot be converted automatically. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         First argument is the top-level node for the code in question. | 
					
						
							|  |  |  |         Optional second argument is why it can't be converted. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         lineno = node.get_lineno() | 
					
						
							|  |  |  |         for_output = node.clone() | 
					
						
							| 
									
										
											  
											
												Merged revisions 72523,72950-72951,72994,73003,73033,73036-73040,73091-73093,73096,73179-73181,73192,73231,73244,73255-73256,73365 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
  r72523 | benjamin.peterson | 2009-05-09 14:42:26 -0500 (Sat, 09 May 2009) | 1 line
  remove parenthesis
........
  r72950 | benjamin.peterson | 2009-05-26 18:19:45 -0500 (Tue, 26 May 2009) | 1 line
  remove unused imports
........
  r72951 | benjamin.peterson | 2009-05-26 18:27:00 -0500 (Tue, 26 May 2009) | 1 line
  this is no longer executable
........
  r72994 | benjamin.peterson | 2009-05-28 15:32:54 -0500 (Thu, 28 May 2009) | 1 line
  fix test_all_fixers on Windows #6134
........
  r73003 | benjamin.peterson | 2009-05-28 21:57:28 -0500 (Thu, 28 May 2009) | 4 lines
  make 2to3 test utilities easier to use with other applications (3to2)
  Patch by Joe Amenta
........
  r73033 | benjamin.peterson | 2009-05-29 16:58:32 -0500 (Fri, 29 May 2009) | 1 line
  update grammar for multi with statement
........
  r73036 | benjamin.peterson | 2009-05-29 17:33:20 -0500 (Fri, 29 May 2009) | 1 line
  simplify fix_unicode
........
  r73037 | benjamin.peterson | 2009-05-29 17:53:03 -0500 (Fri, 29 May 2009) | 1 line
  add custom error for pattern syntax errors
........
  r73038 | benjamin.peterson | 2009-05-29 17:55:00 -0500 (Fri, 29 May 2009) | 1 line
  complain if details are attached to a token
........
  r73039 | benjamin.peterson | 2009-05-29 18:00:28 -0500 (Fri, 29 May 2009) | 1 line
  add a test for whitespace
........
  r73040 | benjamin.peterson | 2009-05-29 18:01:17 -0500 (Fri, 29 May 2009) | 1 line
  a fix for emacs highlighting
........
  r73091 | benjamin.peterson | 2009-05-31 20:55:25 -0500 (Sun, 31 May 2009) | 1 line
  deprecate set_prefix() and get_prefix() in favor of a prefix property
........
  r73092 | benjamin.peterson | 2009-05-31 21:00:51 -0500 (Sun, 31 May 2009) | 1 line
  change hideous java naming scheme
........
  r73093 | benjamin.peterson | 2009-05-31 21:01:39 -0500 (Sun, 31 May 2009) | 1 line
  remove dated comment
........
  r73096 | benjamin.peterson | 2009-05-31 21:40:53 -0500 (Sun, 31 May 2009) | 1 line
  group tests
........
  r73179 | benjamin.peterson | 2009-06-03 13:09:53 -0500 (Wed, 03 Jun 2009) | 1 line
  handle the case where there's multiple trailers #6185
........
  r73180 | benjamin.peterson | 2009-06-03 13:18:05 -0500 (Wed, 03 Jun 2009) | 1 line
  scrap __main__ section
........
  r73181 | benjamin.peterson | 2009-06-03 13:24:48 -0500 (Wed, 03 Jun 2009) | 1 line
  remove shebang lines and __main__ sections
........
  r73192 | benjamin.peterson | 2009-06-03 19:16:30 -0500 (Wed, 03 Jun 2009) | 4 lines
  actually test something here
  Thanks to Joe Amenta for noticing.y
........
  r73231 | benjamin.peterson | 2009-06-04 13:38:50 -0500 (Thu, 04 Jun 2009) | 1 line
  remove unused variable
........
  r73244 | benjamin.peterson | 2009-06-05 08:39:25 -0500 (Fri, 05 Jun 2009) | 1 line
  allow fixers to give different options in setUp
........
  r73255 | benjamin.peterson | 2009-06-06 11:23:46 -0500 (Sat, 06 Jun 2009) | 1 line
  fix the except fixer on one line suites #6222
........
  r73256 | benjamin.peterson | 2009-06-06 11:27:40 -0500 (Sat, 06 Jun 2009) | 1 line
  test one-line else and finally clauses
........
  r73365 | benjamin.peterson | 2009-06-11 17:01:32 -0500 (Thu, 11 Jun 2009) | 1 line
  normalize whitespace
........
											
										 
											2009-06-11 22:06:46 +00:00
										 |  |  |         for_output.prefix = u"" | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |         msg = "Line %d: could not convert: %s" | 
					
						
							|  |  |  |         self.log_message(msg % (lineno, for_output)) | 
					
						
							|  |  |  |         if reason: | 
					
						
							|  |  |  |             self.log_message(reason) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def warning(self, node, reason): | 
					
						
							|  |  |  |         """Used for warning the user about possible uncertainty in the
 | 
					
						
							|  |  |  |         translation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         First argument is the top-level node for the code in question. | 
					
						
							|  |  |  |         Optional second argument is why it can't be converted. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         lineno = node.get_lineno() | 
					
						
							|  |  |  |         self.log_message("Line %d: %s" % (lineno, reason)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def start_tree(self, tree, filename): | 
					
						
							|  |  |  |         """Some fixers need to maintain tree-wide state.
 | 
					
						
							|  |  |  |         This method is called once, at the start of tree fix-up. | 
					
						
							| 
									
										
										
										
											2008-03-19 05:22:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |         tree - the root node of the tree to be processed. | 
					
						
							|  |  |  |         filename - the name of the file the tree came from. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.used_names = tree.used_names | 
					
						
							|  |  |  |         self.set_filename(filename) | 
					
						
							|  |  |  |         self.numbers = itertools.count(1) | 
					
						
							|  |  |  |         self.first_log = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def finish_tree(self, tree, filename): | 
					
						
							|  |  |  |         """Some fixers need to maintain tree-wide state.
 | 
					
						
							|  |  |  |         This method is called once, at the conclusion of tree fix-up. | 
					
						
							| 
									
										
										
										
											2008-03-19 05:22:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-19 04:43:46 +00:00
										 |  |  |         tree - the root node of the tree to be processed. | 
					
						
							|  |  |  |         filename - the name of the file the tree came from. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         pass | 
					
						
							| 
									
										
											  
											
												Merged revisions 61602-61723 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
  r61626 | david.wolever | 2008-03-19 17:19:16 +0100 (Mi, 19 Mär 2008) | 1 line
  Added fixer for implicit local imports.  See #2414.
........
  r61628 | david.wolever | 2008-03-19 17:57:43 +0100 (Mi, 19 Mär 2008) | 1 line
  Added a class for tests which should not run if a particular import is found.
........
  r61629 | collin.winter | 2008-03-19 17:58:19 +0100 (Mi, 19 Mär 2008) | 1 line
  Two more relative import fixes in pgen2.
........
  r61635 | david.wolever | 2008-03-19 20:16:03 +0100 (Mi, 19 Mär 2008) | 1 line
  Fixed print fixer so it will do the Right Thing when it encounters __future__.print_function.  2to3 gets upset, though, so the tests have been commented out.
........
  r61637 | david.wolever | 2008-03-19 21:37:17 +0100 (Mi, 19 Mär 2008) | 3 lines
  Added a fixer for itertools imports (from itertools import imap, ifilterfalse --> from itertools import filterfalse)
........
  r61645 | david.wolever | 2008-03-19 23:22:35 +0100 (Mi, 19 Mär 2008) | 1 line
  SVN is happier when you add the files you create... -_-'
........
  r61654 | david.wolever | 2008-03-20 01:09:56 +0100 (Do, 20 Mär 2008) | 1 line
  Added an explicit sort order to fixers -- fixes problems like #2427
........
  r61664 | david.wolever | 2008-03-20 04:32:40 +0100 (Do, 20 Mär 2008) | 3 lines
  Fixes #2428 -- comments are no longer eatten by __future__ fixer.
........
  r61673 | david.wolever | 2008-03-20 17:22:40 +0100 (Do, 20 Mär 2008) | 1 line
  Added 2to3 node pretty-printer
........
  r61679 | david.wolever | 2008-03-20 20:50:42 +0100 (Do, 20 Mär 2008) | 1 line
  Made node printing a little bit prettier
........
  r61723 | martin.v.loewis | 2008-03-22 00:59:27 +0100 (Sa, 22 Mär 2008) | 2 lines
  Fix whitespace.
........
											
										 
											2008-03-22 00:01:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ConditionalFix(BaseFix): | 
					
						
							|  |  |  |     """ Base class for fixers which not execute if an import is found. """ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # This is the name of the import which, if found, will cause the test to be skipped | 
					
						
							|  |  |  |     skip_on = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def start_tree(self, *args): | 
					
						
							|  |  |  |         super(ConditionalFix, self).start_tree(*args) | 
					
						
							|  |  |  |         self._should_skip = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def should_skip(self, node): | 
					
						
							|  |  |  |         if self._should_skip is not None: | 
					
						
							|  |  |  |             return self._should_skip | 
					
						
							|  |  |  |         pkg = self.skip_on.split(".") | 
					
						
							|  |  |  |         name = pkg[-1] | 
					
						
							|  |  |  |         pkg = ".".join(pkg[:-1]) | 
					
						
							|  |  |  |         self._should_skip = does_tree_import(pkg, name, node) | 
					
						
							|  |  |  |         return self._should_skip |