Skip to content

Commit 26dde52

Browse files
authored
Add the ginkgolinter linter (#3369)
1 parent d65222a commit 26dde52

17 files changed

+309
-1
lines changed

.golangci.reference.yml

+16-1
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,21 @@ linters-settings:
402402
# Default: false
403403
custom-order: true
404404

405+
ginkgolinter:
406+
# Suppress the wrong length assertion warning.
407+
# Default: false
408+
suppress-len-assertion: true
409+
410+
# Suppress the wrong nil assertion warning.
411+
# Default: false
412+
suppress-nil-assertion: true
413+
414+
# Suppress the wrong error assertion warning.
415+
# Default: false
416+
suppress-err-assertion: true
417+
405418
gocognit:
406-
# Minimal code complexity to report
419+
# Minimal code complexity to report.
407420
# Default: 30 (but we recommend 10-20)
408421
min-complexity: 10
409422

@@ -1989,6 +2002,7 @@ linters:
19892002
- forcetypeassert
19902003
- funlen
19912004
- gci
2005+
- ginkgolinter
19922006
- gochecknoglobals
19932007
- gochecknoinits
19942008
- gocognit
@@ -2096,6 +2110,7 @@ linters:
20962110
- forcetypeassert
20972111
- funlen
20982112
- gci
2113+
- ginkgolinter
20992114
- gochecknoglobals
21002115
- gochecknoinits
21012116
- gocognit

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ require (
7272
github.com/nakabonne/nestif v0.3.1
7373
github.com/nishanths/exhaustive v0.9.3
7474
github.com/nishanths/predeclared v0.2.2
75+
github.com/nunnatsa/ginkgolinter v0.6.0
7576
github.com/pkg/errors v0.9.1
7677
github.com/polyfloyd/go-errorlint v1.0.6
7778
github.com/quasilyte/go-ruleguard/dsl v0.3.21

go.sum

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/config/linters_settings.go

+7
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ type LintersSettings struct {
150150
Forbidigo ForbidigoSettings
151151
Funlen FunlenSettings
152152
Gci GciSettings
153+
GinkgoLinter GinkgoLinterSettings
153154
Gocognit GocognitSettings
154155
Goconst GoConstSettings
155156
Gocritic GoCriticSettings
@@ -321,6 +322,12 @@ type GciSettings struct {
321322
CustomOrder bool `mapstructure:"custom-order"`
322323
}
323324

325+
type GinkgoLinterSettings struct {
326+
SuppressLenAssertion bool `mapstructure:"suppress-len-assertion"`
327+
SuppressNilAssertion bool `mapstructure:"suppress-nil-assertion"`
328+
SuppressErrAssertion bool `mapstructure:"suppress-err-assertion"`
329+
}
330+
324331
type GocognitSettings struct {
325332
MinComplexity int `mapstructure:"min-complexity"`
326333
}

pkg/golinters/ginkgolinter.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package golinters
2+
3+
import (
4+
"github.com/nunnatsa/ginkgolinter"
5+
"golang.org/x/tools/go/analysis"
6+
7+
"github.com/golangci/golangci-lint/pkg/config"
8+
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
9+
)
10+
11+
func NewGinkgoLinter(cfg *config.GinkgoLinterSettings) *goanalysis.Linter {
12+
a := ginkgolinter.NewAnalyzer()
13+
14+
cfgMap := make(map[string]map[string]interface{})
15+
if cfg != nil {
16+
cfgMap[a.Name] = map[string]interface{}{
17+
"suppress-len-assertion": cfg.SuppressLenAssertion,
18+
"suppress-nil-assertion": cfg.SuppressNilAssertion,
19+
"suppress-err-assertion": cfg.SuppressErrAssertion,
20+
}
21+
}
22+
23+
return goanalysis.NewLinter(
24+
a.Name,
25+
a.Doc,
26+
[]*analysis.Analyzer{a},
27+
cfgMap,
28+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
29+
}

pkg/lint/lintersdb/manager.go

+8
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
118118
forbidigoCfg *config.ForbidigoSettings
119119
funlenCfg *config.FunlenSettings
120120
gciCfg *config.GciSettings
121+
ginkgolinterCfg *config.GinkgoLinterSettings
121122
gocognitCfg *config.GocognitSettings
122123
goconstCfg *config.GoConstSettings
123124
gocriticCfg *config.GoCriticSettings
@@ -194,6 +195,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
194195
forbidigoCfg = &m.cfg.LintersSettings.Forbidigo
195196
funlenCfg = &m.cfg.LintersSettings.Funlen
196197
gciCfg = &m.cfg.LintersSettings.Gci
198+
ginkgolinterCfg = &m.cfg.LintersSettings.GinkgoLinter
197199
gocognitCfg = &m.cfg.LintersSettings.Gocognit
198200
goconstCfg = &m.cfg.LintersSettings.Goconst
199201
gocriticCfg = &m.cfg.LintersSettings.Gocritic
@@ -430,6 +432,12 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
430432
WithPresets(linter.PresetFormatting, linter.PresetImport).
431433
WithURL("https://github.com/daixiang0/gci"),
432434

435+
linter.NewConfig(golinters.NewGinkgoLinter(ginkgolinterCfg)).
436+
WithSince("v1.51.0").
437+
WithLoadForGoAnalysis().
438+
WithPresets(linter.PresetStyle).
439+
WithURL("https://github.com/nunnatsa/ginkgolinter"),
440+
433441
linter.NewConfig(golinters.NewGochecknoglobals()).
434442
WithSince("v1.12.0").
435443
WithPresets(linter.PresetStyle).

test/linters_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func TestTypecheck(t *testing.T) {
3030
func TestSourcesFromTestdataSubDir(t *testing.T) {
3131
subDirs := []string{
3232
"loggercheck",
33+
"ginkgolinter",
3334
}
3435

3536
for _, dir := range subDirs {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
linters-settings:
2+
ginkgolinter: {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-err-assertion: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-len-assertion: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-nil-assertion: true
+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
//golangcitest:args --disable-all -Eginkgolinter
2+
package ginkgolinter
3+
4+
import (
5+
"errors"
6+
. "github.com/onsi/gomega"
7+
)
8+
9+
func LenUsecase() {
10+
var fakeVarUnderTest []int
11+
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
12+
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
13+
14+
Expect(len(fakeVarUnderTest)).Should(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(BeEmpty\\(\\)\\). instead"
15+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(HaveLen\\(2\\)\\). instead"
16+
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0)) // // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.To\\(BeEmpty\\(\\)\\). instead"
17+
18+
fakeVarUnderTest = append(fakeVarUnderTest, 3)
19+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(BeEmpty\\(\\)\\). instead"
20+
Expect(len(fakeVarUnderTest)).Should(Equal(1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(HaveLen\\(1\\)\\). instead"
21+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
22+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
23+
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
24+
}
25+
26+
func NilUsecase() {
27+
y := 5
28+
x := &y
29+
Expect(x == nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
30+
Expect(nil == x).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
31+
Expect(x != nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
32+
Expect(x == nil).To(BeTrue()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
33+
Expect(x == nil).To(BeFalse()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
34+
}
35+
func BooleanUsecase() {
36+
x := true
37+
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
38+
x = false
39+
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
40+
}
41+
42+
func ErrorUsecase() {
43+
err := errors.New("fake error")
44+
funcReturnsErr := func() error { return err }
45+
46+
Expect(err).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
47+
Expect(err == nil).To(Equal(true)) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
48+
Expect(err == nil).To(BeFalse()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
49+
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
50+
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//golangcitest:config_path configs/ginkgolinter_suppress_err.yml
2+
//golangcitest:args --disable-all -Eginkgolinter
3+
package ginkgolinter
4+
5+
import (
6+
"errors"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func LenUsecase_err() {
11+
var fakeVarUnderTest []int
12+
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
13+
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
14+
15+
Expect(len(fakeVarUnderTest)).Should(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(BeEmpty\\(\\)\\). instead"
16+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(HaveLen\\(2\\)\\). instead"
17+
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0)) // // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.To\\(BeEmpty\\(\\)\\). instead"
18+
19+
fakeVarUnderTest = append(fakeVarUnderTest, 3)
20+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(BeEmpty\\(\\)\\). instead"
21+
Expect(len(fakeVarUnderTest)).Should(Equal(1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(HaveLen\\(1\\)\\). instead"
22+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
23+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
24+
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
25+
}
26+
27+
func NilUsecase_err() {
28+
y := 5
29+
x := &y
30+
Expect(x == nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
31+
Expect(nil == x).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
32+
Expect(x != nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
33+
Expect(x == nil).To(BeTrue()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
34+
Expect(x == nil).To(BeFalse()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
35+
}
36+
func BooleanUsecase_err() {
37+
x := true
38+
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
39+
x = false
40+
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
41+
}
42+
43+
func ErrorUsecase_err() {
44+
err := errors.New("fake error")
45+
funcReturnsErr := func() error { return err }
46+
47+
Expect(err).To(BeNil())
48+
Expect(err == nil).To(Equal(true))
49+
Expect(err == nil).To(BeFalse())
50+
Expect(err != nil).To(BeTrue())
51+
Expect(funcReturnsErr()).To(BeNil())
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//golangcitest:config_path configs/ginkgolinter_suppress_len.yml
2+
//golangcitest:args --disable-all -Eginkgolinter
3+
package ginkgolinter
4+
5+
import (
6+
"errors"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func LenUsecase_len() {
11+
var fakeVarUnderTest []int
12+
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
13+
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
14+
15+
Expect(len(fakeVarUnderTest)).Should(Equal(0))
16+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2))
17+
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0))
18+
19+
fakeVarUnderTest = append(fakeVarUnderTest, 3)
20+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0))
21+
Expect(len(fakeVarUnderTest)).Should(Equal(1))
22+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0))
23+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1))
24+
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0))
25+
}
26+
27+
func NilUsecase_len() {
28+
y := 5
29+
x := &y
30+
Expect(x == nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
31+
Expect(nil == x).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
32+
Expect(x != nil).To(Equal(true)) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
33+
Expect(x == nil).To(BeTrue()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.To\\(BeNil\\(\\)\\). instead"
34+
Expect(x == nil).To(BeFalse()) // want "ginkgo-linter: wrong nil assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNil\\(\\)\\). instead"
35+
}
36+
func BooleanUsecase_len() {
37+
x := true
38+
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
39+
x = false
40+
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
41+
}
42+
43+
func ErrorUsecase_len() {
44+
err := errors.New("fake error")
45+
funcReturnsErr := func() error { return err }
46+
47+
Expect(err).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
48+
Expect(err == nil).To(Equal(true)) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
49+
Expect(err == nil).To(BeFalse()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
50+
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
51+
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//golangcitest:args --disable-all -Eginkgolinter
2+
//golangcitest:config_path configs/ginkgolinter_suppress_nil.yml
3+
package ginkgolinter
4+
5+
import (
6+
"errors"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func LenUsecase_nil() {
11+
var fakeVarUnderTest []int
12+
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
13+
Expect(fakeVarUnderTest).ShouldNot(HaveLen(5)) // valid
14+
15+
Expect(len(fakeVarUnderTest)).Should(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(BeEmpty\\(\\)\\). instead"
16+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(2)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(HaveLen\\(2\\)\\). instead"
17+
Expect(len(fakeVarUnderTest)).To(BeNumerically("==", 0)) // // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.To\\(BeEmpty\\(\\)\\). instead"
18+
19+
fakeVarUnderTest = append(fakeVarUnderTest, 3)
20+
Expect(len(fakeVarUnderTest)).ShouldNot(Equal(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ShouldNot\\(BeEmpty\\(\\)\\). instead"
21+
Expect(len(fakeVarUnderTest)).Should(Equal(1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.Should\\(HaveLen\\(1\\)\\). instead"
22+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
23+
Expect(len(fakeVarUnderTest)).To(BeNumerically(">=", 1)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
24+
Expect(len(fakeVarUnderTest)).To(BeNumerically("!=", 0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(fakeVarUnderTest\\)\\.ToNot\\(BeEmpty\\(\\)\\). instead"
25+
}
26+
27+
func NilUsecase_nil() {
28+
y := 5
29+
x := &y
30+
Expect(x == nil).To(Equal(true))
31+
Expect(nil == x).To(Equal(true))
32+
Expect(x != nil).To(Equal(true))
33+
Expect(x == nil).To(BeTrue())
34+
Expect(x == nil).To(BeFalse())
35+
}
36+
func BooleanUsecase_nil() {
37+
x := true
38+
Expect(x).To(Equal(true)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeTrue\\(\\)\\). instead"
39+
x = false
40+
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
41+
}
42+
43+
func ErrorUsecase_nil() {
44+
err := errors.New("fake error")
45+
funcReturnsErr := func() error { return err }
46+
47+
Expect(err).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
48+
Expect(err == nil).To(Equal(true)) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.ToNot\\(HaveOccurred\\(\\)\\). instead"
49+
Expect(err == nil).To(BeFalse()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
50+
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
51+
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
52+
}

test/testdata/ginkgolinter/go.mod

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module ginkgolinter
2+
3+
go 1.19
4+
5+
require github.com/onsi/gomega v1.24.1
6+
7+
require (
8+
github.com/google/go-cmp v0.5.9 // indirect
9+
golang.org/x/net v0.2.0 // indirect
10+
golang.org/x/text v0.4.0 // indirect
11+
gopkg.in/yaml.v3 v3.0.1 // indirect
12+
)

0 commit comments

Comments
 (0)