diff options
| -rw-r--r-- | capturedrefrace.go | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/capturedrefrace.go b/capturedrefrace.go index c0bc646..52f7c34 100644 --- a/capturedrefrace.go +++ b/capturedrefrace.go @@ -51,6 +51,7 @@  package capturedrefrace  import ( +	"fmt"  	"go/ast"  	"go/token"  	"go/types" @@ -179,6 +180,8 @@ func checkClosure(pass *analysis.Pass, funcLit *ast.FuncLit) {  	ast.Inspect(  		funcLit,  		func(node ast.Node) bool { +			// fmt.Printf("node: %#v\n", node) +  			ident, ok := node.(*ast.Ident)  			if !ok {  				return true @@ -197,6 +200,7 @@ func checkClosure(pass *analysis.Pass, funcLit *ast.FuncLit) {  			// Find out whether `ident` was defined in an outer scope.  			scope, scopeObj := funcScope.LookupParent(ident.Name, ident.NamePos) +			// fmt.Printf("ident: %#v\n\t%#v\n\t%#v\n", ident, scope, scopeObj)  			// Identifier is local to the closure.  			if scope == nil && scopeObj == nil { @@ -215,6 +219,15 @@ func checkClosure(pass *analysis.Pass, funcLit *ast.FuncLit) {  				return true  			} +			if ident.Name == "copied" { +				fmt.Printf("identifier: %#v, obj: %#v, decl: %#v\n", ident, ident.Obj, ident.Obj.Decl) +				fmt.Printf("scope: %#v\n", scope) +				fmt.Printf("funcScope: %#v\n", funcScope) +				fmt.Println() +			} + +			// TODO: Broken by golang/go a27a525d1b4df74989ac9f6ad10394391fe3eb88 +			// Test with golang.org/x/tools@v0.15.0  			// Identifier was defined in a different scope.  			if funcScope != scope {  				pass.Reportf( | 
