enumizer
1.0.0
التعداد هو أداة سطر أوامر لجولانج لإنشاء مساعدين التعداد والتحقق من تغطية التعداد في عبارات التبديل.
$ 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 فوق كتل const الخاصة بك لمتغيرات التعداد.
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