Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add warning about disabled and deprecated linters (level 2) #4742

Merged
merged 1 commit into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions docs/src/docs/product/roadmap.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,11 @@ A linter can be deprecated for various reasons, e.g. the linter stops working wi

The deprecation of a linter will follow 3 phases:

1. **Display of a warning message**: The linter can still be used (unless it's completely non-functional), but it's recommended to remove it from your configuration.
2. **Display of an error message**: At this point, you should remove the linter. The original implementation is replaced by a placeholder that does nothing.
1. **Display of a warning message**: The linter can still be used (unless it's completely non-functional),
but it's recommended to remove it from your configuration.
2. **Display of an error message**: At this point, you should remove the linter.
The original implementation is replaced by a placeholder that does nothing.
The linter is NOT enabled when using `enable-all` and should be removed from the `disable` option.
3. **Removal of the linter** from golangci-lint.

Each phase corresponds to a minor version:
Expand Down
22 changes: 18 additions & 4 deletions pkg/lint/lintersdb/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"strings"

"github.com/golangci/golangci-lint/pkg/config"
"github.com/golangci/golangci-lint/pkg/lint/linter"
"github.com/golangci/golangci-lint/pkg/logutils"
)

Expand Down Expand Up @@ -38,17 +39,30 @@ func (v Validator) Validate(cfg *config.Config) error {
}

func (v Validator) validateLintersNames(cfg *config.Linters) error {
allNames := cfg.Enable
allNames = append(allNames, cfg.Disable...)

var unknownNames []string

for _, name := range allNames {
for _, name := range cfg.Enable {
if v.m.GetLinterConfigs(name) == nil {
unknownNames = append(unknownNames, name)
}
}

for _, name := range cfg.Disable {
lcs := v.m.GetLinterConfigs(name)
if len(lcs) == 0 {
unknownNames = append(unknownNames, name)
continue
}

for _, lc := range lcs {
if lc.IsDeprecated() && lc.Deprecation.Level > linter.DeprecationWarning {
v.m.log.Warnf("The linter %q is deprecated (step 2) and deactivated. "+
"It should be removed from the list of disabled linters. "+
"https://golangci-lint.run/product/roadmap/#linter-deprecation-cycle", lc.Name())
}
}
}

if len(unknownNames) > 0 {
return fmt.Errorf("unknown linters: '%v', run 'golangci-lint help linters' to see the list of supported linters",
strings.Join(unknownNames, ","))
Expand Down
2 changes: 0 additions & 2 deletions test/run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,6 @@ func TestCgoOk(t *testing.T) {
WithNoConfig().
WithArgs("--timeout=3m",
"--enable-all",
"-D",
"nosnakecase",
).
WithArgs("--go=1.22"). // TODO(ldez) remove this line when we will run go1.23 on the CI. (related to intrange, copyloopvar)
WithTargetPath(testdataDir, "cgo").
Expand Down
Loading