Skip to content

Commit 5a9f5c1

Browse files
authored
feat: deprecate usage of linter alternative names (#4562)
1 parent ed20557 commit 5a9f5c1

File tree

4 files changed

+107
-13
lines changed

4 files changed

+107
-13
lines changed

pkg/golinters/internal/diff_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ index 0000000..6399915
128128
+// line
129129
`
130130

131-
log := logutils.NewMockLog()
132-
log.On("Infof", "The diff contains only additions: no original or deleted lines: %#v", mock.Anything)
131+
log := logutils.NewMockLog().
132+
OnInfof("The diff contains only additions: no original or deleted lines: %#v", mock.Anything)
133133

134134
var noChanges []Change
135135
testDiffProducesChanges(t, log, diff, noChanges...)

pkg/lint/lintersdb/validator.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package lintersdb
33
import (
44
"errors"
55
"fmt"
6+
"os"
67
"slices"
78
"strings"
89

910
"github.com/golangci/golangci-lint/pkg/config"
11+
"github.com/golangci/golangci-lint/pkg/logutils"
1012
)
1113

1214
type Validator struct {
@@ -28,6 +30,7 @@ func (v Validator) Validate(cfg *config.Config) error {
2830
validators := []func(cfg *config.Linters) error{
2931
v.validateLintersNames,
3032
v.validatePresets,
33+
v.alternativeNamesDeprecation,
3134
}
3235

3336
for _, v := range validators {
@@ -40,7 +43,7 @@ func (v Validator) Validate(cfg *config.Config) error {
4043
}
4144

4245
func (v Validator) validateLintersNames(cfg *config.Linters) error {
43-
allNames := append([]string{}, cfg.Enable...)
46+
allNames := cfg.Enable
4447
allNames = append(allNames, cfg.Disable...)
4548

4649
var unknownNames []string
@@ -75,3 +78,34 @@ func (v Validator) validatePresets(cfg *config.Linters) error {
7578

7679
return nil
7780
}
81+
82+
func (v Validator) alternativeNamesDeprecation(cfg *config.Linters) error {
83+
if v.m.cfg.InternalTest || v.m.cfg.InternalCmdTest || os.Getenv(logutils.EnvTestRun) == "1" {
84+
return nil
85+
}
86+
87+
altNames := map[string][]string{}
88+
for _, lc := range v.m.GetAllSupportedLinterConfigs() {
89+
for _, alt := range lc.AlternativeNames {
90+
altNames[alt] = append(altNames[alt], lc.Name())
91+
}
92+
}
93+
94+
names := cfg.Enable
95+
names = append(names, cfg.Disable...)
96+
97+
for _, name := range names {
98+
lc, ok := altNames[name]
99+
if !ok {
100+
continue
101+
}
102+
103+
if len(lc) > 1 {
104+
v.m.log.Warnf("The linter named %q is deprecated. It has been split into: %s.", name, strings.Join(lc, ", "))
105+
} else {
106+
v.m.log.Warnf("The name %q is deprecated. The linter has been renamed to: %s.", name, lc[0])
107+
}
108+
}
109+
110+
return nil
111+
}

pkg/lint/lintersdb/validator_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/stretchr/testify/require"
77

88
"github.com/golangci/golangci-lint/pkg/config"
9+
"github.com/golangci/golangci-lint/pkg/logutils"
910
)
1011

1112
type validateErrorTestCase struct {
@@ -215,3 +216,27 @@ func TestValidator_validatePresets_error(t *testing.T) {
215216
})
216217
}
217218
}
219+
220+
func TestValidator_alternativeNamesDeprecation(t *testing.T) {
221+
t.Setenv(logutils.EnvTestRun, "0")
222+
223+
log := logutils.NewMockLog().
224+
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "vet", "govet").
225+
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "vetshadow", "govet").
226+
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "logrlint", "loggercheck").
227+
OnWarnf("The linter named %q is deprecated. It has been split into: %s.", "megacheck", "gosimple, staticcheck, unused").
228+
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "gas", "gosec")
229+
230+
m, err := NewManager(log, nil, NewLinterBuilder())
231+
require.NoError(t, err)
232+
233+
v := NewValidator(m)
234+
235+
cfg := &config.Linters{
236+
Enable: []string{"vet", "vetshadow", "logrlint"},
237+
Disable: []string{"megacheck", "gas"},
238+
}
239+
240+
err = v.alternativeNamesDeprecation(cfg)
241+
require.NoError(t, err)
242+
}

pkg/logutils/mock.go

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,23 @@ func NewMockLog() *MockLog {
1313
}
1414

1515
func (m *MockLog) Fatalf(format string, args ...any) {
16-
mArgs := []any{format}
17-
m.Called(append(mArgs, args...)...)
16+
m.Called(append([]any{format}, args...)...)
1817
}
1918

2019
func (m *MockLog) Panicf(format string, args ...any) {
21-
mArgs := []any{format}
22-
m.Called(append(mArgs, args...)...)
20+
m.Called(append([]any{format}, args...)...)
2321
}
2422

2523
func (m *MockLog) Errorf(format string, args ...any) {
26-
mArgs := []any{format}
27-
m.Called(append(mArgs, args...)...)
24+
m.Called(append([]any{format}, args...)...)
2825
}
2926

3027
func (m *MockLog) Warnf(format string, args ...any) {
31-
mArgs := []any{format}
32-
m.Called(append(mArgs, args...)...)
28+
m.Called(append([]any{format}, args...)...)
3329
}
3430

3531
func (m *MockLog) Infof(format string, args ...any) {
36-
mArgs := []any{format}
37-
m.Called(append(mArgs, args...)...)
32+
m.Called(append([]any{format}, args...)...)
3833
}
3934

4035
func (m *MockLog) Child(name string) Log {
@@ -45,3 +40,43 @@ func (m *MockLog) Child(name string) Log {
4540
func (m *MockLog) SetLevel(level LogLevel) {
4641
m.Called(level)
4742
}
43+
44+
func (m *MockLog) OnFatalf(format string, args ...any) *MockLog {
45+
arguments := append([]any{format}, args...)
46+
47+
m.On("Fatalf", arguments...)
48+
49+
return m
50+
}
51+
52+
func (m *MockLog) OnPanicf(format string, args ...any) *MockLog {
53+
arguments := append([]any{format}, args...)
54+
55+
m.On("Panicf", arguments...)
56+
57+
return m
58+
}
59+
60+
func (m *MockLog) OnErrorf(format string, args ...any) *MockLog {
61+
arguments := append([]any{format}, args...)
62+
63+
m.On("Errorf", arguments...)
64+
65+
return m
66+
}
67+
68+
func (m *MockLog) OnWarnf(format string, args ...any) *MockLog {
69+
arguments := append([]any{format}, args...)
70+
71+
m.On("Warnf", arguments...)
72+
73+
return m
74+
}
75+
76+
func (m *MockLog) OnInfof(format string, args ...any) *MockLog {
77+
arguments := append([]any{format}, args...)
78+
79+
m.On("Infof", arguments...)
80+
81+
return m
82+
}

0 commit comments

Comments
 (0)