diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..5aaed57 --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +godefererr +========== + +[][Documentation] + +An analyser that reports incorrectly returned errors from defer closures. + +Errors can be returned from a `defer` closure by assigning the error to a +captured variable declared in the function signature. This analyser looks for +defer closures that assign captured error variables and checks that they are +correctly declared and returned. + + +## Example +Given the following program: + +``` go +package main + +import ( + "errors" + "log" +) + +func main() { + err := returnErrorFromDefer() + if err != nil { + log.Fatal(err) + } + + log.Println("test") +} + +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' +} +``` + +the analyser produces the following results: + + $ godefererr ./... + package_doc_example.go:17:29: return signature should use named error parameter err + package_doc_example.go:27:9: does not return 'err' + + +## Install + + $ go install gopkg.teddywing.com/defererr/cmd/godefererr@latest + + +## License +Copyright © 2023 Teddy Wing. Licensed under the GNU GPLv3+ (see the included +COPYING file). + + +[Documentation]: https://godocs.io/gopkg.teddywing.com/defererr |