enumizer
1.0.0
Enumizerは、Golangが列挙ヘルパーを生成し、スイッチステートメントで列挙カバレッジを確認するためのコマンドラインツールです。
$ 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
}また、スイッチステートメントが渡された列挙のすべてのバリエーションをカバーすることを確認できます。次のようにMyEnumを使用するコードがある場合、スイッチステートメントに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