golongfuncs เป็นเครื่องมือในการค้นหาฟังก์ชั่น "ยาว" โดยมาตรการต่าง ๆ (และการรวมกันของมาตรการ)
เครื่องมือนี้สามารถช่วยคุณตอบคำถาม:
กล่าวอีกนัยหนึ่งมันจะช่วยให้คุณกรองฟังก์ชั่นที่ยาวนาน และซับซ้อน จากที่ ยาว
go install github.com/tkrajina/golongfuncs/...
เครื่องมือนี้สามารถคำนวณฟังก์ชั่น "ความยาว" และ "ความซับซ้อน" ต่อไปนี้: มาตรการ:
lines : จำนวนบรรทัด ที่ไม่มีบรรทัดที่ว่างเปล่าบรรทัดที่สิ้นสุดบล็อก (มีเท่านั้น } ) และความคิดเห็นtotal_lines : จำนวนบรรทัด รวมถึงบรรทัดที่ว่างเปล่าและความคิดเห็นlen : จำนวนอักขระในฟังก์ชั่น (ไม่มีความคิดเห็นและบรรทัดที่ว่างเปล่า)total_len : จำนวนอักขระในฟังก์ชั่น (พร้อมความคิดเห็นและบรรทัดที่ว่างเปล่า)comments : จำนวนความคิดเห็น ความคิดเห็นหลายเส้นจะถูกนับหนึ่งครั้งcomment_lines : จำนวนบรรทัดความคิดเห็นcomplexity : ความซับซ้อนของวัฏจักร (จาก Gocyclo)max_nesting : ความลึกของบล็อกซ้อนสูงสุด (หมายเหตุ, การเริ่มต้นโครงสร้างไม่ได้นับ),total_nesting : การทำรังทั้งหมด (กล่าวอีกนัยหนึ่งถ้ารหัสถูกจัดรูปแบบอย่างถูกต้อง - แท็บการเยื้องทุกครั้งจะถูกนับหนึ่งครั้ง)in_params : จำนวนพารามิเตอร์อินพุตฟังก์ชันout_params : จำนวนพารามิเตอร์เอาต์พุตฟังก์ชันvariables : จำนวนตัวแปรในขอบเขตของฟังก์ชั่น (ไม่มีอาร์กิวเมนต์ฟังก์ชั่นและตัวรับฟังก์ชั่น)assignments : จำนวนการมอบหมายในฟังก์ชั่น (รวมถึงการประกาศตัวแปร, := , = , += , -= ... )control : จำนวนคำสั่งโฟลว์ควบคุม ( if else , switch , case , default , select และ defer )todos : แท็ก "TODO" ที่พบในความคิดเห็น (รวมถึง Function Body และคำชมเชยก่อนหน้าฟังก์ชั่น) แท็กคือ HACK , สิ่ง NOTE TODO , โน้ต, FIXME , ASAP , ISSUE , BUG และ WTFนอกจากนี้คุณสามารถรวมมาตรการ ตัวอย่างเช่น:
complexity/lines : คำนวณความซับซ้อนเฉลี่ยต่อบรรทัดของรหัสtotal_nesting/total_lines : คำนวณการทำรังเฉลี่ย (การเยื้อง) ต่อบรรทัดcomment_lines/total_lines : คำนวณบรรทัดของฟังก์ชั่นต่อบรรทัดในการคำนวณการวัดใด ๆ สำหรับรหัส Golang ของคุณ:
$ golongfuncs +variable
$ golongfuncs +total_nesting
$ golongfuncs +lines
$ golongfuncs +lines,complexity
$ golongfuncs +lines,complexity,complexity/lines
การเรียกเพียงแค่ golongfuncs (ไม่มีข้อโต้แย้ง) เป็นนามแฝงสำหรับ golongfuncs +lines
$ golongfuncs [flags] +[types] [paths...]
ค้นหาฟังก์ชั่นที่ยาวที่สุด:
$ golongfuncs <go_file>
$ golongfuncs <directory>
$ golongfuncs <directory>/...
หากไม่ได้ระบุเส้นทาง Golongfuncs จะถือว่าเป็น ./...
แสดงหลายมาตรการ:
$ golongfuncs +lines
$ golongfuncs +lines,in_params
$ golongfuncs +lines,in_params,complexity/lines
$ golongfuncs +lines +in_params +complexity/lines
หากมีการระบุหลายมาตรการผลลัพธ์จะถูกจัดเรียงตามคอลัมน์แรก (ใน lines ตัวอย่างนี้):
โดยค่าเริ่มต้นผลลัพธ์จะแสดงเฉพาะผลลัพธ์ 20 อันดับแรก เปลี่ยนด้วย -top :
$ golongfuncs -top 50
โดยค่าเริ่มต้นฟังก์ชั่นที่สั้นกว่า 10 บรรทัดจะถูกละเว้น คุณสามารถเปลี่ยนสิ่งนั้นด้วย -min-lines <n>
100 ฟังก์ชั่นที่ซับซ้อนที่สุด:
$ golongfuncs -top 100 +complexity ./...
ฟังก์ชั่นที่ซับซ้อนที่สุดนานกว่า 50 บรรทัด:
$ golongfuncs -min-lines 50 +complexity ./...
ค้นหาฟังก์ชั่นที่ยาวนาน แต่คำนวณความซับซ้อนความซับซ้อนของ AVG และการทำรัง AVG:
$ golongfuncs +lines,complexity,complexity/lines,total_nesting/total_lines .
ExampleVeryLongfunction golongfuncs/runner_test.go:118:1 lines=305.0 complexity=1.0 complexity/lines=0.1 total_nesting/total_lines=1.0
ExampleVeryComplexFunction golongfuncs/runner_test.go:10:1 lines=69.0 complexity=44.0 complexity/lines=0.6 total_nesting/total_lines=6.7
printStats main.go:54:1 lines=21.0 complexity=9.0 complexity/lines=0.4 total_nesting/total_lines=2.5
main main.go:12:1 lines=19.0 complexity=3.0 complexity/lines=0.2 total_nesting/total_lines=1.0
TestLines golongfuncs/runner_test.go:476:1 lines=15.0 complexity=2.0 complexity/lines=0.1 total_nesting/total_lines=0.9
NewVisitor golongfuncs/runner.go:94:1 lines=15.0 complexity=3.0 complexity/lines=0.2 total_nesting/total_lines=1.0
Get golongfuncs/models.go:34:1 lines=15.0 complexity=7.0 complexity/lines=0.5 total_nesting/total_lines=1.7
TestNesting golongfuncs/runner_test.go:438:1 lines=15.0 complexity=2.0 complexity/lines=0.1 total_nesting/total_lines=0.9
คุณจะเห็นได้ว่า ExampleVeryLongfunction มีความยาว (305 บรรทัด) แต่ความซับซ้อนเฉลี่ยต่ำ (0.1) และการทำรัง AVG คือ 1.0 AVG Nesting 1.0 หมายความว่า ไม่มีบล็อกซ้อนกัน ในฟังก์ชั่นนี้ หากครึ่งบรรทัดอยู่ในบล็อกซ้อน (ตัวอย่างเช่น if <expr> { ...code... } บล็อกของรหัส) การทำรัง AVG จะเป็น 1.5
ExampleVeryComplexFunction นั้นสั้นกว่า (69 บรรทัด) แต่มีความซับซ้อนโดยเฉลี่ย (ต่อบรรทัดของรหัส) 0.6 และ AVG Nesting 6.7 และนั่นอาจเป็นคำใบ้ที่ดีว่าฟังก์ชั่นต้องการการปรับโครงสร้างใหม่
ค้นหาฟังก์ชั่นที่ยาวกว่า 5 บรรทัดด้วยการทำรัง AVG (ต่อบรรทัดของรหัส) ที่ใหญ่กว่า 5 และรวมจำนวนบรรทัดทั้งหมดและจำนวนบรรทัด:
$ golongfuncs +total_nesting/total_lines,total_lines,lines -threshold 5 .
ExampleVeryComplexFunction golongfuncs/runner_test.go:10:1 total_nesting/total_lines=6.7 total_lines=108.0 lines=69.0
ค้นหาฟังก์ชั่นที่มีความยาวเส้นเฉลี่ยยาวที่สุด:
$ golongfuncs +len/lines ./...
$ golongfuncs +total_len/total_lines ./...
การทดสอบและไฟล์ผู้ขายจะถูกละเว้นให้ใช้ -include-tests และ -include-vendor หากคุณต้องการวัด
ไฟล์/ไดเรกทอรีโดยพลการสามารถละเว้นด้วย -ignore "<regexp>" ตัวอย่างเช่นหากคุณต้องการเพิกเฉยต่อไฟล์ Golang ที่มี _generated.go : -ignore "^.*_generated.go$"
ฟังก์ชั่นสามารถละเว้นได้ด้วย -ignore-func "regexp"
เครื่องมือนี้ได้รับอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0