mirror of https://github.com/python/cpython.git
75 lines
1.5 KiB
Python
Executable File
75 lines
1.5 KiB
Python
Executable File
#! /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()
|