diff options
| -rw-r--r-- | capturedrefrace.go | 9 | ||||
| -rw-r--r-- | testdata/function_local.go | 10 | 
2 files changed, 19 insertions, 0 deletions
| diff --git a/capturedrefrace.go b/capturedrefrace.go index e7431ac..7ed7470 100644 --- a/capturedrefrace.go +++ b/capturedrefrace.go @@ -51,6 +51,7 @@  package capturedrefrace  import ( +	"fmt"  	"go/ast"  	"go/token"  	"go/types" @@ -93,12 +94,20 @@ func run(pass *analysis.Pass) (interface{}, error) {  			case *ast.Ident:  				// Get a function literal stored in a local variable.  				funcLit, ok = funcLitFromIdent(goStmtFunc) + +			default: +				return  			}  			if !ok {  				return  			}  			// Inspect closure argument list. +			fmt.Printf("ident: %#v\n", goStmt.Call.Fun) +			fmt.Printf("pos: %#v\n", pass.Fset.Position(goStmt.Call.Fun.Pos())) +			fmt.Printf("lit: %#v\n", funcLit) +			fmt.Printf("type: %#v\n", funcLit.Type) +			fmt.Printf("params: %#v\n", funcLit.Type.Params)  			for _, arg := range funcLit.Type.Params.List {  				// Report reference arguments.  				_, ok := arg.Type.(*ast.StarExpr) diff --git a/testdata/function_local.go b/testdata/function_local.go index 18eeca5..6687889 100644 --- a/testdata/function_local.go +++ b/testdata/function_local.go @@ -28,3 +28,13 @@ func functionLocal() {  	go funcLocal()  } + +type ValueMethodStruct struct {} + +func (s ValueMethodStruct) method() {} + +func ignoreValueMethods() { +	s := ValueMethodStruct{} + +	go s.method() +} | 
