From 9a15014411a93d47b7056248754cde43aaf19382 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Tue, 16 May 2023 20:44:34 +0200 Subject: Try to get the arguments of the closure from `goStmt.Call.Args` --- gocapturedrefrace.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gocapturedrefrace.go b/gocapturedrefrace.go index 3174a09..de3bf10 100644 --- a/gocapturedrefrace.go +++ b/gocapturedrefrace.go @@ -34,6 +34,17 @@ func run(pass *analysis.Pass) (interface{}, error) { } fmt.Printf("%#v\n", goStmt) + fmt.Printf("closure arguments: %#v\n", goStmt.Call.Args) + + for _, arg := range goStmt.Call.Args { + argIdent, ok := arg.(*ast.Ident) + if !ok { + return true + } + + fmt.Printf("argIdent: %s: %#v\n", argIdent.Name, argIdent.Obj) + // Doesn't include `(s *aStruct)` which is a `*ast.UnaryExpr`, not a `*ast.Ident`. + } // TODO: How to get types.Func or {ast,types}.Scope of function literal? funcIdent, ok := goStmt.Call.Fun.(*ast.Ident) -- cgit v1.2.3