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 +} | 
