annotate Tools/scripts/classfix.py @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +0000
parents 4727f260f6f8
children 6b18a095c2e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 4300
diff changeset
1 #! /usr/bin/env python
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
4300
e05da8043b50 Note obsolescence
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
3 # This script is obsolete -- it is kept for historical purposes only.
e05da8043b50 Note obsolescence
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
4 #
554
2e287a1503b2 Cosmetic change.
Guido van Rossum <guido@python.org>
parents: 552
diff changeset
5 # Fix Python source files to use the new class definition syntax, i.e.,
4300
e05da8043b50 Note obsolescence
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
6 # the syntax used in Python versions before 0.9.8:
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
7 # class C() = base(), base(), ...: ...
4300
e05da8043b50 Note obsolescence
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
8 # is changed to the current syntax:
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
9 # class C(base, base, ...): ...
4300
e05da8043b50 Note obsolescence
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
10 #
554
2e287a1503b2 Cosmetic change.
Guido van Rossum <guido@python.org>
parents: 552
diff changeset
11 # The script uses heuristics to find class definitions that usually
2e287a1503b2 Cosmetic change.
Guido van Rossum <guido@python.org>
parents: 552
diff changeset
12 # work but occasionally can fail; carefully check the output!
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 #
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # Command line arguments are files or directories to be processed.
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # Directories are searched recursively for files whose name looks
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 # like a python module.
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # Symbolic links are always ignored (except as explicit directory
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 # arguments). Of course, the original file is kept as a back-up
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 # (with a "~" attached to its name).
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 #
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
21 # Changes made are reported to stdout in a diff-like format.
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
22 #
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
23 # Undoubtedly you can do this using find and sed or perl, but this is
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 # a nice example of Python code that recurses down a directory tree
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # and uses regular expressions. Also note several subtleties like
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 # preserving the file's mode and avoiding to even write a temp file
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # when no changes are needed for a file.
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 #
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
29 # NB: by changing only the function fixline() you can turn this
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
30 # into a program for a different change to Python programs...
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 import sys
37021
4727f260f6f8 Remove regsub, reconvert, regex, regex_syntax and everything under lib-old.
Neal Norwitz <nnorwitz@gmail.com>
parents: 33074
diff changeset
33 import re
754
6fbb03dc439e change posix to os and path to os.path
Guido van Rossum <guido@python.org>
parents: 554
diff changeset
34 import os
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 from stat import *
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 err = sys.stderr.write
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 dbg = err
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 rep = sys.stdout.write
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 def main():
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
42 bad = 0
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
43 if not sys.argv[1:]: # No arguments
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
44 err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
45 sys.exit(2)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
46 for arg in sys.argv[1:]:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
47 if os.path.isdir(arg):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
48 if recursedown(arg): bad = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
49 elif os.path.islink(arg):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
50 err(arg + ': will not process symbolic links\n')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
51 bad = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
52 else:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
53 if fix(arg): bad = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
54 sys.exit(bad)
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55
37021
4727f260f6f8 Remove regsub, reconvert, regex, regex_syntax and everything under lib-old.
Neal Norwitz <nnorwitz@gmail.com>
parents: 33074
diff changeset
56 ispythonprog = re.compile('^[a-zA-Z0-9_]+\.py$')
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
57 def ispython(name):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
58 return ispythonprog.match(name) >= 0
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 def recursedown(dirname):
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
61 dbg('recursedown(%r)\n' % (dirname,))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
62 bad = 0
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
63 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
64 names = os.listdir(dirname)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
65 except os.error, msg:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
66 err('%s: cannot list directory: %r\n' % (dirname, msg))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
67 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
68 names.sort()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
69 subdirs = []
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
70 for name in names:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
71 if name in (os.curdir, os.pardir): continue
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
72 fullname = os.path.join(dirname, name)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
73 if os.path.islink(fullname): pass
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
74 elif os.path.isdir(fullname):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
75 subdirs.append(fullname)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
76 elif ispython(name):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
77 if fix(fullname): bad = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
78 for fullname in subdirs:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
79 if recursedown(fullname): bad = 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
80 return bad
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 def fix(filename):
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
83 ## dbg('fix(%r)\n' % (filename,))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
84 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
85 f = open(filename, 'r')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
86 except IOError, msg:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
87 err('%s: cannot open: %r\n' % (filename, msg))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
88 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
89 head, tail = os.path.split(filename)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
90 tempname = os.path.join(head, '@' + tail)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
91 g = None
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
92 # If we find a match, we rewind the file and start over but
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
93 # now copy everything to a temp file.
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
94 lineno = 0
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
95 while 1:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
96 line = f.readline()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
97 if not line: break
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
98 lineno = lineno + 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
99 while line[-2:] == '\\\n':
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
100 nextline = f.readline()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
101 if not nextline: break
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
102 line = line + nextline
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
103 lineno = lineno + 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
104 newline = fixline(line)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
105 if newline != line:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
106 if g is None:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
107 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
108 g = open(tempname, 'w')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
109 except IOError, msg:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
110 f.close()
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
111 err('%s: cannot create: %r\n' % (tempname, msg))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
112 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
113 f.seek(0)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
114 lineno = 0
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
115 rep(filename + ':\n')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
116 continue # restart from the beginning
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
117 rep(repr(lineno) + '\n')
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
118 rep('< ' + line)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
119 rep('> ' + newline)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
120 if g is not None:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
121 g.write(newline)
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
122
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
123 # End of file
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
124 f.close()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
125 if not g: return 0 # No changes
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
126
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
127 # Finishing touch -- move files
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
129 # First copy the file's mode to the temp file
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
130 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
131 statbuf = os.stat(filename)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
132 os.chmod(tempname, statbuf[ST_MODE] & 07777)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
133 except os.error, msg:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
134 err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
135 # Then make a backup of the original file as filename~
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
136 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
137 os.rename(filename, filename + '~')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
138 except os.error, msg:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
139 err('%s: warning: backup failed (%r)\n' % (filename, msg))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
140 # Now move the temp file to the original file
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
141 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
142 os.rename(tempname, filename)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
143 except os.error, msg:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 25219
diff changeset
144 err('%s: rename failed (%r)\n' % (filename, msg))
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
145 return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
146 # Return succes
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
147 return 0
517
43c223159b28 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
149 # This expression doesn't catch *all* class definition headers,
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
150 # but it's pretty darn close.
37021
4727f260f6f8 Remove regsub, reconvert, regex, regex_syntax and everything under lib-old.
Neal Norwitz <nnorwitz@gmail.com>
parents: 33074
diff changeset
151 classexpr = '^([ \t]*class +[a-zA-Z0-9_]+) *( *) *((=.*)?):'
4727f260f6f8 Remove regsub, reconvert, regex, regex_syntax and everything under lib-old.
Neal Norwitz <nnorwitz@gmail.com>
parents: 33074
diff changeset
152 classprog = re.compile(classexpr)
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
153
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
154 # Expressions for finding base class expressions.
37021
4727f260f6f8 Remove regsub, reconvert, regex, regex_syntax and everything under lib-old.
Neal Norwitz <nnorwitz@gmail.com>
parents: 33074
diff changeset
155 baseexpr = '^ *(.*) *( *) *$'
4727f260f6f8 Remove regsub, reconvert, regex, regex_syntax and everything under lib-old.
Neal Norwitz <nnorwitz@gmail.com>
parents: 33074
diff changeset
156 baseprog = re.compile(baseexpr)
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
157
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
158 def fixline(line):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
159 if classprog.match(line) < 0: # No 'class' keyword -- no change
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
160 return line
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
161
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
162 (a0, b0), (a1, b1), (a2, b2) = classprog.regs[:3]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
163 # a0, b0 = Whole match (up to ':')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
164 # a1, b1 = First subexpression (up to classname)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
165 # a2, b2 = Second subexpression (=.*)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
166 head = line[:b1]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
167 tail = line[b0:] # Unmatched rest of line
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
168
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
169 if a2 == b2: # No base classes -- easy case
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
170 return head + ':' + tail
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
171
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
172 # Get rid of leading '='
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
173 basepart = line[a2+1:b2]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
174
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
175 # Extract list of base expressions
25219
8a7a2f1f88f0 Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents: 15932
diff changeset
176 bases = basepart.split(',')
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
177
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
178 # Strip trailing '()' from each base expression
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
179 for i in range(len(bases)):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
180 if baseprog.match(bases[i]) >= 0:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
181 x1, y1 = baseprog.regs[1]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
182 bases[i] = bases[i][x1:y1]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
183
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
184 # Join the bases back again and build the new line
25219
8a7a2f1f88f0 Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents: 15932
diff changeset
185 basepart = ', '.join(bases)
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
186
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
187 return head + '(' + basepart + '):' + tail
552
c158c8347654 Use new, more generic structure for *fix.py scripts.
Guido van Rossum <guido@python.org>
parents: 535
diff changeset
188
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 31515
diff changeset
189 if __name__ == '__main__':
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 31515
diff changeset
190 main()