Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/The-Compiler/pytest-mccabe
mccabe code complexity checker plugin for pytest. You might want to switch to pytest-flake8 or tox + flake8 instead.
https://github.com/The-Compiler/pytest-mccabe
Last synced: 11 days ago
JSON representation
mccabe code complexity checker plugin for pytest. You might want to switch to pytest-flake8 or tox + flake8 instead.
- Host: GitHub
- URL: https://github.com/The-Compiler/pytest-mccabe
- Owner: The-Compiler
- License: mit
- Created: 2015-06-02T06:01:13.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2020-07-22T20:09:26.000Z (over 4 years ago)
- Last Synced: 2024-10-28T17:34:48.530Z (16 days ago)
- Language: Python
- Homepage:
- Size: 58.6 KB
- Stars: 10
- Watchers: 4
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
pytest-mccabe
=============.. image:: https://travis-ci.org/The-Compiler/pytest-mccabe.svg?branch=master
:target: https://travis-ci.org/The-Compiler/pytest-mccabepytest plugin for checking cyclomatic complexity of python source with
`mccabe`_.**NOTE:** I (`@The-Compiler`_) stopped using this plugin in 2016. While I will still review pull requests and release new versions if needed by the community, I do not have the time to continue maintaining this plugin myself. You might want to consider switching to `pytest-flake8`_ or `tox`_ + `flake8`_ instead (see some `arguments`_ on why).
.. _mccabe: https://pypi.python.org/pypi/mccabe/
.. _@The-Compiler: https://github.com/The-Compiler
.. _pytest-flake8: https://github.com/tholo/pytest-flake8
.. _tox: https://tox.readthedocs.io/
.. _arguments: https://github.com/The-Compiler/pytest-mccabe/issues/7#issuecomment-654698075Usage
-----install via::
pip install pytest-mccabe
if you then type::
pytest --mccabe
every file ending in ``.py`` will be discovered and run through mccabe,
starting from the command line arguments.Simple usage example
--------------------Consider you have this (deliberately bad and complex) code:
.. code-block:: python
# module.py
import random
import os.pathdef some_function():
num = random.random()
if 0 <= num < 0.1:
print("1")
elif 0.1 <= num < 0.2:
print("2")
elif 0.2 <= num < 0.3:
print("3")
elif 0.3 <= num < 0.4:
print("4")
elif 0.4 <= num < 0.5:
print("5")
elif 0.5 <= num < 0.6:
print("6")
elif 0.6 <= num < 0.7:
print("7")
elif 0.7 <= num < 0.8:
print("8")
elif 0.8 <= num < 0.9:
print("9")
elif 0.9 <= num < 1:
print("10")Running pytest with pytest-mccabe installed shows you this function is
considered too complex::$ pytest -q --mccabe module.py
F
============================== FAILURES ==============================
____________________________ mccabe-check ____________________________
.../module.py:4: C901 'some_function' is too complex (11)Configuring mccabe complexity per project and file
--------------------------------------------------You may configure the maximum complexity for your project
by adding an ``mccabe-complexity`` entry to pytest config file (e.g.
``setup.cfg``) like this:.. code-block:: ini
[pytest]
mccabe-complexity=15Rerunning with the above example will now look better::
$ pytest -q --mccabe foo.py
.
1 passed in 0.00 secondsIf you have some files where you want to set a higher complexity than the
project-wide one, you can start a mccabe-complexity line with a glob-pattern:.. code-block:: ini
[pytest]
mccabe-complexity =
*.py 7
magic.py 10Ignoring certain functions
--------------------------You can exclude certain functions from the complexity check by adding comments
like this:.. code-block:: python
def some_function(): # noqa
...def another_function(): # pragma: no mccabe
...(both will work - ``# noqa`` is mainly there for `flake8`_ compatibility)
.. _flake8: https://pypi.python.org/pypi/flake8
Running mccabe checks and no other tests
----------------------------------------You can restrict your test run to only perform "mccabe" tests
and not any other tests by typing::pytest --mccabe -m mccabe
This will only run tests that are marked with the "mccabe" keyword
which is added for the mccabe test items added by this plugin.If you are using pytest < 2.4, then use the following invocation
to the same effect::pytest --mccabe -k mccabe
Notes
-----The repository of this plugin is at https://github.com/The-Compiler/pytest-mccabe
For more info on pytest see https://pytest.org
The code is based on Florian Schulze's excellent `pytest-flakes`_ - Thanks!
.. _pytest-flakes: https://pypi.python.org/pypi/pytest-flakes
Changes
=======0.1
---- Initial release.
1.0
---- Drop support for Python 2.6, 3.2, 3.3 and 3.4
- Add support for Python 3.5, 3.6 and 3.7
- Make this plugin compatible with pytest 4.x and 5.x
- Drop support for "setup.py test"
- Remove outdated pytest-cache dependency
- Various code/CI cleanups2.0
---- Drop support for Python 2.7
- Drop support for pytest < 5.4
- Add support for Python 3.8 (no changes required)
- Fix deprecation warnings with pytest >= 5.4 (thanks to Martin Thoma for the PR!)
- Various code/CI cleanups