mirror of https://github.com/python/cpython
The Tab Police watches for possibly inconsistent indentation.
This commit is contained in:
parent
78fc3634cb
commit
6f73c1a2ac
|
@ -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()
|
Loading…
Reference in New Issue