Skip to content

Commit

Permalink
feat: add deprecation warning about disabled and deprecation linters
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez committed May 21, 2024
1 parent 0cb1418 commit f563557
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
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

0 comments on commit f563557

Please sign in to comment.