diff options
author | Teddy Wing | 2023-05-20 02:08:44 +0200 |
---|---|---|
committer | Teddy Wing | 2023-05-20 02:08:44 +0200 |
commit | 266552a2e1b202b2aadb7b6105e07afdd681ef5c (patch) | |
tree | 011ab86d28dcdd458856403f6250a975407ed252 | |
parent | 47060dea4ac14437ee0f67dabdb1375cb3e19e2d (diff) | |
download | gocapturedrefrace-266552a2e1b202b2aadb7b6105e07afdd681ef5c.tar.bz2 |
Find `*ast.FuncLit` in local assignment
Get the FuncLit from the rhs of the local variable.
-rw-r--r-- | capturedrefrace.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/capturedrefrace.go b/capturedrefrace.go index afb104c..54c5c04 100644 --- a/capturedrefrace.go +++ b/capturedrefrace.go @@ -94,6 +94,26 @@ func run(pass *analysis.Pass) (interface{}, error) { obj := pass.TypesInfo.Uses[funcIdent] fmt.Printf("funcobj-fromtypesinfo: %#v\n", obj) fmt.Printf("funcobj-fromtypesinfo-type: %#v\n", obj.Type()) + def := pass.TypesInfo.Defs[funcIdent] + fmt.Printf("func def: %#v\n", def) + + obj2 := pass.TypesInfo.ObjectOf(funcIdent) + fmt.Printf("obj2: %#v\n", obj2) + + fmt.Printf("obj-parent: %#v\n", obj.Parent()) + + fmt.Printf("parent lookup: %#v\n", obj.Parent().Lookup(obj.Name())) + // TODO: How to get the scope of the closure? + + das, ok := funcIdent.Obj.Decl.(*ast.AssignStmt) + if ok { + for _, expr := range das.Rhs { + fl, ok := expr.(*ast.FuncLit) + if ok { + fmt.Printf("funclit: %#v\n", fl) + } + } + } } // Look for a function literal after the `go` statement. |