#! /usr/bin/python import os from twisted.python import usage class Options(usage.Options): optFlags = [ ("recursive", "r", "Search for .py files recursively"), ] def parseArgs(self, *starting_points): self.starting_points = starting_points def check(fn): f = open(fn, "r") for i,line in enumerate(f.readlines()): if line == "\n": continue if line[-1] == "\n": line = line[:-1] if line.rstrip() != line: # the %s:%d:%d: lets emacs' compile-mode jump to those locations print "%s:%d:%d: trailing whitespace" % (fn, i+1, len(line)+1) f.close() o = Options() o.parseOptions() if o['recursive']: for starting_point in o.starting_points: for root, dirs, files in os.walk(starting_point): for fn in [f for f in files if f.endswith(".py")]: fn = os.path.join(root, fn) check(fn) else: for fn in o.starting_points: check(fn)