From 0ccef85c950c91712e6126339ff7b0535f1d5708 Mon Sep 17 00:00:00 2001 From: exarkun Date: Thu, 28 Aug 2008 14:33:07 +0000 Subject: Merge pyflakes-trailing-whitespace-2663 Author: exarkun Reviewer: pjd Fixes: #2663 Work-around a strangeness in the Python compiler which caused failures on source with trailing whitespace but no trailing newline (by adding a trailing newline). Also, re-organize for the command line `pyflakes` tool into a real module so that it can be properly unit tested. --- pyflakes/scripts/__init__.py | 0 pyflakes/scripts/pyflakes.py | 55 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 pyflakes/scripts/__init__.py create mode 100644 pyflakes/scripts/pyflakes.py (limited to 'pyflakes/scripts') diff --git a/pyflakes/scripts/__init__.py b/pyflakes/scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyflakes/scripts/pyflakes.py b/pyflakes/scripts/pyflakes.py new file mode 100644 index 0000000..4d5c46c --- /dev/null +++ b/pyflakes/scripts/pyflakes.py @@ -0,0 +1,55 @@ + +""" +Implementation of the command-line I{pyflakes} tool. +""" + +import compiler, sys +import os + +checker = __import__('pyflakes.checker').checker + +def check(codeString, filename): + try: + tree = compiler.parse(codeString) + except (SyntaxError, IndentationError): + value = sys.exc_info()[1] + try: + (lineno, offset, line) = value[1][1:] + except IndexError: + print >> sys.stderr, 'could not compile %r' % (filename,) + return 1 + if line.endswith("\n"): + line = line[:-1] + print >> sys.stderr, '%s:%d: could not compile' % (filename, lineno) + print >> sys.stderr, line + print >> sys.stderr, " " * (offset-2), "^" + return 1 + else: + w = checker.Checker(tree, filename) + w.messages.sort(lambda a, b: cmp(a.lineno, b.lineno)) + for warning in w.messages: + print warning + return len(w.messages) + + +def checkPath(filename): + if os.path.exists(filename): + return check(file(filename, 'U').read() + '\n', filename) + + +def main(): + warnings = 0 + args = sys.argv[1:] + if args: + for arg in args: + if os.path.isdir(arg): + for dirpath, dirnames, filenames in os.walk(arg): + for filename in filenames: + if filename.endswith('.py'): + warnings += checkPath(os.path.join(dirpath, filename)) + else: + warnings += checkPath(arg) + else: + warnings += check(sys.stdin.read(), '') + + raise SystemExit(warnings > 0) -- cgit v1.2.1