Enumizer adalah alat baris perintah untuk Golang untuk menghasilkan pembantu enum dan memeriksa cakupan enum dalam pernyataan sakelar.
$ go install github.com/neglect-yp/enumizer@latest
Anda perlu menambahkan komentar marker sebelum mencobanya. Lihat bagian 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.
Tambahkan komentar marker seperti // enumizer:target di atas blok const Anda untuk varian enum.
package myenum
type MyEnum int
// enumizer:target
const (
A MyEnum = iota
B
C
) Maka Anda dapat menghasilkan pembantu enum dengan enumizer generate ./... Nama file yang dihasilkan adalah enumizer.gen.go secara default. enumizer.gen.go adalah sebagai berikut:
// 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
} Dan Anda dapat memeriksa bahwa pernyataan sakelar mencakup semua varian enum yang dilewatkan. Jika Anda memiliki kode yang menggunakan MyEnum , seperti berikut ini, Anda akan diperingatkan karena tidak ada kasus A dan C dalam pernyataan 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