diff options
author | Teddy Wing | 2023-05-21 21:26:21 +0200 |
---|---|---|
committer | Teddy Wing | 2023-05-21 21:26:21 +0200 |
commit | 23c85d97f84631905109347c0454b2f70120a04b (patch) | |
tree | 5f801979632bc59eca4cc98b8831c6582a4900b8 /defererr.go | |
parent | 7ad57bcea66fe4c8eeff73b4087fcfd10dd5312f (diff) | |
download | godefererr-23c85d97f84631905109347c0454b2f70120a04b.tar.bz2 |
Check whether `return` uses error variable set in `defer`
This reports diagnostics when using `return nil` instead of `return err`
when `err` is an error variable assigned in the first `defer` closure.
Diffstat (limited to 'defererr.go')
-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. |