Add the ginkgolinter linter (#3369)
This commit is contained in:
parent
d65222aa87
commit
26dde52d69
@ -402,8 +402,21 @@ linters-settings:
|
|||||||
# Default: false
|
# Default: false
|
||||||
custom-order: true
|
custom-order: true
|
||||||
|
|
||||||
|
ginkgolinter:
|
||||||
|
# Suppress the wrong length assertion warning.
|
||||||
|
# Default: false
|
||||||
|
suppress-len-assertion: true
|
||||||
|
|
||||||
|
# Suppress the wrong nil assertion warning.
|
||||||
|
# Default: false
|
||||||
|
suppress-nil-assertion: true
|
||||||
|
|
||||||
|
# Suppress the wrong error assertion warning.
|
||||||
|
# Default: false
|
||||||
|
suppress-err-assertion: true
|
||||||
|
|
||||||
gocognit:
|
gocognit:
|
||||||
# Minimal code complexity to report
|
# Minimal code complexity to report.
|
||||||
# Default: 30 (but we recommend 10-20)
|
# Default: 30 (but we recommend 10-20)
|
||||||
min-complexity: 10
|
min-complexity: 10
|
||||||
|
|
||||||
@ -1989,6 +2002,7 @@ linters:
|
|||||||
- forcetypeassert
|
- forcetypeassert
|
||||||
- funlen
|
- funlen
|
||||||
- gci
|
- gci
|
||||||
|
- ginkgolinter
|
||||||
- gochecknoglobals
|
- gochecknoglobals
|
||||||
- gochecknoinits
|
- gochecknoinits
|
||||||
- gocognit
|
- gocognit
|
||||||
@ -2096,6 +2110,7 @@ linters:
|
|||||||
- forcetypeassert
|
- forcetypeassert
|
||||||
- funlen
|
- funlen
|
||||||
- gci
|
- gci
|
||||||
|
- ginkgolinter
|
||||||
- gochecknoglobals
|
- gochecknoglobals
|
||||||
- gochecknoinits
|
- gochecknoinits
|
||||||
- gocognit
|
- gocognit
|
||||||
|
1
go.mod
1
go.mod
@ -72,6 +72,7 @@ require (
|
|||||||
github.com/nakabonne/nestif v0.3.1
|
github.com/nakabonne/nestif v0.3.1
|
||||||
github.com/nishanths/exhaustive v0.9.3
|
github.com/nishanths/exhaustive v0.9.3
|
||||||
github.com/nishanths/predeclared v0.2.2
|
github.com/nishanths/predeclared v0.2.2
|
||||||
|
github.com/nunnatsa/ginkgolinter v0.6.0
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/polyfloyd/go-errorlint v1.0.6
|
github.com/polyfloyd/go-errorlint v1.0.6
|
||||||
github.com/quasilyte/go-ruleguard/dsl v0.3.21
|
github.com/quasilyte/go-ruleguard/dsl v0.3.21
|
||||||
|
2
go.sum
generated
2
go.sum
generated
@ -394,6 +394,8 @@ github.com/nishanths/exhaustive v0.9.3 h1:NPZibdWqnUfp24jTNYS9ncxvJ1Cniot9kP5agz
|
|||||||
github.com/nishanths/exhaustive v0.9.3/go.mod h1:VjHsn6MdEX4ydfLwt658YcdPxSDKOlqSjpkeGJPCamo=
|
github.com/nishanths/exhaustive v0.9.3/go.mod h1:VjHsn6MdEX4ydfLwt658YcdPxSDKOlqSjpkeGJPCamo=
|
||||||
github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
|
github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
|
||||||
github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
|
github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
|
||||||
|
github.com/nunnatsa/ginkgolinter v0.6.0 h1:r5C8RxtM8KTUJlgKOTFZQK3oG8blCQtHslDRl5YWiHA=
|
||||||
|
github.com/nunnatsa/ginkgolinter v0.6.0/go.mod h1:jTgd60EAdXDmmIPZi+xoMDqAYo/4AakhWNmnPisd7Rc=
|
||||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||||
github.com/onsi/ginkgo/v2 v2.3.1 h1:8SbseP7qM32WcvE6VaN6vfXxv698izmsJ1UQX9ve7T8=
|
github.com/onsi/ginkgo/v2 v2.3.1 h1:8SbseP7qM32WcvE6VaN6vfXxv698izmsJ1UQX9ve7T8=
|
||||||
|
@ -150,6 +150,7 @@ type LintersSettings struct {
|
|||||||
Forbidigo ForbidigoSettings
|
Forbidigo ForbidigoSettings
|
||||||
Funlen FunlenSettings
|
Funlen FunlenSettings
|
||||||
Gci GciSettings
|
Gci GciSettings
|
||||||
|
GinkgoLinter GinkgoLinterSettings
|
||||||
Gocognit GocognitSettings
|
Gocognit GocognitSettings
|
||||||
Goconst GoConstSettings
|
Goconst GoConstSettings
|
||||||
Gocritic GoCriticSettings
|
Gocritic GoCriticSettings
|
||||||
@ -321,6 +322,12 @@ type GciSettings struct {
|
|||||||
CustomOrder bool `mapstructure:"custom-order"`
|
CustomOrder bool `mapstructure:"custom-order"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GinkgoLinterSettings struct {
|
||||||
|
SuppressLenAssertion bool `mapstructure:"suppress-len-assertion"`
|
||||||
|
SuppressNilAssertion bool `mapstructure:"suppress-nil-assertion"`
|
||||||
|
SuppressErrAssertion bool `mapstructure:"suppress-err-assertion"`
|
||||||
|
}
|
||||||
|
|
||||||
type GocognitSettings struct {
|
type GocognitSettings struct {
|
||||||
MinComplexity int `mapstructure:"min-complexity"`
|
MinComplexity int `mapstructure:"min-complexity"`
|
||||||
}
|
}
|
||||||
|
29
pkg/golinters/ginkgolinter.go
Normal file
29
pkg/golinters/ginkgolinter.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package golinters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/nunnatsa/ginkgolinter"
|
||||||
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
|
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewGinkgoLinter(cfg *config.GinkgoLinterSettings) *goanalysis.Linter {
|
||||||
|
a := ginkgolinter.NewAnalyzer()
|
||||||
|
|
||||||
|
cfgMap := make(map[string]map[string]interface{})
|
||||||
|
if cfg != nil {
|
||||||
|
cfgMap[a.Name] = map[string]interface{}{
|
||||||
|
"suppress-len-assertion": cfg.SuppressLenAssertion,
|
||||||
|
"suppress-nil-assertion": cfg.SuppressNilAssertion,
|
||||||
|
"suppress-err-assertion": cfg.SuppressErrAssertion,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return goanalysis.NewLinter(
|
||||||
|
a.Name,
|
||||||
|
a.Doc,
|
||||||
|
[]*analysis.Analyzer{a},
|
||||||
|
cfgMap,
|
||||||
|
).WithLoadMode(goanalysis.LoadModeTypesInfo)
|
||||||
|
}
|
@ -118,6 +118,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
forbidigoCfg *config.ForbidigoSettings
|
forbidigoCfg *config.ForbidigoSettings
|
||||||
funlenCfg *config.FunlenSettings
|
funlenCfg *config.FunlenSettings
|
||||||
gciCfg *config.GciSettings
|
gciCfg *config.GciSettings
|
||||||
|
ginkgolinterCfg *config.GinkgoLinterSettings
|
||||||
gocognitCfg *config.GocognitSettings
|
gocognitCfg *config.GocognitSettings
|
||||||
goconstCfg *config.GoConstSettings
|
goconstCfg *config.GoConstSettings
|
||||||
gocriticCfg *config.GoCriticSettings
|
gocriticCfg *config.GoCriticSettings
|
||||||
@ -194,6 +195,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
forbidigoCfg = &m.cfg.LintersSettings.Forbidigo
|
forbidigoCfg = &m.cfg.LintersSettings.Forbidigo
|
||||||
funlenCfg = &m.cfg.LintersSettings.Funlen
|
funlenCfg = &m.cfg.LintersSettings.Funlen
|
||||||
gciCfg = &m.cfg.LintersSettings.Gci
|
gciCfg = &m.cfg.LintersSettings.Gci
|
||||||
|
ginkgolinterCfg = &m.cfg.LintersSettings.GinkgoLinter
|
||||||
gocognitCfg = &m.cfg.LintersSettings.Gocognit
|
gocognitCfg = &m.cfg.LintersSettings.Gocognit
|
||||||
goconstCfg = &m.cfg.LintersSettings.Goconst
|
goconstCfg = &m.cfg.LintersSettings.Goconst
|
||||||
gocriticCfg = &m.cfg.LintersSettings.Gocritic
|
gocriticCfg = &m.cfg.LintersSettings.Gocritic
|
||||||
@ -430,6 +432,12 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
WithPresets(linter.PresetFormatting, linter.PresetImport).
|
WithPresets(linter.PresetFormatting, linter.PresetImport).
|
||||||
WithURL("https://github.com/daixiang0/gci"),
|
WithURL("https://github.com/daixiang0/gci"),
|
||||||
|
|
||||||
|
linter.NewConfig(golinters.NewGinkgoLinter(ginkgolinterCfg)).
|
||||||
|
WithSince("v1.51.0").
|
||||||
|
WithLoadForGoAnalysis().
|
||||||
|
WithPresets(linter.PresetStyle).
|
||||||
|
WithURL("https://github.com/nunnatsa/ginkgolinter"),
|
||||||
|
|
||||||
linter.NewConfig(golinters.NewGochecknoglobals()).
|
linter.NewConfig(golinters.NewGochecknoglobals()).
|
||||||
WithSince("v1.12.0").
|
WithSince("v1.12.0").
|
||||||
WithPresets(linter.PresetStyle).
|
WithPresets(linter.PresetStyle).
|
||||||
|
@ -30,6 +30,7 @@ func TestTypecheck(t *testing.T) {
|
|||||||
func TestSourcesFromTestdataSubDir(t *testing.T) {
|
func TestSourcesFromTestdataSubDir(t *testing.T) {
|
||||||
subDirs := []string{
|
subDirs := []string{
|
||||||
"loggercheck",
|
"loggercheck",
|
||||||
|
"ginkgolinter",
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, dir := range subDirs {
|
for _, dir := range subDirs {
|
||||||
|
2
test/testdata/ginkgolinter/configs/ginkgolinter_default.yml
vendored
Normal file
2
test/testdata/ginkgolinter/configs/ginkgolinter_default.yml
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
linters-settings:
|
||||||
|
ginkgolinter: {}
|
3
test/testdata/ginkgolinter/configs/ginkgolinter_suppress_err.yml
vendored
Normal file
3
test/testdata/ginkgolinter/configs/ginkgolinter_suppress_err.yml
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
linters-settings:
|
||||||
|
ginkgolinter:
|
||||||
|
suppress-err-assertion: true
|
3
test/testdata/ginkgolinter/configs/ginkgolinter_suppress_len.yml
vendored
Normal file
3
test/testdata/ginkgolinter/configs/ginkgolinter_suppress_len.yml
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
linters-settings:
|
||||||
|
ginkgolinter:
|
||||||
|
suppress-len-assertion: true
|
3
test/testdata/ginkgolinter/configs/ginkgolinter_suppress_nil.yml
vendored
Normal file
3
test/testdata/ginkgolinter/configs/ginkgolinter_suppress_nil.yml
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
linters-settings:
|
||||||
|
ginkgolinter:
|
||||||
|
suppress-nil-assertion: true
|
51
test/testdata/ginkgolinter/ginkgolinter.go
vendored
Normal file
51
test/testdata/ginkgolinter/ginkgolinter.go
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
//golangcitest:args --disable-all -Eginkgolinter
|
||||||
|
package ginkgolinter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LenUsecase() {
|
||||||
|
var fakeVarUnderTest []int
|
||||||
|
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
|
||||||
|
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
|
||||||
|
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(HaveLen\\(2\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0)) // // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.To\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
|
||||||
|
fakeVarUnderTest = append(fakeVarUnderTest, 3)
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(HaveLen\\(1\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func NilUsecase() {
|
||||||
|
y := 5
|
||||||
|
x := &y
|
||||||
|
Expect(x == nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(nil == x).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x != nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x == nil).To(BeTrue()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x == nil).To(BeFalse()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
func BooleanUsecase() {
|
||||||
|
x := true
|
||||||
|
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
|
||||||
|
x = false
|
||||||
|
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrorUsecase() {
|
||||||
|
err := errors.New("fake error")
|
||||||
|
funcReturnsErr := func() error { return err }
|
||||||
|
|
||||||
|
Expect(err).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err == nil).To(Equal(true)) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err == nil).To(BeFalse()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
|
||||||
|
}
|
52
test/testdata/ginkgolinter/ginkgolinter_suppress_err.go
vendored
Normal file
52
test/testdata/ginkgolinter/ginkgolinter_suppress_err.go
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//golangcitest:config_path configs/ginkgolinter_suppress_err.yml
|
||||||
|
//golangcitest:args --disable-all -Eginkgolinter
|
||||||
|
package ginkgolinter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LenUsecase_err() {
|
||||||
|
var fakeVarUnderTest []int
|
||||||
|
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
|
||||||
|
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
|
||||||
|
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(HaveLen\\(2\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0)) // // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.To\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
|
||||||
|
fakeVarUnderTest = append(fakeVarUnderTest, 3)
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(HaveLen\\(1\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func NilUsecase_err() {
|
||||||
|
y := 5
|
||||||
|
x := &y
|
||||||
|
Expect(x == nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(nil == x).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x != nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x == nil).To(BeTrue()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x == nil).To(BeFalse()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
func BooleanUsecase_err() {
|
||||||
|
x := true
|
||||||
|
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
|
||||||
|
x = false
|
||||||
|
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrorUsecase_err() {
|
||||||
|
err := errors.New("fake error")
|
||||||
|
funcReturnsErr := func() error { return err }
|
||||||
|
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(err == nil).To(Equal(true))
|
||||||
|
Expect(err == nil).To(BeFalse())
|
||||||
|
Expect(err != nil).To(BeTrue())
|
||||||
|
Expect(funcReturnsErr()).To(BeNil())
|
||||||
|
}
|
52
test/testdata/ginkgolinter/ginkgolinter_suppress_len.go
vendored
Normal file
52
test/testdata/ginkgolinter/ginkgolinter_suppress_len.go
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//golangcitest:config_path configs/ginkgolinter_suppress_len.yml
|
||||||
|
//golangcitest:args --disable-all -Eginkgolinter
|
||||||
|
package ginkgolinter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LenUsecase_len() {
|
||||||
|
var fakeVarUnderTest []int
|
||||||
|
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
|
||||||
|
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
|
||||||
|
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(0))
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2))
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0))
|
||||||
|
|
||||||
|
fakeVarUnderTest = append(fakeVarUnderTest, 3)
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0))
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(1))
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0))
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1))
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
func NilUsecase_len() {
|
||||||
|
y := 5
|
||||||
|
x := &y
|
||||||
|
Expect(x == nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(nil == x).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x != nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x == nil).To(BeTrue()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
|
||||||
|
Expect(x == nil).To(BeFalse()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
func BooleanUsecase_len() {
|
||||||
|
x := true
|
||||||
|
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
|
||||||
|
x = false
|
||||||
|
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrorUsecase_len() {
|
||||||
|
err := errors.New("fake error")
|
||||||
|
funcReturnsErr := func() error { return err }
|
||||||
|
|
||||||
|
Expect(err).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err == nil).To(Equal(true)) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err == nil).To(BeFalse()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
|
||||||
|
}
|
52
test/testdata/ginkgolinter/ginkgolinter_suppress_nil.go
vendored
Normal file
52
test/testdata/ginkgolinter/ginkgolinter_suppress_nil.go
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//golangcitest:args --disable-all -Eginkgolinter
|
||||||
|
//golangcitest:config_path configs/ginkgolinter_suppress_nil.yml
|
||||||
|
package ginkgolinter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LenUsecase_nil() {
|
||||||
|
var fakeVarUnderTest []int
|
||||||
|
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
|
||||||
|
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
|
||||||
|
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(HaveLen\\(2\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0)) // // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.To\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
|
||||||
|
fakeVarUnderTest = append(fakeVarUnderTest, 3)
|
||||||
|
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).Should(Equal(1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(HaveLen\\(1\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func NilUsecase_nil() {
|
||||||
|
y := 5
|
||||||
|
x := &y
|
||||||
|
Expect(x == nil).To(Equal(true))
|
||||||
|
Expect(nil == x).To(Equal(true))
|
||||||
|
Expect(x != nil).To(Equal(true))
|
||||||
|
Expect(x == nil).To(BeTrue())
|
||||||
|
Expect(x == nil).To(BeFalse())
|
||||||
|
}
|
||||||
|
func BooleanUsecase_nil() {
|
||||||
|
x := true
|
||||||
|
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
|
||||||
|
x = false
|
||||||
|
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrorUsecase_nil() {
|
||||||
|
err := errors.New("fake error")
|
||||||
|
funcReturnsErr := func() error { return err }
|
||||||
|
|
||||||
|
Expect(err).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err == nil).To(Equal(true)) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err == nil).To(BeFalse()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
|
||||||
|
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
|
||||||
|
}
|
12
test/testdata/ginkgolinter/go.mod
vendored
Normal file
12
test/testdata/ginkgolinter/go.mod
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
module ginkgolinter
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
require github.com/onsi/gomega v1.24.1
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/google/go-cmp v0.5.9 // indirect
|
||||||
|
golang.org/x/net v0.2.0 // indirect
|
||||||
|
golang.org/x/text v0.4.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
)
|
15
test/testdata/ginkgolinter/go.sum
generated
vendored
Normal file
15
test/testdata/ginkgolinter/go.sum
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||||
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls=
|
||||||
|
github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E=
|
||||||
|
github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM=
|
||||||
|
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
|
||||||
|
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||||
|
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
|
||||||
|
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
|
||||||
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
Loading…
x
Reference in New Issue
Block a user