aboutsummaryrefslogtreecommitdiffstats
path: root/defererr.go
diff options
context:
space:
mode:
authorTeddy Wing2023-05-26 20:09:36 +0200
committerTeddy Wing2023-05-26 20:09:36 +0200
commit7e7367c145b9ac3740ee51bc8cf509948138aa8b (patch)
treeb7156c16b0791988545fbf35afa8c9d17e7f3174 /defererr.go
parentec52bd27685fef75ffe76333989760f3cf551743 (diff)
downloadgodefererr-7e7367c145b9ac3740ee51bc8cf509948138aa8b.tar.bz2
Add package documentation
Tried the sample code and it looks like the `return err` is not necessary. The `err` set in `defer` does work find even when using `return nil`. Oh well, we can adjust that check later if needed.
Diffstat (limited to 'defererr.go')
-rw-r--r--defererr.go28
1 files changed, 27 insertions, 1 deletions
diff --git a/defererr.go b/defererr.go
index efd6e55..e1e3182 100644
--- a/defererr.go
+++ b/defererr.go
@@ -1,4 +1,30 @@
-// TODO: doc
+// Package defererr defines an Analyzer that checks whether an error set in a
+// defer closure is correctly returned.
+//
+// # Analyzer defererr
+//
+// defererr: report incorrectly returned errors from defer closures.
+//
+// Errors can be returned from a defer closure by setting a captured error
+// variable within the closure. In order for this to work, the error variable
+// must be declared in the function signature, and must be returned somewhere
+// in the function. This analyzer checks to make sure that captured error
+// variables assigned in defer closures are correctly declared and returned.
+//
+// For example:
+//
+// func returnErrorFromDefer() error { // return signature should be '(err error)'
+// var err error = nil
+// if err != nil {
+// return err
+// }
+//
+// defer func() {
+// err = errors.New("defer error")
+// }()
+//
+// return nil // return should use 'err'
+// }
package defererr
import (