NakedRet هي أداة تحليل ثابت GO لإيجاد عوائد عارية في وظائف أكبر من طول الوظيفة المحدد.
تثبيت NakedRet عبر GO تثبيت:
go install github.com/alexkohler/nakedret/v2/cmd/nakedret @ latest إذا لم تقم بالفعل بإضافة دليل GOPATH/bin إلى متغير بيئة PATH ، فستحتاج إلى القيام بذلك.
Windows (CMD):
set PATH = %PATH% ;C:yourGOPATHbinباش (يمكنك التحقق من مسار):
# Check if nakedret is on PATH
which nakedret
export PATH= $PATH :/your/GOPATH/bin # to set path if it does not exist على غرار أدوات Go Static Static anaylsis (مثل golint ، go vet ) ، يمكن استدعاء NakedRet بأسماء أو أكثر من أسماء الملفات أو الدلائل أو الحزم التي يسمى مسار الاستيراد. NakedRet أيضا يدعم ... Wildcard.
nakedret [flags] files/directories/packages
في الوقت الحالي ، فإن العلامة الوحيدة المدعومة هي -L ، وهي علامة رقمية اختيارية لتحديد الحد الأقصى للطول الذي يمكن أن تكون عليه الوظيفة (من حيث طول الخط). إذا لم يتم تحديدها ، فإنه يتخلف عن 5.
يمكن أيضًا تشغيله باستخدام go vet :
go vet -vettool= $( which nakedret ) ./...كما هو مذكور في تعليقات مراجعة رمز GO:
العوائد العارية على ما يرام إذا كانت الوظيفة حفنة من الخطوط. بمجرد أن تكون وظيفة متوسطة الحجم ، تكون صريحة مع قيم الإرجاع الخاصة بك. النتيجة الطبيعية: لا يستحق ذلك تسمية معلمات النتائج لمجرد أنها تمكنك من استخدام عائدات عارية. يعد وضوح المستندات دائمًا أكثر أهمية من حفظ خط أو خطين في وظيفتك.
تهدف هذه الأداة إلى التقاط عوائد عارية على الوظائف غير التافهة.
لنأخذ حزمة types في مصدر GO كمثال:
$ nakedret -l 25 types/
types/check.go:245 checkFiles naked returns on 26 line function
types/typexpr.go:443 collectParams naked returns on 53 line function
types/stmt.go:275 caseTypes naked returns on 27 line function
types/lookup.go:275 MissingMethod naked returns on 39 line function فيما يلي أحد الاستخدامات غير البديهية للعائدات المجردة في types/lookup.go .
func MissingMethod ( V Type , T * Interface , static bool ) ( method * Func , wrongType bool ) {
// fast path for common case
if T . Empty () {
return
}
// TODO(gri) Consider using method sets here. Might be more efficient.
if ityp , _ := V . Underlying ().( * Interface ); ityp != nil {
// TODO(gri) allMethods is sorted - can do this more efficiently
for _ , m := range T . allMethods {
_ , obj := lookupMethod ( ityp . allMethods , m . pkg , m . name )
switch {
case obj == nil :
if static {
return m , false
}
case ! Identical ( obj . Type (), m . typ ):
return m , true
}
}
return
}
// A concrete type implements T if it implements all methods of T.
for _ , m := range T . allMethods {
obj , _ , _ := lookupFieldOrMethod ( V , false , m . pkg , m . name )
f , _ := obj .( * Func )
if f == nil {
return m , false
}
if ! Identical ( f . typ , m . typ ) {
return m , true
}
}
return
}build.Context.UseAllFiles قد يكون مفيدًا للبعض.سحب طلبات الترحيب!
إذا كنت قد استمتعت بـ NakedRet ، فقم بإلقاء نظرة على أدوات Anaylsis الثابتة الأخرى!