package config import ( "os" "strings" hcversion "github.com/hashicorp/go-version" "github.com/ldez/gomoddirectives" ) // Config encapsulates the config data specified in the golangci-lint yaml config file. type Config struct { cfgDir string // The directory containing the golangci-lint config file. Run Run `mapstructure:"run"` Output Output `mapstructure:"output"` LintersSettings LintersSettings `mapstructure:"linters-settings"` Linters Linters `mapstructure:"linters"` Issues Issues `mapstructure:"issues"` Severity Severity `mapstructure:"severity"` Version Version // Flag only. // TODO(ldez) only used by the version command. InternalCmdTest bool // Option is used only for testing golangci-lint command, don't use it InternalTest bool // Option is used only for testing golangci-lint code, don't use it } // GetConfigDir returns the directory that contains golangci config file. func (c *Config) GetConfigDir() string { return c.cfgDir } func NewDefault() *Config { return &Config{ LintersSettings: defaultLintersSettings, } } type Version struct { Format string `mapstructure:"format"` Debug bool `mapstructure:"debug"` } func IsGoGreaterThanOrEqual(current, limit string) bool { v1, err := hcversion.NewVersion(strings.TrimPrefix(current, "go")) if err != nil { return false } l, err := hcversion.NewVersion(limit) if err != nil { return false } return v1.GreaterThanOrEqual(l) } func DetectGoVersion() string { file, _ := gomoddirectives.GetModuleFile() if file != nil && file.Go != nil && file.Go.Version != "" { return file.Go.Version } v := os.Getenv("GOVERSION") if v != "" { return v } return "1.17" }