https://github.com/melevir/cognitive_complexity
Library to calculate Python functions cognitive complexity via code.
https://github.com/melevir/cognitive_complexity
Last synced: 3 months ago
JSON representation
Library to calculate Python functions cognitive complexity via code.
- Host: GitHub
- URL: https://github.com/melevir/cognitive_complexity
- Owner: Melevir
- License: mit
- Created: 2019-10-30T16:07:54.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-08-09T07:45:50.000Z (almost 4 years ago)
- Last Synced: 2024-12-29T09:07:41.501Z (over 1 year ago)
- Language: Python
- Size: 31.3 KB
- Stars: 40
- Watchers: 3
- Forks: 7
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# congnitive-complexity
[](https://travis-ci.org/Melevir/cognitive_complexity)
[](https://codeclimate.com/github/Melevir/cognitive_complexity/maintainability)
[](https://codeclimate.com/github/Melevir/cognitive_complexity/test_coverage)
[](https://badge.fury.io/py/cognitive-complexity)

Library to calculate Python functions cognitive complexity via code.
## Installation
```bash
pip install cognitive_complexity
```
## Usage
```python
>>> import ast
>>> funcdef = ast.parse("""
... def f(a):
... return a * f(a - 1) # +1 for recursion
... """).body[0]
>>> from cognitive_complexity.api import get_cognitive_complexity
>>> get_cognitive_complexity(funcdef)
1
```
### Flake8-Cognitive-Complexity Extension
Perhaps the most common way to use this library (especially if you are
already using the [Flake8 linter](https://flake8.pycqa.org/en/latest/))
is to use the
[flake8-cognitive-complexity extension](https://github.com/Melevir/flake8-cognitive-complexity).
If you run Flake8 with this extension installed, Flake8 will let you know
if your code is too complex. For more details and documentation, visit the
[flake8-cognitive-complexity extension repository](https://github.com/Melevir/flake8-cognitive-complexity).
## What is cognitive complexity
Here are some readings about cognitive complexity:
- [Cognitive Complexity, Because Testability != Understandability](https://blog.sonarsource.com/cognitive-complexity-because-testability-understandability);
- [Cognitive Complexity: A new way of measuring understandability](https://www.sonarsource.com/docs/CognitiveComplexity.pdf),
white paper by G. Ann Campbell;
- [Cognitive Complexity: the New Guide to Refactoring for Maintainable Code](https://www.youtube.com/watch?v=5C6AGTlKSjY);
- [Cognitive Complexity](https://docs.codeclimate.com/docs/cognitive-complexity)
from CodeClimate docs;
- [Is Your Code Readable By Humans? Cognitive Complexity Tells You](https://www.tomasvotruba.cz/blog/2018/05/21/is-your-code-readable-by-humans-cognitive-complexity-tells-you/).
## Realization details
This is not precise realization of original algorithm
proposed by [G. Ann Campbell](https://github.com/ganncamp),
but it gives rather similar results.
The algorithm gives complexity points for breaking control flow, nesting,
recursion, stacks logic operation etc.
## Contributing
We would love you to contribute to our project. It's simple:
- Create an issue with bug you found or proposal you have. Wait for
approve from maintainer.
- Create a pull request. Make sure all checks are green.
- Fix review comments if any.
- Be awesome.
Here are useful tips:
- You can run all checks and tests with `make check`. Please do it
before TravisCI does.
- We use [BestDoctor python styleguide](https://github.com/best-doctor/guides/blob/master/guides/python_styleguide.md).
Sorry, styleguide is available only in Russian for now.
- We respect [Django CoC](https://www.djangoproject.com/conduct/).
Make soft, not bullshit.