aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2023-05-20 20:44:54 +0200
committerTeddy Wing2023-05-20 20:44:54 +0200
commitf6b3dd27e854ec96e1a29e6034ff1e22c2283719 (patch)
treefd3f5204e789647195d85de5476e45f16727b518
parent6c4e3d66fa88ce4bfea8fec799c97ec53f4f9b21 (diff)
downloadgodefererr-f6b3dd27e854ec96e1a29e6034ff1e22c2283719.tar.bz2
Find function signature return value names
And add a test function that does have named returned values.
-rw-r--r--defererr.go9
-rw-r--r--testdata/signature.go15
2 files changed, 22 insertions, 2 deletions
diff --git a/defererr.go b/defererr.go
index 87697a3..c7816e9 100644
--- a/defererr.go
+++ b/defererr.go
@@ -37,7 +37,12 @@ func run(pass *analysis.Pass) (interface{}, error) {
funcReturnsError := false
for _, returnVal := range funcDecl.Type.Results.List {
- fmt.Printf("returnVal: %#v\n", returnVal.Type)
+ fmt.Printf("returnVal: %#v\n", returnVal)
+ for _, ident := range returnVal.Names {
+ fmt.Printf("returnVal name: %#v\n", ident)
+ }
+
+ fmt.Printf("returnVal Type: %#v\n", returnVal.Type)
returnIdent, ok := returnVal.Type.(*ast.Ident)
if !ok {
@@ -167,6 +172,8 @@ func run(pass *analysis.Pass) (interface{}, error) {
// fmt.Printf("returnVal: %#v\n", returnVal)
// }
+ fmt.Println()
+
return true
},
)
diff --git a/testdata/signature.go b/testdata/signature.go
index 17cfd0b..6fc15fc 100644
--- a/testdata/signature.go
+++ b/testdata/signature.go
@@ -2,7 +2,7 @@ package main
import "errors"
-func declareErrInSignature() error { // want "return signature should be '(err error)'"
+func shouldDeclareErrInSignature() error { // want "return signature should be '(err error)'"
var err error // Should use variable declared in signature
err = nil
@@ -16,3 +16,16 @@ func declareErrInSignature() error { // want "return signature should be '(err e
return nil // want "does not return 'err'"
}
+
+func doesDeclareErrInSignature() (err error) {
+ err = nil
+ if err != nil {
+ return err
+ }
+
+ defer func() {
+ err = errors.New("defer error")
+ }()
+
+ return nil // want "does not return 'err'"
+}