Nakedret - это инструмент для статического анализа Go, чтобы найти обнаженные возвраты в функциях, превышающих указанную длину функции.
Установите Nakedret через установку Go:
go install github.com/alexkohler/nakedret/v2/cmd/nakedret @ latest Если вы еще не добавили свой каталог GOPATH/bin в переменную среды PATH , вам нужно это сделать.
Windows (CMD):
set PATH = %PATH% ;C:yourGOPATHbinBash (вы можете проверить, что путь был установлен):
# Check if nakedret is on PATH
which nakedret
export PATH= $PATH :/your/GOPATH/bin # to set path if it does not exist Подобно другим инструментам Go Static Anaylsis (например, golint , go vet ), Nakedret может быть вызвана одним или несколькими именами файлов, каталогов или пакетами, названными его путем импорта. Nakedret также поддерживает ... подстановочный знак.
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 найденный Nadedret (Nadedret вернет номер линии последнего обнаженного возврата в функции):
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!