McCabe complexity checker ========================= Ned's script to check McCabe complexity. This module provides a plugin for ``flake8``, the Python code checker. Installation ------------ You can install, upgrade, uninstall ``mccabe`` with these commands:: $ pip install mccabe $ pip install --upgrade mccabe $ pip uninstall mccabe Standalone script ----------------- 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) Plugin for Flake8 ----------------- 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. Links ----- * 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 Changes ------- 0.6.1 - 2017-01-26 `````````````````` * Fix signature for ``PathGraphingAstVisitor.default`` to match the signature for ``ASTVisitor`` 0.6.0 - 2017-01-23 `````````````````` * Add support for Python 3.6 * Fix handling for missing statement types 0.5.3 - 2016-12-14 `````````````````` * Report actual column number of violation instead of the start of the line 0.5.2 - 2016-07-31 `````````````````` * When opening files ourselves, make sure we always name the file variable 0.5.1 - 2016-07-28 `````````````````` * Set default maximum complexity to -1 on the class itself 0.5.0 - 2016-05-30 `````````````````` * PyCon 2016 PDX release * Add support for Flake8 3.0 0.4.0 - 2016-01-27 `````````````````` * Stop testing on Python 3.2 * Add support for async/await keywords on Python 3.5 from PEP 0492 0.3.1 - 2015-06-14 `````````````````` * Include ``test_mccabe.py`` in releases. * Always coerce the ``max_complexity`` value from Flake8's entry-point to an integer. 0.3 - 2014-12-17 ```````````````` * 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. 0.2.1 - 2013-04-03 `````````````````` * Do not require ``setuptools`` in setup.py. It works around an issue with ``pip`` and Python 3. 0.2 - 2013-02-22 ```````````````` * Rename project to ``mccabe``. * Provide ``flake8.extension`` setuptools entry point. * Read ``max-complexity`` from the configuration file. * Rename argument ``min_complexity`` to ``threshold``. 0.1 - 2013-02-11 ```````````````` * First release