Mercurial > cpython-lru_cache-weakref
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 |
| 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 |
