diff options
author | Teddy Wing | 2023-05-18 03:40:44 +0200 |
---|---|---|
committer | Teddy Wing | 2023-05-18 03:44:52 +0200 |
commit | c76dd021f7a3df0f524b8c9e8e710950a0b31fb6 (patch) | |
tree | 07a839229c0df953b1a4d652933897a9b495394f | |
parent | f0aece52e7d41c404f5a3dbcbe174b43351cb25f (diff) | |
download | gocapturedrefrace-c76dd021f7a3df0f524b8c9e8e710950a0b31fb6.tar.bz2 |
varDeclaration: Return all identifiers in declaration
Declarations can include multiple identifiers. Return all of these from
the function and rename it accordingly.
-rw-r--r-- | gocapturedrefrace.go | 20 | ||||
-rw-r--r-- | testdata/shadow.go | 20 |
2 files changed, 31 insertions, 9 deletions
diff --git a/gocapturedrefrace.go b/gocapturedrefrace.go index cab0b4f..5be3656 100644 --- a/gocapturedrefrace.go +++ b/gocapturedrefrace.go @@ -180,9 +180,9 @@ func findLocalVarDeclarations( } case *ast.GenDecl: - decl := varDeclaration(node) - if decl != nil { - declarations = append(declarations, decl) + decls := varDeclarations(node) + if decls != nil { + declarations = append(declarations, decls...) } } @@ -193,23 +193,25 @@ func findLocalVarDeclarations( return declarations } -// varDeclaration returns the identifier corresponding to variable declarations -// in decl, or nil if decl is not a variable declaration. -func varDeclaration(decl *ast.GenDecl) *ast.Ident { +// varDeclarations returns the identifiers corresponding to variable +// declarations in decl, or nil if decl is not a variable declaration. +func varDeclarations(decl *ast.GenDecl) (declarations []*ast.Ident) { if decl.Tok != token.VAR { return nil } + declarations = []*ast.Ident{} + for _, spec := range decl.Specs { valueSpec, ok := spec.(*ast.ValueSpec) if !ok { - return nil + return declarations } for _, ident := range valueSpec.Names { - return ident + declarations = append(declarations, ident) } } - return nil + return declarations } diff --git a/testdata/shadow.go b/testdata/shadow.go index 023df57..a8c2b5f 100644 --- a/testdata/shadow.go +++ b/testdata/shadow.go @@ -31,3 +31,23 @@ func shadow() { } }() } + +func multiIdentifierDeclaration() { + var err1, err2 error + err1 = nil + err2 = nil + if err1 != nil || err2 != nil { + log.Print(err1, err2) + } + + go func() { + // err1 and err2 are redeclared here and shadow the outer scope. No + // diagnostic should be printed. + var err1, err2 error + err1 = errors.New("shadowing declaration err1") + err2 = errors.New("shadowing declaration err2") + if err1 != nil || err2 != nil { + log.Print(err1, err2) + } + }() +} |