Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/cleanfuture.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | fcfe324663a6 |
| children |
| rev | line source |
|---|---|
|
59522
fcfe324663a6
convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents:
42427
diff
changeset
|
1 #! /usr/bin/env python3 |
|
19196
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") |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
19266
diff
changeset
|
62 except getopt.error as msg: |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
81 print("listing directory", file) |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
92 print("checking", file, "...", end=' ') |
|
19196
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) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
19266
diff
changeset
|
95 except IOError as msg: |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
106 print("changed.") |
|
19196
301bcb01b503
Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
107 if dryrun: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
108 print("But this is a dry run, so leaving it alone.") |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
110 print("%r lines %d-%d" % (file, s+1, e+1)) |
|
19196
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): |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
112 print(ff.lines[i], end=' ') |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
114 print("-- deleted") |
|
19196
301bcb01b503
Tool to delete (or just rewrite parts of) obsolete future statements.
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
115 else: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
116 print("-- change to:") |
|
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
117 print(line, end=' ') |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
129 print("wrote new", file) |
|
19196
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: |
|
42427
46625e6122e9
Convert print statements to function calls in Tools/.
Collin Winter <collinw@gmail.com>
parents:
41501
diff
changeset
|
132 print("unchanged.") |
|
19196
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 |
|
41501
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
40587
diff
changeset
|
165 get = tokenize.generate_tokens(self.getline).__next__ |
|
19196
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() |
