تقارير معقدة متداخلة إذا كانت البيانات في رمز GO ، من خلال حساب تعقيداتها بناءً على القواعد المحددة بواسطة الورقة البيضاء التعقيد المعرفي بواسطة G. Ann Campbell.
يساعدك في العثور على ما إذا كانت العبارات التي تجعل الكود الخاص بك يصعب قراءته ، ويوضح الأجزاء المراد إعادة تشكيلها.
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 تعقيدًا إذا كانت البيانات افتراضيًا ، ويمكنك تحديد عدد العدد الذي يجب إظهاره باستخدام علامة -top .
إنه يحسب تعقيدات إذا كانت البيانات وفقًا لقواعد التعشيش للتعقيد المعرفي. نظرًا لأن رمزك الأكثر حدوثًا ، كلما كان من الصعب السبب ، فإنه يقيم زيادة في التعشيش:
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
}
}
}
}يرجى الاطلاع على التعقيد المعرفي: طريقة جديدة لقياس الورق الأبيض القابلية للفهم بواسطة G. Ann Campbell لمزيد من التفاصيل حول التعقيد المعرفي.