cyclomatic
1.0.0
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/cyclomaticThen, 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 > 10Also, 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 > 15analysis.AnalyzerFirst, install the package via go get.
$ go get github.com/ichiban/cyclomaticThen, 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:
if or for, increment the complexity&& or ||, increment the complexityswitch or select, increase the complexity by the number of values listed after casesThis 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: