diff --git a/pkg/commands/config.go b/pkg/commands/config.go index eba00fe0d770..6628aa427b05 100644 --- a/pkg/commands/config.go +++ b/pkg/commands/config.go @@ -96,7 +96,7 @@ func (c *configCommand) preRunE(cmd *cobra.Command, args []string) error { // It only needs to know the path of the configuration file. cfg := config.NewDefault() - loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts, cfg, args) + loader := config.NewLintersLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts, cfg, args) err := loader.Load(config.LoadOptions{}) if err != nil { diff --git a/pkg/commands/fmt.go b/pkg/commands/fmt.go index a67be04fd1dc..c6b10a62b652 100644 --- a/pkg/commands/fmt.go +++ b/pkg/commands/fmt.go @@ -80,7 +80,7 @@ func newFmtCommand(logger logutils.Log, info BuildInfo) *fmtCommand { func (c *fmtCommand) persistentPreRunE(cmd *cobra.Command, args []string) error { c.log.Infof("%s", c.buildInfo.String()) - loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) + loader := config.NewFormattersLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) err := loader.Load(config.LoadOptions{CheckDeprecation: true, Validation: true}) if err != nil { diff --git a/pkg/commands/formatters.go b/pkg/commands/formatters.go index 0c64056550be..a3fafd1d25c9 100644 --- a/pkg/commands/formatters.go +++ b/pkg/commands/formatters.go @@ -69,7 +69,7 @@ func newFormattersCommand(logger logutils.Log) *formattersCommand { } func (c *formattersCommand) preRunE(cmd *cobra.Command, args []string) error { - loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) + loader := config.NewFormattersLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) err := loader.Load(config.LoadOptions{Validation: true}) if err != nil { diff --git a/pkg/commands/linters.go b/pkg/commands/linters.go index 3578bc4fbbdd..40036bb8567f 100644 --- a/pkg/commands/linters.go +++ b/pkg/commands/linters.go @@ -69,7 +69,7 @@ func newLintersCommand(logger logutils.Log) *lintersCommand { } func (c *lintersCommand) preRunE(cmd *cobra.Command, args []string) error { - loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) + loader := config.NewLintersLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) err := loader.Load(config.LoadOptions{Validation: true}) if err != nil { diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 7faa00161fdb..a3e9df6de3fc 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -151,7 +151,7 @@ func (c *runCommand) persistentPreRunE(cmd *cobra.Command, args []string) error c.log.Infof("%s", c.buildInfo.String()) - loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) + loader := config.NewLintersLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args) err := loader.Load(config.LoadOptions{CheckDeprecation: true, Validation: true}) if err != nil { diff --git a/pkg/config/loader.go b/pkg/config/loader.go index e153c6adc169..ffa02d6bcdb5 100644 --- a/pkg/config/loader.go +++ b/pkg/config/loader.go @@ -17,6 +17,11 @@ import ( var errConfigDisabled = errors.New("config is disabled by --no-config") +const ( + modeLinters = "linters" + modeFormatters = "formatters" +) + type LoaderOptions struct { Config string // Flag only. The path to the golangci config file, as specified with the --config argument. NoConfig bool // Flag only. @@ -33,9 +38,25 @@ type Loader struct { fs *pflag.FlagSet cfg *Config + + mode string +} + +func NewLintersLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderOptions, cfg *Config, args []string) *Loader { + loader := newLoader(log, v, fs, opts, cfg, args) + loader.mode = modeLinters + + return loader } -func NewLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderOptions, cfg *Config, args []string) *Loader { +func NewFormattersLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderOptions, cfg *Config, args []string) *Loader { + loader := newLoader(log, v, fs, opts, cfg, args) + loader.mode = modeFormatters + + return loader +} + +func newLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderOptions, cfg *Config, args []string) *Loader { return &Loader{ BaseLoader: NewBaseLoader(log, v, opts, cfg, args), fs: fs, @@ -44,18 +65,15 @@ func NewLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderO } func (l *Loader) Load(opts LoadOptions) error { - err := l.setConfigFile() + err := l.BaseLoader.Load() if err != nil { return err } - err = l.parseConfig() - if err != nil { - return err + if l.mode == modeLinters { + l.applyStringSliceHack() } - l.applyStringSliceHack() - if l.cfg.Linters.Exclusions.Generated == "" { l.cfg.Linters.Exclusions.Generated = GeneratedModeStrict }