diff options
-rw-r--r-- | defererr.go | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/defererr.go b/defererr.go index 0305dd8..96072be 100644 --- a/defererr.go +++ b/defererr.go @@ -182,21 +182,28 @@ func checkFunctions(pass *analysis.Pass, node ast.Node) { fmt.Printf("returnStmt value type: %#v\n", t) fmt.Printf("returnStmt type type: %#v\n", t.Type) + returnErrorIdent, ok := returnErrorExpr.(*ast.Ident) + if !ok { + return true + } + // TODO: Require t.Type to be *types.Named _, ok = t.Type.(*types.Named) if !ok { // TODO: report + + pass.Reportf( + returnErrorIdent.Pos(), + "does not return '%s'", + fState.deferErrorVar, + ) + return true } // Or, we want to compare with the error declared in the function signature. fmt.Printf("returnError: %#v\n", returnErrorExpr) - returnErrorIdent, ok := returnErrorExpr.(*ast.Ident) - if !ok { - return true - } - if returnErrorIdent.Name == fState.deferErrorVar.Name { fmt.Printf( "names: return:%#v : defer:%#v\n", @@ -316,9 +323,11 @@ func checkErrorAssignedInDefer( } } - if len(errorReturnField.Names) > 0 { - fState.deferErrorVar = errorReturnField.Names[0] - } + // fmt.Printf("named: %#v\n", named) + // if len(errorReturnField.Names) > 0 { + // fState.deferErrorVar = errorReturnField.Names[0] + // } + fState.deferErrorVar = ident // Maybe don't report the error if it was declared in the closure using a GenDecl? -> We already don't. Should test for these things. |