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