From 03f90a677210a7668b9ed6042cf7ff5951ab9453 Mon Sep 17 00:00:00 2001 From: sivchari Date: Wed, 16 Apr 2025 21:58:56 +0900 Subject: [PATCH 1/4] fix: toStaticCheckSettings Signed-off-by: sivchari --- .../migrate/migrate_linters_settings.go | 16 ++++++++++-- .../migrate/migrate_linters_settings_test.go | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 pkg/commands/internal/migrate/migrate_linters_settings_test.go diff --git a/pkg/commands/internal/migrate/migrate_linters_settings.go b/pkg/commands/internal/migrate/migrate_linters_settings.go index a0559388d403..b9b60a0189b5 100644 --- a/pkg/commands/internal/migrate/migrate_linters_settings.go +++ b/pkg/commands/internal/migrate/migrate_linters_settings.go @@ -789,10 +789,22 @@ func toSpancheckSettings(old versionone.SpancheckSettings) versiontwo.SpancheckS } func toStaticCheckSettings(old versionone.LintersSettings) versiontwo.StaticCheckSettings { - checks := slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks) + checks := Unique(slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks)) + // If an element is prefixed with `-` it means that we want to disable that check. + // So we have to resort and put everything after the non-minus elements. + slices.SortFunc(checks, func(e1, e2 string) int { + if strings.HasPrefix(e1, "-") && !strings.HasPrefix(e2, "-") { + return 1 + } + + if !strings.HasPrefix(e1, "-") && strings.HasPrefix(e2, "-") { + return -1 + } + return strings.Compare(e1, e2) + }) return versiontwo.StaticCheckSettings{ - Checks: Unique(checks), + Checks: checks, Initialisms: old.Stylecheck.Initialisms, DotImportWhitelist: old.Stylecheck.DotImportWhitelist, HTTPStatusCodeWhitelist: old.Stylecheck.HTTPStatusCodeWhitelist, diff --git a/pkg/commands/internal/migrate/migrate_linters_settings_test.go b/pkg/commands/internal/migrate/migrate_linters_settings_test.go new file mode 100644 index 000000000000..27fc8ae6e8f2 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_linters_settings_test.go @@ -0,0 +1,26 @@ +package migrate + +import ( + "testing" + + "github.com/golangci/golangci-lint/v2/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/v2/pkg/commands/internal/migrate/versiontwo" + "github.com/google/go-cmp/cmp" +) + +func Test_toStaticCheckSettings(t *testing.T) { + old := versionone.LintersSettings{ + Staticcheck: versionone.StaticCheckSettings{ + Checks: []string{"all", "-SA1000"}, + }, + } + new := toStaticCheckSettings(old) + + expected := versiontwo.StaticCheckSettings{ + Checks: []string{"all", "-SA1000"}, + } + + if diff := cmp.Diff(new, expected); diff != "" { + t.Errorf("toStaticCheckSettings() mismatch (-got +want):\n%s", diff) + } +} From 3d8360b036017bc693517dc617de7e427a64e4fb Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 16 Apr 2025 15:40:24 +0200 Subject: [PATCH 2/4] review --- .../migrate/migrate_linters_settings.go | 12 +- .../migrate/migrate_linters_settings_test.go | 26 --- ...ters-settings_staticcheck_merge.golden.yml | 205 ++++++++++++++++++ .../linters-settings_staticcheck_merge.yml | 172 +++++++++++++++ 4 files changed, 381 insertions(+), 34 deletions(-) delete mode 100644 pkg/commands/internal/migrate/migrate_linters_settings_test.go create mode 100644 pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml create mode 100644 pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.yml diff --git a/pkg/commands/internal/migrate/migrate_linters_settings.go b/pkg/commands/internal/migrate/migrate_linters_settings.go index b9b60a0189b5..359f1653f59d 100644 --- a/pkg/commands/internal/migrate/migrate_linters_settings.go +++ b/pkg/commands/internal/migrate/migrate_linters_settings.go @@ -790,17 +790,13 @@ func toSpancheckSettings(old versionone.SpancheckSettings) versiontwo.SpancheckS func toStaticCheckSettings(old versionone.LintersSettings) versiontwo.StaticCheckSettings { checks := Unique(slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks)) - // If an element is prefixed with `-` it means that we want to disable that check. - // So we have to resort and put everything after the non-minus elements. - slices.SortFunc(checks, func(e1, e2 string) int { - if strings.HasPrefix(e1, "-") && !strings.HasPrefix(e2, "-") { + + slices.SortFunc(checks, func(a, b string) int { + if a == "*" || a == "all" { return 1 } - if !strings.HasPrefix(e1, "-") && strings.HasPrefix(e2, "-") { - return -1 - } - return strings.Compare(e1, e2) + return strings.Compare(a, b) }) return versiontwo.StaticCheckSettings{ diff --git a/pkg/commands/internal/migrate/migrate_linters_settings_test.go b/pkg/commands/internal/migrate/migrate_linters_settings_test.go deleted file mode 100644 index 27fc8ae6e8f2..000000000000 --- a/pkg/commands/internal/migrate/migrate_linters_settings_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package migrate - -import ( - "testing" - - "github.com/golangci/golangci-lint/v2/pkg/commands/internal/migrate/versionone" - "github.com/golangci/golangci-lint/v2/pkg/commands/internal/migrate/versiontwo" - "github.com/google/go-cmp/cmp" -) - -func Test_toStaticCheckSettings(t *testing.T) { - old := versionone.LintersSettings{ - Staticcheck: versionone.StaticCheckSettings{ - Checks: []string{"all", "-SA1000"}, - }, - } - new := toStaticCheckSettings(old) - - expected := versiontwo.StaticCheckSettings{ - Checks: []string{"all", "-SA1000"}, - } - - if diff := cmp.Diff(new, expected); diff != "" { - t.Errorf("toStaticCheckSettings() mismatch (-got +want):\n%s", diff) - } -} diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml new file mode 100644 index 000000000000..af10e8205361 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml @@ -0,0 +1,205 @@ +version: "2" +linters: + settings: + staticcheck: + checks: + - '*' + - -S1000 + - -S1001 + - -S1002 + - -SA1000 + - -SA1001 + - -SA1002 + - -ST1000 + - -ST1001 + - -ST1003 + - S1003 + - S1004 + - S1005 + - S1006 + - S1007 + - S1008 + - S1009 + - S1010 + - S1011 + - S1012 + - S1016 + - S1017 + - S1018 + - S1019 + - S1020 + - S1021 + - S1023 + - S1024 + - S1025 + - S1028 + - S1029 + - S1030 + - S1031 + - S1032 + - S1033 + - S1034 + - S1035 + - S1036 + - S1037 + - S1038 + - S1039 + - S1040 + - SA1003 + - SA1004 + - SA1005 + - SA1006 + - SA1007 + - SA1008 + - SA1010 + - SA1011 + - SA1012 + - SA1013 + - SA1014 + - SA1015 + - SA1016 + - SA1017 + - SA1018 + - SA1019 + - SA1020 + - SA1021 + - SA1023 + - SA1024 + - SA1025 + - SA1026 + - SA1027 + - SA1028 + - SA1029 + - SA1030 + - SA1031 + - SA1032 + - SA2000 + - SA2001 + - SA2002 + - SA2003 + - SA3000 + - SA3001 + - SA4000 + - SA4001 + - SA4003 + - SA4004 + - SA4005 + - SA4006 + - SA4008 + - SA4009 + - SA4010 + - SA4011 + - SA4012 + - SA4013 + - SA4014 + - SA4015 + - SA4016 + - SA4017 + - SA4018 + - SA4019 + - SA4020 + - SA4021 + - SA4022 + - SA4023 + - SA4024 + - SA4025 + - SA4026 + - SA4027 + - SA4028 + - SA4029 + - SA4030 + - SA4031 + - SA4032 + - SA5000 + - SA5001 + - SA5002 + - SA5003 + - SA5004 + - SA5005 + - SA5007 + - SA5008 + - SA5009 + - SA5010 + - SA5011 + - SA5012 + - SA6000 + - SA6001 + - SA6002 + - SA6003 + - SA6005 + - SA6006 + - SA9001 + - SA9002 + - SA9003 + - SA9004 + - SA9005 + - SA9006 + - SA9007 + - SA9008 + - SA9009 + - ST1005 + - ST1006 + - ST1008 + - ST1011 + - ST1012 + - ST1013 + - ST1015 + - ST1016 + - ST1017 + - ST1018 + - ST1019 + - ST1020 + - ST1021 + - ST1022 + - ST1023 + - all + initialisms: + - ACL + - API + - ASCII + - CPU + - CSS + - DNS + - EOF + - GUID + - HTML + - HTTP + - HTTPS + - ID + - IP + - JSON + - QPS + - RAM + - RPC + - SLA + - SMTP + - SQL + - SSH + - TCP + - TLS + - TTL + - UDP + - UI + - GID + - UID + - UUID + - URI + - URL + - UTF8 + - VM + - XML + - XMPP + - XSRF + - XSS + - SIP + - RTP + - AMQP + - DB + - TS + dot-import-whitelist: + - fmt + http-status-code-whitelist: + - "200" + - "400" + - "404" + - "500" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.yml new file mode 100644 index 000000000000..3d9fe3cbbfc0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.yml @@ -0,0 +1,172 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + staticcheck: + checks: + - all + - '-SA1000' + - '-SA1001' + - '-SA1002' + - SA1003 + - SA1004 + - SA1005 + - SA1006 + - SA1007 + - SA1008 + - SA1010 + - SA1011 + - SA1012 + - SA1013 + - SA1014 + - SA1015 + - SA1016 + - SA1017 + - SA1018 + - SA1019 + - SA1020 + - SA1021 + - SA1023 + - SA1024 + - SA1025 + - SA1026 + - SA1027 + - SA1028 + - SA1029 + - SA1030 + - SA1031 + - SA1032 + - SA2000 + - SA2001 + - SA2002 + - SA2003 + - SA3000 + - SA3001 + - SA4000 + - SA4001 + - SA4003 + - SA4004 + - SA4005 + - SA4006 + - SA4008 + - SA4009 + - SA4010 + - SA4011 + - SA4012 + - SA4013 + - SA4014 + - SA4015 + - SA4016 + - SA4017 + - SA4018 + - SA4019 + - SA4020 + - SA4021 + - SA4022 + - SA4023 + - SA4024 + - SA4025 + - SA4026 + - SA4027 + - SA4028 + - SA4029 + - SA4030 + - SA4031 + - SA4032 + - SA5000 + - SA5001 + - SA5002 + - SA5003 + - SA5004 + - SA5005 + - SA5007 + - SA5008 + - SA5009 + - SA5010 + - SA5011 + - SA5012 + - SA6000 + - SA6001 + - SA6002 + - SA6003 + - SA6005 + - SA6006 + - SA9001 + - SA9002 + - SA9003 + - SA9004 + - SA9005 + - SA9006 + - SA9007 + - SA9008 + - SA9009 + + gosimple: + checks: + - '*' + - '-S1000' + - '-S1001' + - '-S1002' + - S1003 + - S1004 + - S1005 + - S1006 + - S1007 + - S1008 + - S1009 + - S1010 + - S1011 + - S1012 + - S1016 + - S1017 + - S1018 + - S1019 + - S1020 + - S1021 + - S1023 + - S1024 + - S1025 + - S1028 + - S1029 + - S1030 + - S1031 + - S1032 + - S1033 + - S1034 + - S1035 + - S1036 + - S1037 + - S1038 + - S1039 + - S1040 + + stylecheck: + dot-import-whitelist: + - fmt + initialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "SIP", "RTP", "AMQP", "DB", "TS" ] + http-status-code-whitelist: [ "200", "400", "404", "500" ] + checks: + - all + - '-ST1000' + - '-ST1001' + - '-ST1003' + - ST1005 + - ST1006 + - ST1008 + - ST1011 + - ST1012 + - ST1013 + - ST1015 + - ST1016 + - ST1017 + - ST1018 + - ST1019 + - ST1020 + - ST1021 + - ST1022 + - ST1023 From 4118d9d89de42c5a08d6a50bd6e19943c2139573 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 16 Apr 2025 15:45:14 +0200 Subject: [PATCH 3/4] review --- .../migrate/migrate_linters_settings.go | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/pkg/commands/internal/migrate/migrate_linters_settings.go b/pkg/commands/internal/migrate/migrate_linters_settings.go index 359f1653f59d..a34d4412b796 100644 --- a/pkg/commands/internal/migrate/migrate_linters_settings.go +++ b/pkg/commands/internal/migrate/migrate_linters_settings.go @@ -789,15 +789,20 @@ func toSpancheckSettings(old versionone.SpancheckSettings) versiontwo.SpancheckS } func toStaticCheckSettings(old versionone.LintersSettings) versiontwo.StaticCheckSettings { - checks := Unique(slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks)) - - slices.SortFunc(checks, func(a, b string) int { - if a == "*" || a == "all" { - return 1 - } - - return strings.Compare(a, b) - }) + checks := slices.Compact( + slices.SortedFunc( + slices.Values( + slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks), + ), + func(a, b string) int { + if a == "*" || a == "all" { + return 1 + } + + return strings.Compare(a, b) + }, + ), + ) return versiontwo.StaticCheckSettings{ Checks: checks, From 5f3fe1e3a5ab0f9b015721896482c9c802ffcc7a Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 16 Apr 2025 16:05:46 +0200 Subject: [PATCH 4/4] review --- .../migrate/migrate_linters_settings.go | 37 ++++++++++++------- ...ters-settings_staticcheck_merge.golden.yml | 3 +- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/pkg/commands/internal/migrate/migrate_linters_settings.go b/pkg/commands/internal/migrate/migrate_linters_settings.go index a34d4412b796..5accd9f593e5 100644 --- a/pkg/commands/internal/migrate/migrate_linters_settings.go +++ b/pkg/commands/internal/migrate/migrate_linters_settings.go @@ -789,20 +789,29 @@ func toSpancheckSettings(old versionone.SpancheckSettings) versiontwo.SpancheckS } func toStaticCheckSettings(old versionone.LintersSettings) versiontwo.StaticCheckSettings { - checks := slices.Compact( - slices.SortedFunc( - slices.Values( - slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks), - ), - func(a, b string) int { - if a == "*" || a == "all" { - return 1 - } - - return strings.Compare(a, b) - }, - ), - ) + var checks []string + + for _, check := range slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks) { + if check == "*" { + checks = append(checks, "all") + continue + } + checks = append(checks, check) + } + + checks = Unique(checks) + + slices.SortFunc(checks, func(a, b string) int { + if a == "all" { + return -1 + } + + if b == "all" { + return 1 + } + + return strings.Compare(a, b) + }) return versiontwo.StaticCheckSettings{ Checks: checks, diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml index af10e8205361..229a095f01f8 100644 --- a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck_merge.golden.yml @@ -3,7 +3,7 @@ linters: settings: staticcheck: checks: - - '*' + - all - -S1000 - -S1001 - -S1002 @@ -152,7 +152,6 @@ linters: - ST1021 - ST1022 - ST1023 - - all initialisms: - ACL - API