woodpecker/vendor/github.com/Antonboom/nilnil/pkg/analyzer/config.go
2021-11-16 21:07:53 +01:00

78 lines
1.4 KiB
Go

package analyzer
import (
"fmt"
"sort"
"strings"
)
func newDefaultCheckedTypes() checkedTypes {
return checkedTypes{
ptrType: struct{}{},
funcType: struct{}{},
ifaceType: struct{}{},
mapType: struct{}{},
chanType: struct{}{},
}
}
const separator = ','
type typeName string
func (t typeName) S() string {
return string(t)
}
const (
ptrType typeName = "ptr"
funcType typeName = "func"
ifaceType typeName = "iface"
mapType typeName = "map"
chanType typeName = "chan"
)
var knownTypes = []typeName{ptrType, funcType, ifaceType, mapType, chanType}
type checkedTypes map[typeName]struct{}
func (c checkedTypes) Contains(t typeName) bool {
_, ok := c[t]
return ok
}
func (c checkedTypes) String() string {
result := make([]string, 0, len(c))
for t := range c {
result = append(result, t.S())
}
sort.Strings(result)
return strings.Join(result, string(separator))
}
func (c checkedTypes) Set(s string) error {
types := strings.FieldsFunc(s, func(c rune) bool { return c == separator })
if len(types) == 0 {
return nil
}
c.disableAll()
for _, t := range types {
switch tt := typeName(t); tt {
case ptrType, funcType, ifaceType, mapType, chanType:
c[tt] = struct{}{}
default:
return fmt.Errorf("unknown checked type name %q (see help)", t)
}
}
return nil
}
func (c checkedTypes) disableAll() {
for k := range c {
delete(c, k)
}
}