annotate Lib/lib2to3/fixer_base.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 119e4323400d
children 7700408f65fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47725
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
1 # Copyright 2006 Google, Inc. All Rights Reserved.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
2 # Licensed to PSF under a Contributor Agreement.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
3
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
4 """Base class for fixers (optional, but recommended)."""
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
5
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
6 # Python imports
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
7 import logging
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
8 import itertools
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
9
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
10 # Local imports
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
11 from .patcomp import PatternCompiler
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
12 from . import pygram
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
13 from .fixer_util import does_tree_import
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
14
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
15 class BaseFix(object):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
16
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
17 """Optional base class for fixers.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
18
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
19 The subclass name must be FixFooBar where FooBar is the result of
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
20 removing underscores and capitalizing the words of the fix name.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
21 For example, the class name for a fixer named 'has_key' should be
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
22 FixHasKey.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
23 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
24
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
25 PATTERN = None # Most subclasses should override with a string literal
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
26 pattern = None # Compiled pattern, set by compile_pattern()
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
27 options = None # Options object passed to initializer
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
28 filename = None # The filename (set by set_filename)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
29 logger = None # A logger (set by set_filename)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
30 numbers = itertools.count(1) # For new_name()
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
31 used_names = set() # A set of all used NAMEs
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
32 order = "post" # Does the fixer prefer pre- or post-order traversal
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
33 explicit = False # Is this ignored by refactor.py -f all?
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
34 run_order = 5 # Fixers will be sorted by run order before execution
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
35 # Lower numbers will be run first.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
36
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
37 # Shortcut for access to Python grammar symbols
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
38 syms = pygram.python_symbols
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
39
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
40 def __init__(self, options, log):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
41 """Initializer. Subclass may override.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
42
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
43 Args:
48975
e2edc1c11e50 Merged revisions 66173 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47725
diff changeset
44 options: an dict containing the options passed to RefactoringTool
e2edc1c11e50 Merged revisions 66173 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47725
diff changeset
45 that could be used to customize the fixer through the command line.
47725
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
46 log: a list to append warnings and other messages to.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
47 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
48 self.options = options
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
49 self.log = log
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
50 self.compile_pattern()
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
51
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
52 def compile_pattern(self):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
53 """Compiles self.PATTERN into self.pattern.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
54
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
55 Subclass may override if it doesn't want to use
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
56 self.{pattern,PATTERN} in .match().
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
57 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
58 if self.PATTERN is not None:
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
59 self.pattern = PatternCompiler().compile_pattern(self.PATTERN)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
60
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
61 def set_filename(self, filename):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
62 """Set the filename, and a logger derived from it.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
63
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
64 The main refactoring tool should call this.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
65 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
66 self.filename = filename
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
67 self.logger = logging.getLogger(filename)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
68
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
69 def match(self, node):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
70 """Returns match for a given parse tree node.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
71
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
72 Should return a true or false object (not necessarily a bool).
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
73 It may return a non-empty dict of matching sub-nodes as
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
74 returned by a matching pattern.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
75
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
76 Subclass may override.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
77 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
78 results = {"node": node}
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
79 return self.pattern.match(node, results) and results
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
80
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
81 def transform(self, node, results):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
82 """Returns the transformation for a given parse tree node.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
83
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
84 Args:
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
85 node: the root of the parse tree that matched the fixer.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
86 results: a dict mapping symbolic names to part of the match.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
87
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
88 Returns:
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
89 None, or a node that is a modified copy of the
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
90 argument node. The node argument may also be modified in-place to
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
91 effect the same change.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
92
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
93 Subclass *must* override.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
94 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
95 raise NotImplementedError()
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
96
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50198
diff changeset
97 def new_name(self, template=u"xxx_todo_changeme"):
47725
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
98 """Return a string suitable for use as an identifier
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
99
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
100 The new name is guaranteed not to conflict with other identifiers.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
101 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
102 name = template
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
103 while name in self.used_names:
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50198
diff changeset
104 name = template + unicode(self.numbers.next())
47725
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
105 self.used_names.add(name)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
106 return name
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
107
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
108 def log_message(self, message):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
109 if self.first_log:
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
110 self.first_log = False
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
111 self.log.append("### In file %s ###" % self.filename)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
112 self.log.append(message)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
113
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
114 def cannot_convert(self, node, reason=None):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
115 """Warn the user that a given chunk of code is not valid Python 3,
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
116 but that it cannot be converted automatically.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
117
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
118 First argument is the top-level node for the code in question.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
119 Optional second argument is why it can't be converted.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
120 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
121 lineno = node.get_lineno()
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
122 for_output = node.clone()
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50198
diff changeset
123 for_output.set_prefix(u"")
47725
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
124 msg = "Line %d: could not convert: %s"
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
125 self.log_message(msg % (lineno, for_output))
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
126 if reason:
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
127 self.log_message(reason)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
128
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
129 def warning(self, node, reason):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
130 """Used for warning the user about possible uncertainty in the
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
131 translation.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
132
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
133 First argument is the top-level node for the code in question.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
134 Optional second argument is why it can't be converted.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
135 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
136 lineno = node.get_lineno()
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
137 self.log_message("Line %d: %s" % (lineno, reason))
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
138
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
139 def start_tree(self, tree, filename):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
140 """Some fixers need to maintain tree-wide state.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
141 This method is called once, at the start of tree fix-up.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
142
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
143 tree - the root node of the tree to be processed.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
144 filename - the name of the file the tree came from.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
145 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
146 self.used_names = tree.used_names
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
147 self.set_filename(filename)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
148 self.numbers = itertools.count(1)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
149 self.first_log = True
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
150
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
151 def finish_tree(self, tree, filename):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
152 """Some fixers need to maintain tree-wide state.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
153 This method is called once, at the conclusion of tree fix-up.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
154
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
155 tree - the root node of the tree to be processed.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
156 filename - the name of the file the tree came from.
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
157 """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
158 pass
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
159
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
160
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
161 class ConditionalFix(BaseFix):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
162 """ Base class for fixers which not execute if an import is found. """
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
163
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
164 # This is the name of the import which, if found, will cause the test to be skipped
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
165 skip_on = None
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
166
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
167 def start_tree(self, *args):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
168 super(ConditionalFix, self).start_tree(*args)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
169 self._should_skip = None
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
170
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
171 def should_skip(self, node):
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
172 if self._should_skip is not None:
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
173 return self._should_skip
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
174 pkg = self.skip_on.split(".")
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
175 name = pkg[-1]
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
176 pkg = ".".join(pkg[:-1])
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
177 self._should_skip = does_tree_import(pkg, name, node)
991caad81a2d Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
178 return self._should_skip