aboutsummaryrefslogtreecommitdiffstats
path: root/defererr.go
diff options
context:
space:
mode:
authorTeddy Wing2023-05-18 23:42:59 +0200
committerTeddy Wing2023-05-18 23:42:59 +0200
commit1d6aca277d7a2a617810daa74fc0a01d6bd5f776 (patch)
tree5ff1225c4678540dc2dab2aa8b3ba99ec7717fff /defererr.go
parent9993783a0d2fc7e087e6370288ed191cfa292a9f (diff)
downloadgodefererr-1d6aca277d7a2a617810daa74fc0a01d6bd5f776.tar.bz2
Find assignments in defer closure
Diffstat (limited to 'defererr.go')
-rw-r--r--defererr.go27
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
},
)