Skip to content

Commit 9c978e8

Browse files
committed
Add the ginkgolinter linter
The ginkgolinter checks the ginkgo assersions in go tests. See here for additional details: https://github.com/nunnatsa/ginkgolinter
1 parent 49e5bc0 commit 9c978e8

17 files changed

+321
-0
lines changed

.golangci.reference.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,19 @@ 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:
406419
# Minimal code complexity to report
407420
# Default: 30 (but we recommend 10-20)

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,5 @@ require (
186186
gopkg.in/yaml.v2 v2.4.0 // indirect
187187
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect
188188
)
189+
190+
require github.com/nunnatsa/ginkgolinter v0.5.0

go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/config/linters_settings.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ var defaultLintersSettings = LintersSettings{
4040
Sections: []string{"standard", "default"},
4141
SkipGenerated: true,
4242
},
43+
GinkgoLinter: GinkgolinterSettings{
44+
SuppressLenAssertion: false,
45+
},
4346
Gocognit: GocognitSettings{
4447
MinComplexity: 30,
4548
},
@@ -150,6 +153,7 @@ type LintersSettings struct {
150153
Forbidigo ForbidigoSettings
151154
Funlen FunlenSettings
152155
Gci GciSettings
156+
GinkgoLinter GinkgolinterSettings
153157
Gocognit GocognitSettings
154158
Goconst GoConstSettings
155159
Gocritic GoCriticSettings
@@ -321,6 +325,12 @@ type GciSettings struct {
321325
CustomOrder bool `mapstructure:"custom-order"`
322326
}
323327

328+
type GinkgolinterSettings struct {
329+
SuppressLenAssertion bool `mapstructure:"suppress-len-assertion"`
330+
SuppressNilAssertion bool `mapstructure:"suppress-nil-assertion"`
331+
SuppressErrAssertion bool `mapstructure:"suppress-err-assertion"`
332+
}
333+
324334
type GocognitSettings struct {
325335
MinComplexity int `mapstructure:"min-complexity"`
326336
}

pkg/golinters/ginkgolinter.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
settings := make(map[string]interface{})
17+
if cfg.SuppressLenAssertion {
18+
settings["suppress-len-assertion"] = true
19+
}
20+
21+
if cfg.SuppressNilAssertion {
22+
settings["suppress-nil-assertion"] = true
23+
}
24+
25+
if cfg.SuppressErrAssertion {
26+
settings["suppress-err-assertion"] = true
27+
}
28+
29+
if len(settings) > 0 {
30+
cfgMap[a.Name] = settings
31+
}
32+
}
33+
34+
return goanalysis.NewLinter(
35+
a.Name,
36+
a.Doc,
37+
[]*analysis.Analyzer{a},
38+
cfgMap,
39+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
40+
}

pkg/lint/lintersdb/manager.go

Lines changed: 8 additions & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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 {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
linters-settings:
2+
ginkgolinter: {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-err-assertion: true
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-len-assertion: true
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-nil-assertion: true
Lines changed: 51 additions & 0 deletions
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+
}
Lines changed: 52 additions & 0 deletions
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+
}
Lines changed: 52 additions & 0 deletions
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+
}
Lines changed: 52 additions & 0 deletions
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

Lines changed: 12 additions & 0 deletions
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)