golongfuncs هي أداة للبحث عن وظائف "طويلة" من خلال تدابير مختلفة (ومجموعات من التدابير).
يمكن أن تساعدك هذه الأداة على الإجابة على خط الأسئلة:
بمعنى آخر ، سيساعدك ذلك على تصفية الوظائف الطويلة والمعقدة من تلك التي تكون طويلة .
go install github.com/tkrajina/golongfuncs/...
يمكن لهذه الأداة حساب تدابير الوظيفة التالية "طول" و "تعقيد":
lines : عدد الخطوط بدون خطوط فارغة وخطوط تنتهي (تحتوي فقط } ) ، والتعليقات ،total_lines : عدد الخطوط بما في ذلك الخطوط الفارغة والتعليقات ،len : عدد الأحرف في الوظيفة (بدون تعليقات وخطوط فارغة).total_len : عدد الأحرف في الوظيفة (مع التعليقات والخطوط الفارغة).comments : عدد التعليقات. يتم حساب التعليقات المتعددة مرة واحدة ،comment_lines : عدد خطوط التعليق ،complexity : التعقيد السيكلومي (من Gocyclo) ،max_nesting : عمق الكتل المتداخلة Max (ملاحظة ، لا يتم حساب التهيئة الهيكلية) ،total_nesting : التداخل الكلي (بمعنى آخر ، إذا تم تنسيق الرمز بشكل صحيح - يتم حساب كل علامة تبويب مسافة بادئة مرة واحدة)in_params : عدد معلمات إدخال الوظيفةout_params : عدد معلمات إخراج الوظيفةvariables : عدد المتغيرات في نطاق الوظيفة (بدون وسيطات الوظائف وأجهزة استقبال الوظائف)assignments : عدد المهام في الوظيفة (بما في ذلك الإعلانات المتغيرة ، := ، = ، += ، -= ...)control : عدد عبارات تدفق التحكم ( if ، else ، switch ، case ، default ، select defer )todos : علامات الرقم "TODO" الموجودة في التعليقات (بما في ذلك جسم الوظيفة والثاني التي تسبق الوظيفة). العلامات هي HACK ، TODO ، NOTE ، 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 Nesting:
$ 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 تعشش 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