รายงานซ้อนกันที่ซับซ้อนหากข้อความในรหัส GO โดยการคำนวณความซับซ้อนตามกฎที่กำหนดโดยกระดาษสีขาวที่ซับซ้อนทางปัญญาโดย G. Ann Campbell
ช่วยให้คุณค้นหาว่าข้อความที่ทำให้รหัสของคุณอ่านยากและชี้แจงส่วนที่จะ refactor
go get github.com/nakabonne/nestif/cmd/nestif
nestif ได้รวมเข้ากับ Golangci-Lint แล้ว โปรดดูคำแนะนำที่นั่นและเปิดใช้งาน
nestif ผู้ให้บริการ ...
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 flag
มันคำนวณความซับซ้อนของงบ 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
}
}
}
}โปรดดูความซับซ้อนทางปัญญา: วิธีการใหม่ในการวัดความเข้าใจในกระดาษสีขาวโดย G. Ann Campbell สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความซับซ้อนทางปัญญา