Nakedret es una herramienta de análisis estático para encontrar retornos desnudos en funciones mayores que una longitud de función especificada.
Instale Nakedret a través de Go Instalar:
go install github.com/alexkohler/nakedret/v2/cmd/nakedret @ latest Si aún no ha agregado su directorio GOPATH/bin a su variable de entorno PATH , deberá hacerlo.
Windows (CMD):
set PATH = %PATH% ;C:yourGOPATHbinBash (puede verificar una ruta):
# Check if nakedret is on PATH
which nakedret
export PATH= $PATH :/your/GOPATH/bin # to set path if it does not exist Similar a otras herramientas anaylsis estáticas GO (como golint , go vet ), NakedRet se puede invocar con uno o más nombres de archivo, directorios o paquetes nombrados por su ruta de importación. Nakedret también apoya el ... comodín.
nakedret [flags] files/directories/packages
Actualmente, el único indicador admitido es -l, que es un indicador numérico opcional para especificar la longitud máxima que puede ser una función (en términos de longitud de línea). Si no se especifica, es predeterminado a 5.
También se puede ejecutar usando go vet :
go vet -vettool= $( which nakedret ) ./...Como se señaló en los comentarios de la revisión del código de GO:
Los retornos desnudos están bien si la función es un puñado de líneas. Una vez que sea una función de tamaño mediano, sea explícito con sus valores de retorno. Corolario: no vale la pena nombrar los parámetros de resultados solo porque le permite usar devoluciones desnudas. La claridad de los documentos siempre es más importante que guardar una o dos línea en su función.
Esta herramienta tiene como objetivo detectar retornos desnudos en funciones no triviales.
Tomemos el paquete types en la fuente GO como ejemplo:
$ 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 A continuación se muestra uno de los usos no tan intuitivos de los retornos desnudos en 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 puede ser útil para algunos.¡Solicitud de solicitud de bienvenida!
Si has disfrutado de Nakedret, ¡eche un vistazo a mis otras herramientas estáticas de Anaylsis!