- Notifications
You must be signed in to change notification settings - Fork60
McCabe complexity checker for Python
License
PyCQA/mccabe
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Ned's script to check McCabe complexity.
This module provides a plugin forflake8
, the Python code checker.
You can install, upgrade, or uninstallmccabe
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 bothflake8 2+
andmccabe
are installed, the plugin isavailable inflake8
:
$ flake8 --version2.0 (pep8: 1.4.2, pyflakes: 0.6.1, mccabe: 0.2)
By default the plugin is disabled. Use the--max-complexity
switch toenable it. It will emit a warning if the McCabe complexity of a function ishigher than the provided value:
$ flake8 --max-complexity 10 coolproject...coolproject/mod.py:1204:1: C901 'CoolFactory.prepare' is too complex (14)
This feature is quite useful for detecting over-complex code. According to McCabe,anything that goes beyond 10 is too complex.
Flake8 has many features that mccabe does not provide. Flake8 allows users toignore violations reported by plugins with# noqa
. Read more about this intheir documentation.To silence violations reported bymccabe
, place your# noqa: C901
onthe function definition line, where the error is reported for (possibly adecorator).
- 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
- McCabe complexity:http://en.wikipedia.org/wiki/Cyclomatic_complexity
- Drop support for all versions of Python lower than 3.6
- Add support for Python 3.8, 3.9, and 3.10
- Fix option declaration for Flake8
- Fix signature for
PathGraphingAstVisitor.default
to match the signatureforASTVisitor
- Add support for Python 3.6
- Fix handling for missing statement types
- Report actual column number of violation instead of the start of the line
- When opening files ourselves, make sure we always name the file variable
- Set default maximum complexity to -1 on the class itself
- PyCon 2016 PDX release
- Add support for Flake8 3.0
- Stop testing on Python 3.2
- Add support for async/await keywords on Python 3.5 from PEP 0492
- Include
test_mccabe.py
in releases. - Always coerce the
max_complexity
value from Flake8's entry-point to aninteger.
- Computation was wrong: the mccabe complexity starts at 1, not 2.
- The
max-complexity
value is now inclusive. E.g.: if thevalue is 10 and the reported complexity is 10, then it passes. - Add tests.
- Do not require
setuptools
in setup.py. It works around an issuewithpip
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
About
McCabe complexity checker for Python