diff options
author | Teddy Wing | 2023-05-18 23:42:59 +0200 |
---|---|---|
committer | Teddy Wing | 2023-05-18 23:42:59 +0200 |
commit | 1d6aca277d7a2a617810daa74fc0a01d6bd5f776 (patch) | |
tree | 5ff1225c4678540dc2dab2aa8b3ba99ec7717fff /defererr.go | |
parent | 9993783a0d2fc7e087e6370288ed191cfa292a9f (diff) | |
download | godefererr-1d6aca277d7a2a617810daa74fc0a01d6bd5f776.tar.bz2 |
Find assignments in defer closure
Diffstat (limited to 'defererr.go')
-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 }, ) |