feat: add linter dupword (#3192)
This commit is contained in:
parent
c0532b3a5f
commit
febe5fdb33
@ -224,6 +224,15 @@ linters-settings:
|
|||||||
# Default: 150
|
# Default: 150
|
||||||
threshold: 100
|
threshold: 100
|
||||||
|
|
||||||
|
dupword:
|
||||||
|
# Keywords for detecting duplicate words.
|
||||||
|
# If this list is not empty, only the words defined in this list will be detected.
|
||||||
|
# Default: []
|
||||||
|
keywords:
|
||||||
|
- "the"
|
||||||
|
- "and"
|
||||||
|
- "a"
|
||||||
|
|
||||||
errcheck:
|
errcheck:
|
||||||
# Report about not checking of errors in type assertions: `a := b.(MyStruct)`.
|
# Report about not checking of errors in type assertions: `a := b.(MyStruct)`.
|
||||||
# Such cases aren't reported by default.
|
# Such cases aren't reported by default.
|
||||||
@ -1954,6 +1963,7 @@ linters:
|
|||||||
- depguard
|
- depguard
|
||||||
- dogsled
|
- dogsled
|
||||||
- dupl
|
- dupl
|
||||||
|
- dupword
|
||||||
- durationcheck
|
- durationcheck
|
||||||
- errcheck
|
- errcheck
|
||||||
- errchkjson
|
- errchkjson
|
||||||
@ -2060,6 +2070,7 @@ linters:
|
|||||||
- depguard
|
- depguard
|
||||||
- dogsled
|
- dogsled
|
||||||
- dupl
|
- dupl
|
||||||
|
- dupword
|
||||||
- durationcheck
|
- durationcheck
|
||||||
- errcheck
|
- errcheck
|
||||||
- errchkjson
|
- errchkjson
|
||||||
|
1
go.mod
1
go.mod
@ -4,6 +4,7 @@ go 1.19
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
4d63.com/gochecknoglobals v0.1.0
|
4d63.com/gochecknoglobals v0.1.0
|
||||||
|
github.com/Abirdcfly/dupword v0.0.7
|
||||||
github.com/Antonboom/errname v0.1.7
|
github.com/Antonboom/errname v0.1.7
|
||||||
github.com/Antonboom/nilnil v0.1.1
|
github.com/Antonboom/nilnil v0.1.1
|
||||||
github.com/BurntSushi/toml v1.2.0
|
github.com/BurntSushi/toml v1.2.0
|
||||||
|
2
go.sum
generated
2
go.sum
generated
@ -38,6 +38,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
|||||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||||
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
|
github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q=
|
||||||
|
github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk=
|
||||||
github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako=
|
github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako=
|
||||||
github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU=
|
github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU=
|
||||||
github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q=
|
github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q=
|
||||||
|
@ -140,6 +140,7 @@ type LintersSettings struct {
|
|||||||
Depguard DepGuardSettings
|
Depguard DepGuardSettings
|
||||||
Dogsled DogsledSettings
|
Dogsled DogsledSettings
|
||||||
Dupl DuplSettings
|
Dupl DuplSettings
|
||||||
|
DupWord DupWordSettings
|
||||||
Errcheck ErrcheckSettings
|
Errcheck ErrcheckSettings
|
||||||
ErrChkJSON ErrChkJSONSettings
|
ErrChkJSON ErrChkJSONSettings
|
||||||
ErrorLint ErrorLintSettings
|
ErrorLint ErrorLintSettings
|
||||||
@ -257,6 +258,10 @@ type DuplSettings struct {
|
|||||||
Threshold int
|
Threshold int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DupWordSettings struct {
|
||||||
|
Keywords []string `mapstructure:"keywords"`
|
||||||
|
}
|
||||||
|
|
||||||
type ErrcheckSettings struct {
|
type ErrcheckSettings struct {
|
||||||
DisableDefaultExclusions bool `mapstructure:"disable-default-exclusions"`
|
DisableDefaultExclusions bool `mapstructure:"disable-default-exclusions"`
|
||||||
CheckTypeAssertions bool `mapstructure:"check-type-assertions"`
|
CheckTypeAssertions bool `mapstructure:"check-type-assertions"`
|
||||||
|
29
pkg/golinters/dupword.go
Normal file
29
pkg/golinters/dupword.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package golinters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/Abirdcfly/dupword"
|
||||||
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
|
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewDupWord(setting *config.DupWordSettings) *goanalysis.Linter {
|
||||||
|
a := dupword.NewAnalyzer()
|
||||||
|
|
||||||
|
cfgMap := map[string]map[string]interface{}{}
|
||||||
|
if setting != nil {
|
||||||
|
cfgMap[a.Name] = map[string]interface{}{
|
||||||
|
"keyword": strings.Join(setting.Keywords, ","),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return goanalysis.NewLinter(
|
||||||
|
a.Name,
|
||||||
|
"checks for duplicate words in the source code",
|
||||||
|
[]*analysis.Analyzer{a},
|
||||||
|
cfgMap,
|
||||||
|
).WithLoadMode(goanalysis.LoadModeSyntax)
|
||||||
|
}
|
@ -108,6 +108,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
depGuardCfg *config.DepGuardSettings
|
depGuardCfg *config.DepGuardSettings
|
||||||
dogsledCfg *config.DogsledSettings
|
dogsledCfg *config.DogsledSettings
|
||||||
duplCfg *config.DuplSettings
|
duplCfg *config.DuplSettings
|
||||||
|
dupwordCfg *config.DupWordSettings
|
||||||
errcheckCfg *config.ErrcheckSettings
|
errcheckCfg *config.ErrcheckSettings
|
||||||
errchkjsonCfg *config.ErrChkJSONSettings
|
errchkjsonCfg *config.ErrChkJSONSettings
|
||||||
errorlintCfg *config.ErrorLintSettings
|
errorlintCfg *config.ErrorLintSettings
|
||||||
@ -183,6 +184,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
depGuardCfg = &m.cfg.LintersSettings.Depguard
|
depGuardCfg = &m.cfg.LintersSettings.Depguard
|
||||||
dogsledCfg = &m.cfg.LintersSettings.Dogsled
|
dogsledCfg = &m.cfg.LintersSettings.Dogsled
|
||||||
duplCfg = &m.cfg.LintersSettings.Dupl
|
duplCfg = &m.cfg.LintersSettings.Dupl
|
||||||
|
dupwordCfg = &m.cfg.LintersSettings.DupWord
|
||||||
errcheckCfg = &m.cfg.LintersSettings.Errcheck
|
errcheckCfg = &m.cfg.LintersSettings.Errcheck
|
||||||
errchkjsonCfg = &m.cfg.LintersSettings.ErrChkJSON
|
errchkjsonCfg = &m.cfg.LintersSettings.ErrChkJSON
|
||||||
errorlintCfg = &m.cfg.LintersSettings.ErrorLint
|
errorlintCfg = &m.cfg.LintersSettings.ErrorLint
|
||||||
@ -341,6 +343,12 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
WithPresets(linter.PresetStyle).
|
WithPresets(linter.PresetStyle).
|
||||||
WithURL("https://github.com/mibk/dupl"),
|
WithURL("https://github.com/mibk/dupl"),
|
||||||
|
|
||||||
|
linter.NewConfig(golinters.NewDupWord(dupwordCfg)).
|
||||||
|
WithSince("1.50.0").
|
||||||
|
WithPresets(linter.PresetComment).
|
||||||
|
WithAutoFix().
|
||||||
|
WithURL("https://github.com/Abirdcfly/dupword"),
|
||||||
|
|
||||||
linter.NewConfig(golinters.NewDurationCheck()).
|
linter.NewConfig(golinters.NewDurationCheck()).
|
||||||
WithSince("v1.37.0").
|
WithSince("v1.37.0").
|
||||||
WithPresets(linter.PresetBugs).
|
WithPresets(linter.PresetBugs).
|
||||||
|
15
test/testdata/dupword.go
vendored
Normal file
15
test/testdata/dupword.go
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
//golangcitest:args -Edupword
|
||||||
|
package testdata
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func duplicateWordInComments() {
|
||||||
|
// this line include duplicated word the the // want `Duplicate words \(the\) found`
|
||||||
|
fmt.Println("hello")
|
||||||
|
}
|
||||||
|
|
||||||
|
func duplicateWordInStr() {
|
||||||
|
a := "this line include duplicate word and and" // want `Duplicate words \(and\) found`
|
||||||
|
b := "print the\n the line, print the the \n\t the line. and and" // want `Duplicate words \(and,the\) found`
|
||||||
|
fmt.Println(a, b)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user