annotate Tools/scripts/cleanfuture.py @ 24042:63fbbed10714 legacy-trunk

Simplify HTTPSConnection constructor. See discussion in SF bug 458463.
author Jeremy Hylton <jeremy@alum.mit.edu>
date Fri, 28 Jun 2002 23:38:14 +0000
parents e9a97b02889b
children 6b18a095c2e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
1 #! /usr/bin/env python
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3 """cleanfuture [-d][-r][-v] path ...
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
4
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
5 -d Dry run. Analyze, but don't make any changes to, files.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
6 -r Recurse. Search for all .py files in subdirectories too.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
7 -v Verbose. Print informative msgs.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
8
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
9 Search Python (.py) files for future statements, and remove the features
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
10 from such statements that are already mandatory in the version of Python
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
11 you're using.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
12
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
13 Pass one or more file and/or directory paths. When a directory path, all
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
14 .py files within the directory will be examined, and, if the -r option is
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
15 given, likewise recursively for subdirectories.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
16
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
17 Overwrites files in place, renaming the originals with a .bak extension. If
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
18 cleanfuture finds nothing to change, the file is left alone. If cleanfuture
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
19 does change a file, the changed file is a fixed-point (i.e., running
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
20 cleanfuture on the resulting .py file won't change it again, at least not
19266
e9a97b02889b Fix typo in module docstring.
Tim Peters <tim.peters@gmail.com>
parents: 19202
diff changeset
21 until you try it again with a later Python release).
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
22
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
23 Limitations: You can do these things, but this tool won't help you then:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
24
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
25 + A future statement cannot be mixed with any other statement on the same
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
26 physical line (separated by semicolon).
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
27
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
28 + A future statement cannot contain an "as" clause.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
29
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
30 Example: Assuming you're using Python 2.2, if a file containing
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
31
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
32 from __future__ import nested_scopes, generators
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
33
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
34 is analyzed by cleanfuture, the line is rewritten to
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
35
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
36 from __future__ import generators
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
37
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
38 because nested_scopes is no longer optional in 2.2 but generators is.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
39 """
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
40
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
41 import __future__
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
42 import tokenize
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
43 import os
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
44 import sys
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
45
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
46 dryrun = 0
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
47 recurse = 0
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
48 verbose = 0
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
49
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
50 def errprint(*args):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
51 strings = map(str, args)
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
52 msg = ' '.join(strings)
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
53 if msg[-1:] != '\n':
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
54 msg += '\n'
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
55 sys.stderr.write(msg)
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
56
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
57 def main():
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
58 import getopt
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
59 global verbose, recurse, dryrun
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
60 try:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
61 opts, args = getopt.getopt(sys.argv[1:], "drv")
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
62 except getopt.error, msg:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
63 errprint(msg)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
64 return
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
65 for o, a in opts:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
66 if o == '-d':
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
67 dryrun += 1
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
68 elif o == '-r':
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
69 recurse += 1
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
70 elif o == '-v':
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
71 verbose += 1
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
72 if not args:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
73 errprint("Usage:", __doc__)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
74 return
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
75 for arg in args:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
76 check(arg)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
77
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
78 def check(file):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
79 if os.path.isdir(file) and not os.path.islink(file):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
80 if verbose:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
81 print "listing directory", file
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
82 names = os.listdir(file)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
83 for name in names:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
84 fullname = os.path.join(file, name)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
85 if ((recurse and os.path.isdir(fullname) and
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
86 not os.path.islink(fullname))
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
87 or name.lower().endswith(".py")):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
88 check(fullname)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
89 return
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
90
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
91 if verbose:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
92 print "checking", file, "...",
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
93 try:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
94 f = open(file)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
95 except IOError, msg:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
96 errprint("%r: I/O Error: %s" % (file, str(msg)))
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
97 return
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
98
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
99 ff = FutureFinder(f, file)
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
100 changed = ff.run()
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
101 if changed:
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
102 ff.gettherest()
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
103 f.close()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
104 if changed:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
105 if verbose:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
106 print "changed."
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
107 if dryrun:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
108 print "But this is a dry run, so leaving it alone."
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
109 for s, e, line in changed:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
110 print "%r lines %d-%d" % (file, s+1, e+1)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
111 for i in range(s, e+1):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
112 print ff.lines[i],
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
113 if line is None:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
114 print "-- deleted"
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
115 else:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
116 print "-- change to:"
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
117 print line,
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
118 if not dryrun:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
119 bak = file + ".bak"
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
120 if os.path.exists(bak):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
121 os.remove(bak)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
122 os.rename(file, bak)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
123 if verbose:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
124 print "renamed", file, "to", bak
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
125 g = open(file, "w")
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
126 ff.write(g)
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
127 g.close()
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
128 if verbose:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
129 print "wrote new", file
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
130 else:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
131 if verbose:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
132 print "unchanged."
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
133
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
134 class FutureFinder:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
135
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
136 def __init__(self, f, fname):
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
137 self.f = f
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
138 self.fname = fname
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
139 self.ateof = 0
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
140 self.lines = [] # raw file lines
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
141
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
142 # List of (start_index, end_index, new_line) triples.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
143 self.changed = []
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
144
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
145 # Line-getter for tokenize.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
146 def getline(self):
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
147 if self.ateof:
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
148 return ""
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
149 line = self.f.readline()
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
150 if line == "":
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
151 self.ateof = 1
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
152 else:
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
153 self.lines.append(line)
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
154 return line
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
155
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
156 def run(self):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
157 STRING = tokenize.STRING
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
158 NL = tokenize.NL
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
159 NEWLINE = tokenize.NEWLINE
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
160 COMMENT = tokenize.COMMENT
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
161 NAME = tokenize.NAME
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
162 OP = tokenize.OP
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
163
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
164 changed = self.changed
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
165 get = tokenize.generate_tokens(self.getline).next
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
166 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
167
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
168 # Chew up initial comments and blank lines (if any).
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
169 while type in (COMMENT, NL, NEWLINE):
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
170 type, token, (srow, scol), (erow, ecol), line = get()
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
171
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
172 # Chew up docstring (if any -- and it may be implicitly catenated!).
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
173 while type is STRING:
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
174 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
175
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
176 # Analyze the future stmts.
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
177 while 1:
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
178 # Chew up comments and blank lines (if any).
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
179 while type in (COMMENT, NL, NEWLINE):
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
180 type, token, (srow, scol), (erow, ecol), line = get()
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
181
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
182 if not (type is NAME and token == "from"):
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
183 break
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
184 startline = srow - 1 # tokenize is one-based
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
185 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
186
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
187 if not (type is NAME and token == "__future__"):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
188 break
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
189 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
190
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
191 if not (type is NAME and token == "import"):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
192 break
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
193 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
194
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
195 # Get the list of features.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
196 features = []
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
197 while type is NAME:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
198 features.append(token)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
199 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
200
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
201 if not (type is OP and token == ','):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
202 break
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
203 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
204
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
205 # A trailing comment?
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
206 comment = None
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
207 if type is COMMENT:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
208 comment = token
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
209 type, token, (srow, scol), (erow, ecol), line = get()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
210
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
211 if type is not NEWLINE:
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
212 errprint("Skipping file %r; can't parse line %d:\n%s" %
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
213 (self.fname, srow, line))
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
214 return []
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
215
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
216 endline = srow - 1
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
217
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
218 # Check for obsolete features.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
219 okfeatures = []
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
220 for f in features:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
221 object = getattr(__future__, f, None)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
222 if object is None:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
223 # A feature we don't know about yet -- leave it in.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
224 # They'll get a compile-time error when they compile
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
225 # this program, but that's not our job to sort out.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
226 okfeatures.append(f)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
227 else:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
228 released = object.getMandatoryRelease()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
229 if released is None or released <= sys.version_info:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
230 # Withdrawn or obsolete.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
231 pass
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
232 else:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
233 okfeatures.append(f)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
234
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
235 # Rewrite the line if at least one future-feature is obsolete.
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
236 if len(okfeatures) < len(features):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
237 if len(okfeatures) == 0:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
238 line = None
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
239 else:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
240 line = "from __future__ import "
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
241 line += ', '.join(okfeatures)
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
242 if comment is not None:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
243 line += ' ' + comment
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
244 line += '\n'
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
245 changed.append((startline, endline, line))
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
246
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
247 # Loop back for more future statements.
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
248
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
249 return changed
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
250
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
251 def gettherest(self):
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
252 if self.ateof:
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
253 self.therest = ''
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
254 else:
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
255 self.therest = self.f.read()
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
256
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
257 def write(self, f):
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
258 changed = self.changed
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
259 assert changed
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
260 # Prevent calling this again.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
261 self.changed = []
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
262 # Apply changes in reverse order.
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
263 changed.reverse()
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
264 for s, e, line in changed:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
265 if line is None:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
266 # pure deletion
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
267 del self.lines[s:e+1]
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
268 else:
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
269 self.lines[s:e+1] = [line]
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
270 f.writelines(self.lines)
19202
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
271 # Copy over the remainder of the file.
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
272 if self.therest:
47a45da03b09 + A msg on c.l.py reminded me that docstrings can be implicitly catenated.
Tim Peters <tim.peters@gmail.com>
parents: 19196
diff changeset
273 f.write(self.therest)
19196
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
274
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
275 if __name__ == '__main__':
301bcb01b503 Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
276 main()