David Stanek wrote a nice utility to measure code complexity. This post explains the details. Anyway, I downloaded his code and tried it out. I really like it:

$ cat matt.py

"""A few functions for use with pygenie."""

def f(x):

"Make an 8-way branch, 1 layer deep."

if x == 1: return 1

elif x == 2: return 2

elif x == 3: return 3

elif x == 4: return 4

elif x == 5: return 5

elif x == 6: return 6

elif x == 7: return 7

elif x == 8: return 8

```
```def g(a, b, c):

"This function has 8 paths."

if a:

if b:

if c:

return 1 # a and b and c.

else:

return 2 # a and b and not c.

else:

if c:

return 3 # a and not b and c

else:

return 4 # a and not b and not c.

else:

if b:

if c:

return 5 # not a and b and c.

else:

return 6 # not a and not b and c.

else:

if c:

return 7 # not a and b and not c.

else:

return 8 # not a and not b and not c.

`def h(x):`

if x: return True

else: return False

And this is what happens when I run the code:

$ ./pygenie.py complexity matt.py

File: /home/matt/svn-checkouts/cyclic_complexity/matt.py

Type Name Complexity

--------------------

F f 9

F g 8

The functions f and g have a complexity exceeding 7, so they print out.

This might make a nice nose plugin.