mccabe icon indicating copy to clipboard operation
mccabe copied to clipboard

[Proposal] Add Cognitive Complexity as new option

Open mikeweltevrede opened this issue 1 week ago • 0 comments

Introduction

I would like to request to add "Cognitive Complexity" to this library as an option to select in the CLI and through hooks. This is a common quality check in the SonarQube application, used by many for static code checking.

Please see this document written by Sonar: https://www.sonarsource.com/docs/CognitiveComplexity.pdf. Importantly: "Unlike Cyclomatic Complexity, Cognitive Complexity adds a fundamental increment for each method in a recursion cycle, whether direct or indirect".

I am curious as to the opinions of others :)

Example 1

I like the example in the PDF, where the Cyclomatic Complexity is the same, but the Cognitive Complexity is vastly different: image

image

Example 2

Consider the following code:

for _ in [i for i in range(5)]:
    for _ in [i for i in range(5)]:
        for _ in [i for i in range(5)]:
            for j in [i for i in range(5)]:
                if j == 2:
                    ...
                else:
                    if j > 3:
                        ...

The Cyclomatic Complexity, also the one currently reported bymccabe, is 7: image

The Cognitive Complexity, as reported by Sonar, is 22 due to all of the nesting.

mikeweltevrede avatar Jun 25 '24 13:06 mikeweltevrede