From 6f73c1a2ac6aaca09aa51a30265d1eea5deb8485 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 20 Mar 1998 19:23:04 +0000 Subject: The Tab Police watches for possibly inconsistent indentation. --- Tools/scripts/tabpolice.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 Tools/scripts/tabpolice.py diff --git a/Tools/scripts/tabpolice.py b/Tools/scripts/tabpolice.py new file mode 100755 index 0000000..9236b71 --- /dev/null +++ b/Tools/scripts/tabpolice.py @@ -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() -- cgit v0.12