Go cyclomatic complexity command and analysis.Analyzer
.
It is important to keep your functions simple and error-free. cyclomatic
lets you know when your functions get too complex and error-prone.
First, install cyclomatic
command via go get
.
$ go get github.com/ichiban/cyclomatic/cmd/cyclomatic
Then, run cyclomatic
command at your package directory.
$ cyclomatic ./...
/Users/ichiban/src/example.com/package/foo.go:100:1: cyclomatic complexity of example.com/package.Foo exceeded limit 13 > 10
/Users/ichiban/src/example.com/package/foo.go:200:1: cyclomatic complexity of example.com/package.Bar exceeded limit 22 > 10
Also, you can relax the limit with -limit
flag.
$ cyclomatic -limit 15 ./...
/Users/ichiban/src/example.com/package/foo.go:200:1: cyclomatic complexity of example.com/package.Bar exceeded limit 22 > 15
First, install the package via go get
.
$ go get github.com/ichiban/cyclomatic
Then, include cyclomatic.Analyzer
in your checker.
package main
import (
"golang.org/x/tools/go/analysis"
"golang.org/x/tools/go/analysis/multichecker"
"golang.org/x/tools/go/analysis/passes/nilfunc"
"golang.org/x/tools/go/analysis/passes/printf"
"golang.org/x/tools/go/analysis/passes/shift"
"github.com/ichiban/cyclomatic"
)
func main() {
multichecker.Main(
// other analyzers of your choice
nilfunc.Analyzer,
printf.Analyzer,
shift.Analyzer,
cyclomatic.Analyzer,
)
}
For each function definition:
- The base complexity is 1
- When we see
if
orfor
, increment the complexity - When we see
&&
or||
, increment the complexity - When we see
switch
orselect
, increase the complexity by the number of values listed aftercase
s
This project is licensed under the MIT License - see the LICENSE.md file for details
This package is based on these packages but slightly differs on how to count complexity: