enumizer
1.0.0
O Enumizer é uma ferramenta de linha de comando para o Golang gerar ajudantes de enum e verificar a cobertura do enum nas instruções de switch.
$ go install github.com/neglect-yp/enumizer@latest
Você precisa adicionar comentários de marcadores antes de experimentá -lo. Veja a seção Examples .
$ enumizer help
enumizer is a command-line tool to generate enum helpers and check enum coverage.
Usage:
enumizer [command]
Examples:
* Generate enum helpers
enumizer generate ./...
* Check enum coverage
enumizer cover ./...
Available Commands:
completion Generate the autocompletion script for the specified shell
cover Check that switch statements cover all variants of passed enum
generate Generate enum helpers that include stringer and validation methods
help Help about any command
Flags:
-h, --help help for enumizer
Use "enumizer [command] --help" for more information about a command.
Adicione comentários marcadores como // enumizer:target acima de seus blocos const para variantes de enum.
package myenum
type MyEnum int
// enumizer:target
const (
A MyEnum = iota
B
C
) Então você pode gerar ajudantes de enum com enumizer generate ./... O nome do arquivo gerado é enumizer.gen.go por padrão. enumizer.gen.go é o seguinte:
// Code generated by enumizer; DO NOT EDIT.
package myenum
import "fmt"
var myEnumSet = map [ MyEnum ] struct {}{
A : {},
B : {},
C : {},
}
func MyEnumList () [] MyEnum {
ret := make ([] MyEnum , 0 , len ( myEnumSet ))
for v := range myEnumSet {
ret = append ( ret , v )
}
return ret
}
func ( m MyEnum ) String () string {
switch m {
case A :
return "A"
case B :
return "B"
case C :
return "C"
default :
return "<unknown MyEnum>"
}
}
func ( m MyEnum ) IsValid () bool {
_ , ok := myEnumSet [ m ]
return ok
}
func ( m MyEnum ) Validate () error {
if ! m . IsValid () {
return fmt . Errorf ( "MyEnum(%v) is invalid" , m )
}
return nil
} E você pode verificar se as instruções de comutação cobrem todas as variantes de enum aprovadas. Se você possui código que usa MyEnum , como o seguinte, você será avisado porque não há casos A e C na instrução Switch.
package myenumuser
import "github.com/neglect-yp/enumizer/examples/myenum"
func Foo ( a myenum. MyEnum ) {
switch a {
case myenum . B :
}
}$ enumizer cover ./examples/...
/<path to homedir>/enumizer/examples/myenumuser/myenumuser.go:6:2: this switch statement doesn't cover enum variants. missing cases: A, C