Nakedret é uma ferramenta de análise estática para encontrar retornos nus nas funções maiores que um comprimento de função especificado.
Instale o Nakedret via Go Install:
go install github.com/alexkohler/nakedret/v2/cmd/nakedret @ latest Se você ainda não adicionou seu diretório GOPATH/bin à sua variável de ambiente PATH , precisará fazê -lo.
Windows (CMD):
set PATH = %PATH% ;C:yourGOPATHbinBash (você pode verificar um caminho foi definido):
# Check if nakedret is on PATH
which nakedret
export PATH= $PATH :/your/GOPATH/bin # to set path if it does not exist Semelhante a outras ferramentas estáticas do Anaylsis (como golint , go vet ), o Nakedret pode ser chamado com um ou mais nomes de arquivos, diretórios ou pacotes nomeados por seu caminho de importação. Nakedret também suporta o ... curinga.
nakedret [flags] files/directories/packages
Atualmente, o único sinalizador suportado é -l, que é um sinalizador numérico opcional para especificar o comprimento máximo que uma função pode ser (em termos de comprimento da linha). Se não for especificado, ele padrão é 5.
Também pode ser executado usando go vet :
go vet -vettool= $( which nakedret ) ./...Conforme observado nos comentários da revisão de código de Go do Go:
Retornos nus são bons se a função for um punhado de linhas. Quando for uma função de tamanho médio, seja explícito com seus valores de retorno. Corolário: não vale a pena nomear parâmetros de resultado apenas porque permite que você use retornos nus. A clareza dos documentos é sempre mais importante do que salvar uma ou duas linhas em sua função.
Esta ferramenta tem como objetivo capturar retornos nus sobre funções não triviais.
Vamos pegar o pacote types na fonte Go como exemplo:
$ 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 Abaixo está um dos usos não tão intuitivos de retornos nus em types/lookup.go encontrado por Nakedret (Nakedret retornará o número da linha do último retorno nu na função):
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 pode ser útil para alguns.Pull Pedidos bem -vindos!
Se você gostou do Nakedret, dê uma olhada nas minhas outras ferramentas estáticas de Anaylsis!