From 24e40523aabc9628f697467b4ce1c5028d264874 Mon Sep 17 00:00:00 2001
From: Fernandez Ludovic <ldez@users.noreply.github.com>
Date: Mon, 24 Mar 2025 16:42:46 +0100
Subject: [PATCH 1/5] fix: move version validation

---
 pkg/commands/run.go  | 4 ----
 pkg/config/loader.go | 4 ++++
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/pkg/commands/run.go b/pkg/commands/run.go
index 6ae7f3bf71bd..7faa00161fdb 100644
--- a/pkg/commands/run.go
+++ b/pkg/commands/run.go
@@ -185,10 +185,6 @@ func (c *runCommand) persistentPostRunE(_ *cobra.Command, _ []string) error {
 }
 
 func (c *runCommand) preRunE(_ *cobra.Command, args []string) error {
-	if c.cfg.GetConfigDir() != "" && c.cfg.Version != "2" {
-		return fmt.Errorf("invalid version of the configuration: %q", c.cfg.Version)
-	}
-
 	dbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), c.cfg,
 		lintersdb.NewLinterBuilder(), lintersdb.NewPluginModuleBuilder(c.log), lintersdb.NewPluginGoBuilder(c.log))
 	if err != nil {
diff --git a/pkg/config/loader.go b/pkg/config/loader.go
index f3c87af07ebc..d771a7cc60a2 100644
--- a/pkg/config/loader.go
+++ b/pkg/config/loader.go
@@ -60,6 +60,10 @@ func (l *Loader) Load(opts LoadOptions) error {
 		l.cfg.Linters.Exclusions.Generated = GeneratedModeStrict
 	}
 
+	if l.cfg.GetConfigDir() != "" && l.cfg.Version != "2" {
+		return fmt.Errorf("unsupported version of the configuration: %q (require configuration v2)", l.cfg.Version)
+	}
+
 	if !l.cfg.InternalCmdTest {
 		for _, n := range slices.Concat(l.cfg.Linters.Enable, l.cfg.Linters.Disable) {
 			if n == "typecheck" {

From ea5908d619ca9d15332d3a6379fcb0b9cdf4a581 Mon Sep 17 00:00:00 2001
From: Fernandez Ludovic <ldez@users.noreply.github.com>
Date: Mon, 24 Mar 2025 16:49:30 +0100
Subject: [PATCH 2/5] fix: complexity

---
 pkg/config/loader.go | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/pkg/config/loader.go b/pkg/config/loader.go
index d771a7cc60a2..911aca4a5f92 100644
--- a/pkg/config/loader.go
+++ b/pkg/config/loader.go
@@ -60,8 +60,9 @@ func (l *Loader) Load(opts LoadOptions) error {
 		l.cfg.Linters.Exclusions.Generated = GeneratedModeStrict
 	}
 
-	if l.cfg.GetConfigDir() != "" && l.cfg.Version != "2" {
-		return fmt.Errorf("unsupported version of the configuration: %q (require configuration v2)", l.cfg.Version)
+	err = l.checkConfigurationVersion()
+	if err != nil {
+		return err
 	}
 
 	if !l.cfg.InternalCmdTest {
@@ -131,6 +132,14 @@ func (l *Loader) appendStringSlice(name string, current *[]string) {
 	}
 }
 
+func (l *Loader) checkConfigurationVersion() error {
+	if l.cfg.GetConfigDir() != "" && l.cfg.Version != "2" {
+		return fmt.Errorf("unsupported version of the configuration: %q (require configuration v2)", l.cfg.Version)
+	}
+
+	return nil
+}
+
 func (l *Loader) handleGoVersion() {
 	if l.cfg.Run.Go == "" {
 		l.cfg.Run.Go = detectGoVersion(context.Background())

From 5204feedc795c09d8fb992a2adf98f5ac7180321 Mon Sep 17 00:00:00 2001
From: Ludovic Fernandez <ldez@users.noreply.github.com>
Date: Mon, 24 Mar 2025 16:54:19 +0100
Subject: [PATCH 3/5] review

Co-authored-by: Yuri Shkuro <yurishkuro@users.noreply.github.com>
---
 pkg/config/loader.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pkg/config/loader.go b/pkg/config/loader.go
index 911aca4a5f92..6355c4d9f73b 100644
--- a/pkg/config/loader.go
+++ b/pkg/config/loader.go
@@ -134,7 +134,7 @@ func (l *Loader) appendStringSlice(name string, current *[]string) {
 
 func (l *Loader) checkConfigurationVersion() error {
 	if l.cfg.GetConfigDir() != "" && l.cfg.Version != "2" {
-		return fmt.Errorf("unsupported version of the configuration: %q (require configuration v2)", l.cfg.Version)
+		return fmt.Errorf("unsupported version of the configuration: %q (require configuration v2). See https://golangci-lint.run/product/migration-guide for migration instructions.", l.cfg.Version)
 	}
 
 	return nil

From efb27638f777555e3597b7800ebf20eb52de2559 Mon Sep 17 00:00:00 2001
From: Fernandez Ludovic <ldez@users.noreply.github.com>
Date: Mon, 24 Mar 2025 17:06:25 +0100
Subject: [PATCH 4/5] fix: tests

---
 test/enabled_linters_test.go | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/test/enabled_linters_test.go b/test/enabled_linters_test.go
index 70ad679b400b..908b8f282490 100644
--- a/test/enabled_linters_test.go
+++ b/test/enabled_linters_test.go
@@ -28,18 +28,20 @@ func TestEnabledLinters(t *testing.T) {
 		{
 			name: "disable govet in config",
 			cfg: `
-			linters:
-				disable:
-					- govet
+version: "2"
+linters:
+	disable:
+		- govet
 			`,
 			enabledLinters: getEnabledByDefaultLintersExcept(t, "govet"),
 		},
 		{
 			name: "enable revive in config",
 			cfg: `
-			linters:
-				enable:
-					- revive
+version: "2"
+linters:
+	enable:
+		- revive
 			`,
 			enabledLinters: getEnabledByDefaultLintersWith(t, "revive"),
 		},
@@ -52,17 +54,19 @@ func TestEnabledLinters(t *testing.T) {
 			name: "enable revive in cmd and enable gofmt in config",
 			args: []string{"-Erevive"},
 			cfg: `
-			formatters:
-				enable:
-					- gofmt
+version: "2"
+formatters:
+	enable:
+		- gofmt
 			`,
 			enabledLinters: getEnabledByDefaultLintersWith(t, "revive", "gofmt"),
 		},
 		{
 			name: "fast option in config",
 			cfg: `
-			linters:
-				default: fast
+version: "2"
+linters:
+	default: fast
 			`,
 			enabledLinters: getAllLintersFromGroupFast(t),
 		},
@@ -74,8 +78,9 @@ func TestEnabledLinters(t *testing.T) {
 		{
 			name: "fast option in command-line has higher priority to enable",
 			cfg: `
-			linters:
-				default: none
+version: "2"
+linters:
+	default: none
 			`,
 			args:           []string{"--default=fast"},
 			enabledLinters: getAllLintersFromGroupFast(t),

From 6594b50fd63c40b485acc131659c8232479e408b Mon Sep 17 00:00:00 2001
From: Fernandez Ludovic <ldez@users.noreply.github.com>
Date: Mon, 24 Mar 2025 17:09:57 +0100
Subject: [PATCH 5/5] fix: lll

---
 pkg/config/loader.go | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pkg/config/loader.go b/pkg/config/loader.go
index 6355c4d9f73b..deace8ff0b17 100644
--- a/pkg/config/loader.go
+++ b/pkg/config/loader.go
@@ -134,7 +134,8 @@ func (l *Loader) appendStringSlice(name string, current *[]string) {
 
 func (l *Loader) checkConfigurationVersion() error {
 	if l.cfg.GetConfigDir() != "" && l.cfg.Version != "2" {
-		return fmt.Errorf("unsupported version of the configuration: %q (require configuration v2). See https://golangci-lint.run/product/migration-guide for migration instructions.", l.cfg.Version)
+		return fmt.Errorf("unsupported version of the configuration: %q "+
+			"See https://golangci-lint.run/product/migration-guide for migration instructions", l.cfg.Version)
 	}
 
 	return nil