85 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package config
 | 
						|
 | 
						|
import (
 | 
						|
	"regexp"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
type Config struct {
 | 
						|
	Checks         map[string]bool
 | 
						|
	IgnoredNumbers map[string]struct{}
 | 
						|
	Excludes       []*regexp.Regexp
 | 
						|
}
 | 
						|
 | 
						|
type Option func(config *Config)
 | 
						|
 | 
						|
func DefaultConfig() *Config {
 | 
						|
	return &Config{
 | 
						|
		Checks: map[string]bool{},
 | 
						|
		IgnoredNumbers: map[string]struct{}{
 | 
						|
			"0": {},
 | 
						|
			"1": {},
 | 
						|
		},
 | 
						|
		Excludes: []*regexp.Regexp{
 | 
						|
			regexp.MustCompile(`_test.go`),
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func WithOptions(options ...Option) *Config {
 | 
						|
	c := DefaultConfig()
 | 
						|
	for _, option := range options {
 | 
						|
		option(c)
 | 
						|
	}
 | 
						|
	return c
 | 
						|
}
 | 
						|
 | 
						|
func WithExcludes(excludes string) Option {
 | 
						|
	return func(config *Config) {
 | 
						|
		if excludes == "" {
 | 
						|
			return
 | 
						|
		}
 | 
						|
 | 
						|
		for _, exclude := range strings.Split(excludes, ",") {
 | 
						|
			config.Excludes = append(config.Excludes, regexp.MustCompile(exclude))
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func WithIgnoredNumbers(numbers string) Option {
 | 
						|
	return func(config *Config) {
 | 
						|
		if numbers == "" {
 | 
						|
			return
 | 
						|
		}
 | 
						|
 | 
						|
		for _, number := range strings.Split(numbers, ",") {
 | 
						|
			config.IgnoredNumbers[number] = struct{}{}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func WithCustomChecks(checks string) Option {
 | 
						|
	return func(config *Config) {
 | 
						|
		if checks == "" {
 | 
						|
			return
 | 
						|
		}
 | 
						|
 | 
						|
		for name, _ := range config.Checks {
 | 
						|
			config.Checks[name] = false
 | 
						|
		}
 | 
						|
 | 
						|
		for _, name := range strings.Split(checks, ",") {
 | 
						|
			config.Checks[name] = true
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (c *Config) IsCheckEnabled(name string) bool {
 | 
						|
	return c.Checks[name]
 | 
						|
}
 | 
						|
 | 
						|
func (c *Config) IsIgnoredNumber(number string) bool {
 | 
						|
	_, ok := c.IgnoredNumbers[number]
 | 
						|
	return ok
 | 
						|
}
 |