aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2023-05-21 00:11:53 +0200
committerTeddy Wing2023-05-21 00:14:48 +0200
commit44330f11a5f521f7cb8ed9de6956923c457ae50f (patch)
treec8e7ea0e18499b0476a4d08cb04a16300d6f7fe0
parent3f4e4cf94596eaae380385d81f9a629fbee0eb7d (diff)
downloadgodefererr-44330f11a5f521f7cb8ed9de6956923c457ae50f.tar.bz2
Add test to ensure error vars declared in defer closure are not reported
-rw-r--r--defererr.go2
-rw-r--r--testdata/declared_errors.go29
2 files changed, 31 insertions, 0 deletions
diff --git a/defererr.go b/defererr.go
index 8d1cb51..a4e6c8d 100644
--- a/defererr.go
+++ b/defererr.go
@@ -144,6 +144,8 @@ func run(pass *analysis.Pass) (interface{}, error) {
}
}
+ // Maybe don't report the error if it was declared in the closure using a GenDecl? -> We already don't. Should test for these things.
+
if !isErrorNameInReturnSignature {
pass.Reportf(
errorReturnField.Pos(),
diff --git a/testdata/declared_errors.go b/testdata/declared_errors.go
new file mode 100644
index 0000000..759ea0d
--- /dev/null
+++ b/testdata/declared_errors.go
@@ -0,0 +1,29 @@
+package main
+
+import (
+ "errors"
+ "log"
+)
+
+func genDeclErrNotReported() error {
+ defer func() {
+ var err error
+ err = errors.New("newly-declared error")
+ if err != nil {
+ log.Fatal(err)
+ }
+ }()
+
+ return nil
+}
+
+func assignmentDeclErrNotReported() error {
+ defer func() {
+ err := errors.New("newly-declared error")
+ if err != nil {
+ log.Fatal(err)
+ }
+ }()
+
+ return nil
+}