diff options
| -rw-r--r-- | defererr.go | 37 | ||||
| -rw-r--r-- | testdata/signature.go | 2 | 
2 files changed, 38 insertions, 1 deletions
| diff --git a/defererr.go b/defererr.go index 338f2c1..8d1cb51 100644 --- a/defererr.go +++ b/defererr.go @@ -62,6 +62,7 @@ func run(pass *analysis.Pass) (interface{}, error) {  				if len(funcDecl.Type.Results.List[errorReturnIndex].Names) > 0 {  					fmt.Printf("return error var name: %#v\n", funcDecl.Type.Results.List[errorReturnIndex].Names[0])  				} +				errorReturnField := funcDecl.Type.Results.List[errorReturnIndex]  				ast.Inspect(  					funcDecl.Body, @@ -133,6 +134,25 @@ func run(pass *analysis.Pass) (interface{}, error) {  									if named.Obj().Name() == "error" {  										deferAssignsError = true + +										isErrorNameInReturnSignature := false + +										for _, errorReturnIdent := range errorReturnField.Names { +											if ident.Name == errorReturnIdent.Name { +												// Report if no matches +												isErrorNameInReturnSignature = true +											} +										} + +										if !isErrorNameInReturnSignature { +											pass.Reportf( +												errorReturnField.Pos(), +												"return signature should be '(err error)'", // TODO: Use name from ident.Name +												// errorReturnField, +											) + +											break +										}  									}  								} @@ -142,6 +162,23 @@ func run(pass *analysis.Pass) (interface{}, error) {  								// TODO: Check that funcDecl declares error in signature (check before ast.Inspect on function body, report here) +								// isErrorNameInReturnSignature := false +								// +								// for _, errorReturnIdent := range errorReturnField.Names { +								// 	if ident.Name == errorReturnIdent.Name { +								// 		// Report if no matches +								// 		isErrorNameInReturnSignature = true +								// 	} +								// } +								// +								// if !isErrorNameInReturnSignature { +								// 	pass.Reportf( +								// 		errorReturnField.Pos(), +								// 		"return signature should be '(err error)' (TODO)", +								// 		errorReturnField, +								// 	) +								// } +  								return true  							},  						) diff --git a/testdata/signature.go b/testdata/signature.go index 6fc15fc..d780240 100644 --- a/testdata/signature.go +++ b/testdata/signature.go @@ -2,7 +2,7 @@ package main  import "errors" -func shouldDeclareErrInSignature() 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 | 
