aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gocapturedrefrace.go49
1 files changed, 1 insertions, 48 deletions
diff --git a/gocapturedrefrace.go b/gocapturedrefrace.go
index c3d5d82..6d560a1 100644
--- a/gocapturedrefrace.go
+++ b/gocapturedrefrace.go
@@ -1,10 +1,8 @@
package gocapturedrefrace
import (
- "bytes"
"fmt"
"go/ast"
- "go/printer"
"go/token"
"go/types"
@@ -27,54 +25,13 @@ func run(pass *analysis.Pass) (interface{}, error) {
return true
}
- var printedNode bytes.Buffer
- err := printer.Fprint(&printedNode, pass.Fset, goStmt)
- if err != nil {
- panic(err)
- }
-
- 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)
- funcObj := pass.TypesInfo.ObjectOf(funcIdent)
- if funcObj != nil {
- theFunc, ok := funcObj.(*types.Func)
- if ok {
- fmt.Printf("func scope: %#v\n", theFunc.Scope())
- } else {
- fmt.Println("func scope: error")
- }
- } else {
- fmt.Println("funcObj: error")
- }
-
- // TODO: Get func literal of go statement
- // TODO: Get variables in func literal
funcLit, ok := goStmt.Call.Fun.(*ast.FuncLit)
if !ok {
return true
}
- fmt.Printf("funcLit params: %#v\n", funcLit.Type.Params.List)
for _, arg := range funcLit.Type.Params.List {
- fmt.Printf(
- "funcLit param: %s ; type: %#v\n",
- arg.Names[0].Name,
- arg.Type,
- )
-
+ // TODO: Explain
_, ok := arg.Type.(*ast.StarExpr)
if !ok {
continue
@@ -87,11 +44,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
)
}
- // scope := pass.TypesInfo.Scopes[funcLit]
- // scope := pass.TypesInfo.Scopes[goStmt]
- // scope := pass.TypesInfo.Scopes[funcLit.Body]
funcScope := pass.TypesInfo.Scopes[funcLit.Type]
- fmt.Println("scope:", funcScope)
checkClosure(pass, funcLit, funcScope)