Сообщает комплексные вложенные операторы, если в коде GO, расчет его сложности на основе правил, определяемых белой статьей когнитивной сложности Г. Энн Кэмпбелл.
Это помогает вам найти операторы, которые затрудняют чтение вашего кода, и разъясняет, какие детали рефактор.
go get github.com/nakabonne/nestif/cmd/nestif
nestif уже интегрирован с Golangci-Lint. Пожалуйста, обратитесь к инструкциям и включите это.
nestif ... оператор Glob поддерживается, и вышеизложенное эквивалент:
nestif ./...Один или несколько файлов и каталогов могут быть указаны в одной команде:
nestif dir/foo.go dir2 dir3/...Пакеты также могут быть указаны:
nestif github.com/foo/bar example.com/bar/baz usage: nestif [<flag> ...] <Go files or directories or packages> ...
-e, --exclude-dirs strings regexps of directories to be excluded for checking; comma-separated list
--json emit json format
--min int minimum complexity to show (default 1)
--top int show only the top N most complex if statements (default 10)
-v, --verbose verbose output
Допустим, вы пишете:
package main
func _ () {
if foo {
if bar {
}
}
if baz == "baz" {
if qux {
if quux {
}
}
}
}И отдать это Nestif:
$ nestif foo.go
foo.go:9:2: `if baz == "baz"` is nested (complexity: 3)
foo.go:4:2: `if foo` is nested (complexity: 1) Обратите внимание, что результаты отсортированы в порядке убывания сложности. Кроме того, он показывает только 10 самых сложных операторов IF по умолчанию, и вы можете указать, сколько показывать с флагом -top .
Он рассчитывает сложности утверждений IF в соответствии с правилами гнездования когнитивной сложности. Поскольку чем более глубоко заложенное ваш код, тем сложнее рассуждать, он оценивает приращение гнездования для него:
if condition1 {
if condition2 { // +1
if condition3 { // +2
if condition4 { // +3
}
}
}
} else и else if увеличить сложность, где бы они ни находились, потому что умственная стоимость уже оплачивалась при чтении IF:
if condition1 {
if condition2 { // +1
if condition3 { // +2
} else if condition4 { // +1
} else { // +1
if condition5 { // +3
}
}
}
}Пожалуйста, посмотрите по когнитивной сложности: новый способ измерения понятия белой бумаги Г. Энн Кэмпбелл для получения более подробной информации о когнитивной сложности.