diff options
-rw-r--r-- | defererr.go | 16 | ||||
-rw-r--r-- | testdata/signature.go | 13 |
2 files changed, 29 insertions, 0 deletions
diff --git a/defererr.go b/defererr.go index 063da7e..4d1ba6b 100644 --- a/defererr.go +++ b/defererr.go @@ -176,6 +176,21 @@ func checkFunctions(pass *analysis.Pass, node ast.Node) { // TODO: Get returnStmt.Results[error index from function result signature] // If not variable and name not [error variable name from defer], report diagnostic + returnError := returnStmt.Results[errorReturnIndex] + t := pass.TypesInfo.Types[returnError] + fmt.Printf("returnStmt value type: %#v\n", t) + fmt.Printf("returnStmt type type: %#v\n", t.Type) + + // TODO: Require t.Type to be *types.Named + _, ok = t.Type.(*types.Named) + if !ok { + // TODO: report + return true + } + + fmt.Printf("returnError: %#v\n", returnError) + if returnError.Name == x { + } return true }, @@ -266,6 +281,7 @@ func checkErrorAssignedInDefer( isErrorNameInReturnSignature := false + // TODO: Use the var name in return statement checks. for _, errorReturnIdent := range errorReturnField.Names { if ident.Name == errorReturnIdent.Name { // Report if no matches diff --git a/testdata/signature.go b/testdata/signature.go index d780240..c839934 100644 --- a/testdata/signature.go +++ b/testdata/signature.go @@ -29,3 +29,16 @@ func doesDeclareErrInSignature() (err error) { return nil // want "does not return 'err'" } + +func good() (err error) { + err = nil + if err != nil { + return err + } + + defer func() { + err = errors.New("defer error") + }() + + return err +} |