Skip to content

Commit db3b623

Browse files
committed
Fix false positive when asserting an error pointer
When using a pointer as an error, like in: ```go type myErr struct { code int } func (e *myErr) Error() string { ... } ... err = &myErr{code: 404} Expect(err).To(HaveOccured()) ``` ginkgolinter mistakely detects `err` as not error type. This PR fixes this issue.
1 parent de40b9e commit db3b623

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

internal/expression/value/value.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,10 @@ func IsExprError(pass *analysis.Pass, expr ast.Expr) bool {
194194
return interfaces.ImplementsError(actualArgType)
195195

196196
case *gotypes.Pointer:
197+
if interfaces.ImplementsError(t) {
198+
return true
199+
}
200+
197201
if tt, ok := t.Elem().(*gotypes.Named); ok {
198202
return interfaces.ImplementsError(tt)
199203
}

testdata/src/a/haveoccurred/haveoccurred.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,38 @@ var _ = Describe("Succeed", func() {
4747
})
4848

4949
})
50+
51+
type myError struct {
52+
e string
53+
}
54+
55+
func (e *myError) Error() string {
56+
return e.e
57+
}
58+
59+
func retErr(str string) *myError {
60+
return &myError{e: str}
61+
}
62+
63+
var _ = Describe("pointer error", func() {
64+
Context("err pointer var", func() {
65+
It("should not trigger warning", func() {
66+
err := &myError{e: "err"}
67+
Expect(err).To(HaveOccurred())
68+
})
69+
70+
})
71+
72+
Context("returned value", func() {
73+
It("should not trigger warning", func() {
74+
err := retErr("err")
75+
Expect(err).To(HaveOccurred())
76+
})
77+
})
78+
79+
Context("Succeed", func() {
80+
It("should not trigger warning", func() {
81+
Expect(retErr("err")).ToNot(Succeed())
82+
})
83+
})
84+
})

0 commit comments

Comments
 (0)