diff options
author | Teddy Wing | 2023-05-18 01:46:16 +0200 |
---|---|---|
committer | Teddy Wing | 2023-05-18 01:46:16 +0200 |
commit | ace55a2a1696e3b60891b5d731705ead72446f7d (patch) | |
tree | 3c13a702fab6c4d4e901e90ce462e89ce6abf1c3 | |
parent | 0fddc640af772014e5a87db394657f03e273c528 (diff) | |
download | gocapturedrefrace-ace55a2a1696e3b60891b5d731705ead72446f7d.tar.bz2 |
Try to ignore shadowed assignments
Not working yet. Does print the right thing, but since we're also
matching `*ast.Ident`s, we must be getting the shadowed declarations as
Idents and including them in the reported diagnostics.
-rw-r--r-- | gocapturedrefrace.go | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/gocapturedrefrace.go b/gocapturedrefrace.go index d5eaac7..369b107 100644 --- a/gocapturedrefrace.go +++ b/gocapturedrefrace.go @@ -87,7 +87,9 @@ func checkClosure(pass *analysis.Pass, funcLit *ast.FuncLit) { ast.Inspect( funcLit, func(node ast.Node) bool { - checkShadowing(pass, node, funcScope) + if isShadowingDeclaration(pass, node, funcScope) { + return true + } ident, ok := node.(*ast.Ident) if !ok { @@ -137,37 +139,41 @@ func checkClosure(pass *analysis.Pass, funcLit *ast.FuncLit) { } // TODO: doc -func checkShadowing( +func isShadowingDeclaration( pass *analysis.Pass, node ast.Node, funcScope *types.Scope, -) { +) bool { assignStmt, ok := node.(*ast.AssignStmt) if !ok { - return + return false } if assignStmt.Tok != token.DEFINE { - return + return false } for _, lhs := range assignStmt.Lhs { ident, ok := lhs.(*ast.Ident) if !ok { - return + return false } fmt.Printf("assignStmt: %#v\n", ident) - if ident != nil { - return + if ident == nil { + return false } + return true + // TODO: If ident is in parent, ignore it an move on. // scope, scopeObj := funcScope.LookupParent(ident.Name, ident.NamePos) - // + // // // Identifier is local to the closure. // if scope == nil && scopeObj == nil { // return // } } + + return false } |