Enumizer es una herramienta de línea de comandos para que Golang genere ayudantes de Enum y verifique la cobertura de Enum en las declaraciones de conmutadores.
$ go install github.com/neglect-yp/enumizer@latest
Debe agregar comentarios de marcador antes de probarlo. Consulte la sección 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.
Agregue comentarios de marcador como // enumizer:target por encima de sus bloques constantes para las variantes enum.
package myenum
type MyEnum int
// enumizer:target
const (
A MyEnum = iota
B
C
) Luego puede generar ayudantes enums con enumizer generate ./... El nombre del archivo generado es enumizer.gen.go de forma predeterminada. enumizer.gen.go es el siguiente:
// 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
} Y puede verificar que las declaraciones de Switch cubran todas las variantes de Enum pasada. Si tiene un código que usa MyEnum , como el siguiente, se le advertirá porque no hay casos A y C en la instrucción 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