Skip to content

Commit e81593a

Browse files
committed
Bump ginkgolinter to v0.9.0 and add configurations
ginkgolinter version v0.9.0 brings two new rules. Both rules can be disabled from the configuration. This PR bumps the ginkgolinter to v0.9.0 and add the new configurations. The two new rules are: * haveLen(0) rule: `HaveLen(0)` ==> `BeEmpty()` * wrong comparison rule: `Expect(x == y).To(BeTrue())` ==> `Expect(x).To(Equal(y))` Full details are in the ginkgolinter README.md file, here: https://github.com/nunnatsa/ginkgolinter#readme.
1 parent 71be32a commit e81593a

13 files changed

+231
-15
lines changed

.golangci.reference.yml

+8
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,14 @@ linters-settings:
418418
# Default: false
419419
suppress-err-assertion: true
420420

421+
# Suppress the wrong comparison assertion warning.
422+
# Default: false
423+
suppress-compare-assertion: true
424+
425+
# Don't trigger warnings for HaveLen(0)
426+
# Default: false
427+
allow-havelen-zero: true
428+
421429
gocognit:
422430
# Minimal code complexity to report.
423431
# Default: 30 (but we recommend 10-20)

go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ require (
7474
github.com/nakabonne/nestif v0.3.1
7575
github.com/nishanths/exhaustive v0.9.5
7676
github.com/nishanths/predeclared v0.2.2
77-
github.com/nunnatsa/ginkgolinter v0.8.1
77+
github.com/nunnatsa/ginkgolinter v0.9.0
7878
github.com/polyfloyd/go-errorlint v1.2.0
7979
github.com/quasilyte/go-ruleguard/dsl v0.3.22
8080
github.com/ryancurrah/gomodguard v1.3.0
@@ -128,7 +128,7 @@ require (
128128
github.com/fsnotify/fsnotify v1.5.4 // indirect
129129
github.com/go-ole/go-ole v1.2.6 // indirect
130130
github.com/go-toolsmith/astcast v1.1.0 // indirect
131-
github.com/go-toolsmith/astcopy v1.0.3 // indirect
131+
github.com/go-toolsmith/astcopy v1.1.0 // indirect
132132
github.com/go-toolsmith/astequal v1.1.0 // indirect
133133
github.com/go-toolsmith/astfmt v1.1.0 // indirect
134134
github.com/go-toolsmith/astp v1.1.0 // indirect
@@ -178,7 +178,7 @@ require (
178178
go.uber.org/multierr v1.6.0 // indirect
179179
go.uber.org/zap v1.17.0 // indirect
180180
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
181-
golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9 // indirect
181+
golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 // indirect
182182
golang.org/x/mod v0.8.0 // indirect
183183
golang.org/x/sync v0.1.0 // indirect
184184
golang.org/x/sys v0.5.0 // indirect

go.sum

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

pkg/config/linters_settings.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,11 @@ type GciSettings struct {
325325
}
326326

327327
type GinkgoLinterSettings struct {
328-
SuppressLenAssertion bool `mapstructure:"suppress-len-assertion"`
329-
SuppressNilAssertion bool `mapstructure:"suppress-nil-assertion"`
330-
SuppressErrAssertion bool `mapstructure:"suppress-err-assertion"`
328+
SuppressLenAssertion bool `mapstructure:"suppress-len-assertion"`
329+
SuppressNilAssertion bool `mapstructure:"suppress-nil-assertion"`
330+
SuppressErrAssertion bool `mapstructure:"suppress-err-assertion"`
331+
SuppressCompareAssertion bool `mapstructure:"suppress-compare-assertion"`
332+
AllowHaveLenZero bool `mapstructure:"allow-havelen-zero"`
331333
}
332334

333335
type GocognitSettings struct {

pkg/golinters/ginkgolinter.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ func NewGinkgoLinter(cfg *config.GinkgoLinterSettings) *goanalysis.Linter {
1414
cfgMap := make(map[string]map[string]interface{})
1515
if cfg != nil {
1616
cfgMap[a.Name] = map[string]interface{}{
17-
"suppress-len-assertion": cfg.SuppressLenAssertion,
18-
"suppress-nil-assertion": cfg.SuppressNilAssertion,
19-
"suppress-err-assertion": cfg.SuppressErrAssertion,
17+
"suppress-len-assertion": cfg.SuppressLenAssertion,
18+
"suppress-nil-assertion": cfg.SuppressNilAssertion,
19+
"suppress-err-assertion": cfg.SuppressErrAssertion,
20+
"suppress-compare-assertion": cfg.SuppressCompareAssertion,
21+
"allow-havelen-0": cfg.AllowHaveLenZero,
2022
}
2123
}
2224

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
allow-havelen-zero: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
ginkgolinter:
3+
suppress-compare-assertion: true

test/testdata/ginkgolinter/ginkgolinter.go

+15
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,18 @@ func ErrorUsecase() {
4949
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
5050
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
5151
}
52+
53+
func HaveLen0Usecase() {
54+
x := make([]string, 0)
55+
Expect(x).To(HaveLen(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(x\\)\\.To\\(BeEmpty\\(\\)\\). instead"
56+
}
57+
58+
func WrongComparisonUsecase() {
59+
x := 8
60+
Expect(x == 8).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(Equal\\(8\\)\\). instead"
61+
Expect(x < 9).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(BeNumerically\\(\"<\", 9\\)\\). instead"
62+
Expect(x < 7).To(Equal(false)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNumerically\\(\"<\", 7\\)\\). instead"
63+
64+
p1, p2 := &x, &x
65+
Expect(p1 == p2).To(Equal(true)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(p1\\).To\\(BeIdenticalTo\\(p2\\)\\). instead"
66+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
//golangcitest:config_path configs/ginkgolinter_allow_havelen0.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_havelen0() {
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_havelen0() {
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_havelen0() {
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_havelen0() {
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+
}
53+
54+
func HaveLen0Usecase_havelen0() {
55+
x := make([]string, 0)
56+
Expect(x).To(HaveLen(0))
57+
}
58+
59+
func WrongComparisonUsecase_havelen0() {
60+
x := 8
61+
Expect(x == 8).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(Equal\\(8\\)\\). instead"
62+
Expect(x < 9).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(BeNumerically\\(\"<\", 9\\)\\). instead"
63+
Expect(x < 7).To(Equal(false)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNumerically\\(\"<\", 7\\)\\). instead"
64+
65+
p1, p2 := &x, &x
66+
Expect(p1 == p2).To(Equal(true)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(p1\\).To\\(BeIdenticalTo\\(p2\\)\\). instead"
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
//golangcitest:config_path configs/ginkgolinter_suppress_compare.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_compare() {
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_compare() {
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_compare() {
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_compare() {
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+
}
53+
54+
func HaveLen0Usecase_compare() {
55+
x := make([]string, 0)
56+
Expect(x).To(HaveLen(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(x\\)\\.To\\(BeEmpty\\(\\)\\). instead"
57+
}
58+
59+
// WrongComparisonUsecase_compare should not trigger any warning
60+
func WrongComparisonUsecase_compare() {
61+
x := 8
62+
Expect(x == 8).To(BeTrue())
63+
Expect(x < 9).To(BeTrue())
64+
Expect(x < 7).To(Equal(false))
65+
66+
p1, p2 := &x, &x
67+
Expect(p1 == p2).To(Equal(true))
68+
}

test/testdata/ginkgolinter/ginkgolinter_suppress_err.go

+16
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func BooleanUsecase_err() {
4040
Expect(x).To(Equal(false)) // want "ginkgo-linter: wrong boolean assertion; consider using .Expect\\(x\\)\\.To\\(BeFalse\\(\\)\\). instead"
4141
}
4242

43+
// ErrorUsecase_err should not trigger any warning
4344
func ErrorUsecase_err() {
4445
err := errors.New("fake error")
4546
funcReturnsErr := func() error { return err }
@@ -50,3 +51,18 @@ func ErrorUsecase_err() {
5051
Expect(err != nil).To(BeTrue())
5152
Expect(funcReturnsErr()).To(BeNil())
5253
}
54+
55+
func HaveLen0Usecase_err() {
56+
x := make([]string, 0)
57+
Expect(x).To(HaveLen(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(x\\)\\.To\\(BeEmpty\\(\\)\\). instead"
58+
}
59+
60+
func WrongComparisonUsecase_err() {
61+
x := 8
62+
Expect(x == 8).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(Equal\\(8\\)\\). instead"
63+
Expect(x < 9).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(BeNumerically\\(\"<\", 9\\)\\). instead"
64+
Expect(x < 7).To(Equal(false)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNumerically\\(\"<\", 7\\)\\). instead"
65+
66+
p1, p2 := &x, &x
67+
Expect(p1 == p2).To(Equal(true)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(p1\\).To\\(BeIdenticalTo\\(p2\\)\\). instead"
68+
}

test/testdata/ginkgolinter/ginkgolinter_suppress_len.go

+16
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
. "github.com/onsi/gomega"
88
)
99

10+
// LenUsecase_len should not trigger any warning
1011
func LenUsecase_len() {
1112
var fakeVarUnderTest []int
1213
Expect(fakeVarUnderTest).Should(BeEmpty()) // valid
@@ -50,3 +51,18 @@ func ErrorUsecase_len() {
5051
Expect(err != nil).To(BeTrue()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(err\\)\\.To\\(HaveOccurred\\(\\)\\). instead"
5152
Expect(funcReturnsErr()).To(BeNil()) // want "ginkgo-linter: wrong error assertion; consider using .Expect\\(funcReturnsErr\\(\\)\\)\\.To\\(Succeed\\(\\)\\). instead"
5253
}
54+
55+
func HaveLen0Usecase_len() {
56+
x := make([]string, 0)
57+
Expect(x).To(HaveLen(0)) // want "ginkgo-linter: wrong length assertion; consider using .Expect\\(x\\)\\.To\\(BeEmpty\\(\\)\\). instead"
58+
}
59+
60+
func WrongComparisonUsecase_len() {
61+
x := 8
62+
Expect(x == 8).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(Equal\\(8\\)\\). instead"
63+
Expect(x < 9).To(BeTrue()) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.To\\(BeNumerically\\(\"<\", 9\\)\\). instead"
64+
Expect(x < 7).To(Equal(false)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(x\\)\\.ToNot\\(BeNumerically\\(\"<\", 7\\)\\). instead"
65+
66+
p1, p2 := &x, &x
67+
Expect(p1 == p2).To(Equal(true)) // want "ginkgo-linter: wrong comparison assertion; consider using .Expect\\(p1\\).To\\(BeIdenticalTo\\(p2\\)\\). instead"
68+
}

0 commit comments

Comments
 (0)