enumizer
1.0.0
枚舉器是Golang生成枚舉助手並檢查Switch語句中的枚舉覆蓋範圍的命令行工具。
$ go install github.com/neglect-yp/enumizer@latest
嘗試之前,您需要添加標記評論。請參閱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.
添加標記註釋,例如// enumizer:target ,以進行枚舉變體。
package myenum
type MyEnum int
// enumizer:target
const (
A MyEnum = iota
B
C
)然後,您可以生成enumizer generate ./...生成的文件名是enumizer.gen.go默認情況下。 enumizer.gen.go如下:
// 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
}您可以檢查Switch語句涵蓋經過的所有枚舉的所有變體。如果您的代碼使用MyEnum ,例如以下內容,則會警告您,因為Switch語句中沒有A和C案例。
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