diff options
-rw-r--r-- | defererr.go | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/defererr.go b/defererr.go index ae5f688..6bd1188 100644 --- a/defererr.go +++ b/defererr.go @@ -4,6 +4,7 @@ package defererr import ( "fmt" "go/ast" + "go/token" "golang.org/x/tools/go/analysis" ) @@ -39,7 +40,7 @@ func run(pass *analysis.Pass) (interface{}, error) { returnIdent, ok := returnVal.Type.(*ast.Ident) if !ok { - return true + return true } if returnIdent.Name == "error" { @@ -68,6 +69,30 @@ func run(pass *analysis.Pass) (interface{}, error) { // TODO: Find out if defer uses assigns an error variable without declaring it + funcLit, ok := deferStmt.Call.Fun.(*ast.FuncLit) + if !ok { + return true + } + + ast.Inspect( + funcLit.Body, + func(node ast.Node) bool { + assignStmt, ok := node.(*ast.AssignStmt) + if !ok { + return true + } + + if assignStmt.Tok == token.DEFINE { + return true + } + + fmt.Printf("assignStmt: %#v\n", assignStmt) + fmt.Printf("token: %d\n", token.DEFINE) + + return true + }, + ) + return true }, ) |