]> granicus.if.org Git - python/commitdiff
The Tab Police watches for possibly inconsistent indentation.
authorGuido van Rossum <guido@python.org>
Fri, 20 Mar 1998 19:23:04 +0000 (19:23 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 20 Mar 1998 19:23:04 +0000 (19:23 +0000)
Tools/scripts/tabpolice.py [new file with mode: 0755]

diff --git a/Tools/scripts/tabpolice.py b/Tools/scripts/tabpolice.py
new file mode 100755 (executable)
index 0000000..9236b71
--- /dev/null
@@ -0,0 +1,74 @@
+#! /usr/bin/env python
+
+"""The Tab Police watches for possibly inconsistent indentation."""
+
+import os
+import sys
+import getopt
+import string
+import tokenize
+
+verbose = 0
+
+def main():
+       global verbose
+       try:
+               opts, args = getopt.getopt(sys.argv[1:], "v")
+       except getopt.error, msg:
+               print msg
+       for o, a in opts:
+               if o == '-v':
+                       verbose = verbose + 1
+       for arg in args:
+               check(arg)
+
+def check(file):
+       if os.path.isdir(file) and not os.path.islink(file):
+               if verbose:
+                       print "%s: listing directory" % `file`
+               names = os.listdir(file)
+               for name in names:
+                       fullname = os.path.join(file, name)
+                       if (os.path.isdir(fullname) and
+                           not os.path.islink(fullname) or
+                           os.path.normcase(name[-3:]) == ".py"):
+                               check(fullname)
+               return
+
+       try:
+               f = open(file)
+       except IOError, msg:
+               print "%s: I/O Error: %s" % (`file`, str(msg))
+               return
+
+       if verbose > 1:
+               print "checking", `file`, "with tabsize 8..."
+       tokens = []
+       tokenize.tabsize = 8
+       try:
+               tokenize.tokenize(f.readline, tokens.append)
+       except tokenize.TokenError, msg:
+               print "%s: Token Error: %s" % (`file`, str(msg))
+
+       if verbose > 1:
+               print "checking", `file`, "with tabsize 4..."
+       f.seek(0)
+       alttokens = []
+       tokenize.tabsize = 4
+       try:
+               tokenize.tokenize(f.readline, alttokens.append)
+       except tokenize.TokenError, msg:
+               print "%s: Token Error: %s" % (`file`, str(msg))
+       f.close()
+
+       if tokens != alttokens:
+               if verbose:
+                       print "%s: *** Trouble in tab city! ***" % `file`
+               else:
+                       print file
+       else:
+               if verbose:
+                       print "%s: Clean bill of health." % `file`
+
+if __name__ == '__main__':
+       main()