Ned's script to check McCabe complexity.
This module provides a plugin for flake8
, the Python code checker.
You can install, upgrade, uninstall mccabe
with these commands:
$ pip install mccabe $ pip install --upgrade mccabe $ pip uninstall mccabe
The complexity checker can be used directly:
$ python -m mccabe --min 5 mccabe.py ("185:1: 'PathGraphingAstVisitor.visitIf'", 5) ("71:1: 'PathGraph.to_dot'", 5) ("245:1: 'McCabeChecker.run'", 5) ("283:1: 'main'", 7) ("203:1: 'PathGraphingAstVisitor.visitTryExcept'", 5) ("257:1: 'get_code_complexity'", 5)
When both flake8 2.0
and mccabe
are installed, the plugin is
available in flake8
:
$ flake8 --version 2.0 (pep8: 1.4.2, pyflakes: 0.6.1, mccabe: 0.2)
By default the plugin is disabled. Use the --max-complexity
switch to
enable it. It will emit a warning if the McCabe complexity of a function is
higher that the value:
$ flake8 --max-complexity 10 coolproject ... coolproject/mod.py:1204:1: C901 'CoolFactory.prepare' is too complex (14)
This feature is quite useful to detect over-complex code. According to McCabe, anything that goes beyond 10 is too complex.
- Feedback and ideas: http://mail.python.org/mailman/listinfo/code-quality
- Cyclomatic complexity: http://en.wikipedia.org/wiki/Cyclomatic_complexity.
- Ned Batchelder's script: http://nedbatchelder.com/blog/200803/python_code_complexity_microtool.html
- Include
test_mccabe.py
in releases. - Always coerce the
max_complexity
value from Flake8's entry-point to an integer.
- Computation was wrong: the mccabe complexity starts at 1, not 2.
- The
max-complexity
value is now inclusive. E.g.: if the value is 10 and the reported complexity is 10, then it passes. - Add tests.
- Do not require
setuptools
in setup.py. It works around an issue withpip
and Python 3.
- Rename project to
mccabe
. - Provide
flake8.extension
setuptools entry point. - Read
max-complexity
from the configuration file. - Rename argument
min_complexity
tothreshold
.
- First release