Merge from the flake8 trunk

This commit is contained in:
Peter Teichman 2012-09-15 13:52:37 -04:00
commit 4a7b381fc0
5 changed files with 825 additions and 573 deletions

2
README
View file

@ -90,7 +90,7 @@ To use the Git hook on any *commit*, add a **pre-commit** file in the
STRICT = False STRICT = False
if __name__ == '__main__': if __name__ == '__main__':
sys.exit(git_hook(complexity=COMPLEXITY, strict=STRICT)) sys.exit(git_hook(complexity=COMPLEXITY, strict=STRICT, ignore='E501'))
If *strict* option is set to **True**, any warning will block the commit. When If *strict* option is set to **True**, any warning will block the commit. When

View file

@ -11,6 +11,7 @@ except ImportError:
import optparse import optparse
import sys import sys
from flake8.util import skip_warning
from collections import defaultdict from collections import defaultdict
WARNING_CODE = "W901" WARNING_CODE = "W901"
@ -243,14 +244,16 @@ def get_code_complexity(code, min=7, filename='stdin'):
# ? # ?
continue continue
if graph.complexity() >= min: if graph.complexity() >= min:
msg = '%s:%d:1: %s %r is too complex (%d)' % ( graph.filename = filename
filename, if not skip_warning(graph):
graph.lineno, msg = '%s:%d:1: %s %r is too complex (%d)' % (
WARNING_CODE, filename,
graph.entity, graph.lineno,
graph.complexity(), WARNING_CODE,
) graph.entity,
complex.append(msg) graph.complexity(),
)
complex.append(msg)
if len(complex) == 0: if len(complex) == 0:
return 0 return 0

File diff suppressed because it is too large Load diff

View file

@ -17,10 +17,12 @@ from flake8 import pep8
from flake8 import pyflakes from flake8 import pyflakes
from flake8 import mccabe from flake8 import mccabe
pep8style = None
def check_file(path, complexity=-1): def check_file(path, complexity=-1):
warnings = pyflakes.checkPath(path) warnings = pyflakes.checkPath(path)
warnings += pep8.input_file(path) warnings += pep8style.input_file(path)
if complexity > -1: if complexity > -1:
warnings += mccabe.get_module_complexity(path, complexity) warnings += mccabe.get_module_complexity(path, complexity)
return warnings return warnings
@ -28,7 +30,7 @@ def check_file(path, complexity=-1):
def check_code(code, complexity=-1): def check_code(code, complexity=-1):
warnings = pyflakes.check(code, 'stdin') warnings = pyflakes.check(code, 'stdin')
warnings += pep8.input_file(StringIO(code)) warnings += pep8style.input_file(StringIO(code))
if complexity > -1: if complexity > -1:
warnings += mccabe.get_code_complexity(code, complexity) warnings += mccabe.get_code_complexity(code, complexity)
return warnings return warnings
@ -52,7 +54,9 @@ def _get_python_files(paths):
def main(): def main():
options, args = pep8.process_options() global pep8style
pep8style = pep8.StyleGuide(parse_argv=True, config_file=True)
options = pep8style.options
complexity = options.max_complexity complexity = options.max_complexity
builtins = set(options.builtins) builtins = set(options.builtins)
warnings = 0 warnings = 0
@ -61,8 +65,8 @@ def main():
orig_builtins = set(pyflakes._MAGIC_GLOBALS) orig_builtins = set(pyflakes._MAGIC_GLOBALS)
pyflakes._MAGIC_GLOBALS = orig_builtins | builtins pyflakes._MAGIC_GLOBALS = orig_builtins | builtins
if args and options.filename is not None: if pep8style.paths and options.filename is not None:
for path in _get_python_files(args): for path in _get_python_files(pep8style.paths):
warnings += check_file(path, complexity) warnings += check_file(path, complexity)
else: else:
# wait for 1 second on the stdin fd # wait for 1 second on the stdin fd
@ -121,6 +125,7 @@ def _initpep8():
pep8.options.logical_checks = pep8.find_checks('logical_line') pep8.options.logical_checks = pep8.find_checks('logical_line')
pep8.options.counters = dict.fromkeys(pep8.BENCHMARK_KEYS, 0) pep8.options.counters = dict.fromkeys(pep8.BENCHMARK_KEYS, 0)
pep8.options.messages = {} pep8.options.messages = {}
pep8.options.max_line_length = 79
pep8.args = [] pep8.args = []
@ -131,8 +136,11 @@ def run(command):
[line.strip() for line in p.stderr.readlines()]) [line.strip() for line in p.stderr.readlines()])
def git_hook(complexity=-1, strict=False): def git_hook(complexity=-1, strict=False, ignore=None):
_initpep8() _initpep8()
if ignore:
pep8.options.ignore=ignore
warnings = 0 warnings = 0
_, files_modified, _ = run("git diff-index --cached --name-only HEAD") _, files_modified, _ = run("git diff-index --cached --name-only HEAD")
@ -191,6 +199,9 @@ else:
yield "%s.py" % filename yield "%s.py" % filename
def run(self): def run(self):
global pep8style
pep8style = pep8.StyleGuide(config_file=True)
_initpep8() _initpep8()
# _get_python_files can produce the same file several # _get_python_files can produce the same file several

View file

@ -1,14 +1,19 @@
import sys import sys
ispy3 = sys.version_info[0] == 3 ispy3 = sys.version_info[0] == 3
issetuptools = False
kwargs = {}
if ispy3: if ispy3:
from distutils.core import setup # NOQA from distutils.core import setup # NOQA
else: else:
try: try:
from setuptools import setup # NOQA from setuptools import setup # NOQA
issetuptools = True kwargs = {
'entry_points':
{'distutils.commands': ['flake8 = flake8.run:Flake8Command']},
'tests_require': ['nose'],
'test_suite': 'nose.collector'
}
except ImportError: except ImportError:
from distutils.core import setup # NOQA from distutils.core import setup # NOQA
@ -16,10 +21,6 @@ from flake8 import __version__
README = open('README').read() README = open('README').read()
entry_points = {}
if issetuptools:
entry_points["distutils.commands"] = ["flake8 = flake8.run:Flake8Command"]
setup( setup(
name="flake8", name="flake8",
license="MIT", license="MIT",
@ -30,7 +31,6 @@ setup(
url="http://bitbucket.org/tarek/flake8", url="http://bitbucket.org/tarek/flake8",
packages=["flake8", "flake8.tests"], packages=["flake8", "flake8.tests"],
scripts=["flake8/flake8"], scripts=["flake8/flake8"],
entry_points=entry_points,
long_description=README, long_description=README,
classifiers=[ classifiers=[
"Environment :: Console", "Environment :: Console",
@ -39,4 +39,5 @@ setup(
"Programming Language :: Python", "Programming Language :: Python",
"Topic :: Software Development", "Topic :: Software Development",
"Topic :: Utilities", "Topic :: Utilities",
]) ],
**kwargs)