From 15b6d6ae795fdf95352ee17bbd5160a707995f7e Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 26 May 2023 21:26:45 +0200 Subject: Add README --- README.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 README.md 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 +========== + +[![GoDoc](https://godocs.io/gopkg.teddywing.com/defererr?status.svg)][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 -- cgit v1.2.3