enumcheck
1.0.0
이것은 여전히 WIP이므로 정확한 동작이 변할 수 있습니다.
철저한 열거 스위치를위한 분석기.
설치하려면 :
go install loov.dev/enumcheck@latest
이 패키지는 다음의 오류를보고합니다.
//enumcheck:exhaustive
type Letter byte
const (
Alpha Letter = iota
Beta
Gamma
)
func Switch ( x Letter ) {
switch x { // error: "missing cases Beta, Gamma and default"
case Alpha :
fmt . Println ( "alpha" )
case 4 : // error: "implicit conversion of 4 to Letter"
fmt . Println ( "beta" )
}
}
func Assignment () {
var x Letter
x = 123 // error: "implicit conversion of 123 to Letter
}유형과 함께 사용할 수 있습니다.
//enumcheck:exhaustive
type Expr interface {}
var _ Expr = Add {}
var _ Expr = Mul {}
type Add [] Expr
type Mul [] Expr
type Invalid [] Expr
func Switch ( x Expr ) {
switch x .( type ) { // error: "missing cases Mul"
case Add :
fmt . Println ( "alpha" )
case Invalid : // error: "implicit conversion of Invalid to Expr"
fmt . Println ( "beta" )
default :
fmt . Println ( "unknown" )
}
}
func Assignment () {
var x Expr
x = 3 // error: "implicit conversion of 3 to Expr
_ = x
}또는 구조로 :
//enumcheck:exhaustive
type Option struct { value string }
var (
True = Option { "true" }
False = Option { "false" }
Maybe = Option { "maybe" }
)
func DayNonExhaustive () {
var day Option
switch day { // want "missing cases False, Maybe and default"
case Option { "invalid" }: // want "invalid enum for enumstruct.Option"
fmt . Println ( "beta" )
case True :
fmt . Println ( "beta" )
}
} Mode //enumcheck:relaxed "기본"케이스를 선택할 수 있습니다.
//enumcheck:relaxed
type Option string
var (
Alpha = Option ( "alpha" )
Beta = Option ( "beta" )
)
func Relaxed () {
var day Option
switch day {
case Alpha :
fmt . Println ( "alpha" )
case Beta :
fmt . Println ( "beta" )
}
} Mode //enumcheck:silent 스위치 문에 대한 침묵 보고서를 허용합니다.
//enumcheck:silent
type Option string
var (
Alpha = Option ( "alpha" )
Beta = Option ( "beta" )
)
func NoErrorHere () {
var day Option
switch day {
case Beta :
fmt . Println ( "beta" )
}
}
func EnablePerSwitch () {
var day Option
switch day { //enumcheck:exhaustive
case Beta :
fmt . Println ( "beta" )
}
}