mirror of
https://github.com/golang/go
synced 2024-11-05 15:06:09 -07:00
cmd/vet: fix a bad case of shadow check about redeclaration
`go tools vet -shadow` ignored the case like this form ```golang func shadowBlock() { var a int { var a = 3 _ = a } _ = a } ``` This commit fix it on "idiomaticRedecl" func, and add the code above in testcase. Change-Id: I007f8287766f59cd7ded86072ba6bf6743c392be GitHub-Last-Rev: b8b302b2048d709a39fb17496ba80917f9f4c889 GitHub-Pull-Request: golang/tools#143 Reviewed-on: https://go-review.googlesource.com/c/tools/+/189158 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
This commit is contained in:
parent
7baacfbe02
commit
7460b8e10b
@ -208,14 +208,15 @@ func idiomaticShortRedecl(pass *analysis.Pass, a *ast.AssignStmt) bool {
|
||||
func idiomaticRedecl(d *ast.ValueSpec) bool {
|
||||
// Don't complain about deliberate redeclarations of the form
|
||||
// var i, j = i, j
|
||||
// Don't ignore redeclarations of the form
|
||||
// var i = 3
|
||||
if len(d.Names) != len(d.Values) {
|
||||
return false
|
||||
}
|
||||
for i, lhs := range d.Names {
|
||||
if rhs, ok := d.Values[i].(*ast.Ident); ok {
|
||||
if lhs.Name != rhs.Name {
|
||||
return false
|
||||
}
|
||||
rhs, ok := d.Values[i].(*ast.Ident)
|
||||
if !ok || lhs.Name != rhs.Name {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
@ -89,3 +89,12 @@ func shadowTypeSwitch(a interface{}) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func shadowBlock() {
|
||||
var a int
|
||||
{
|
||||
var a = 3 // want "declaration of .a. shadows declaration at line 94"
|
||||
_ = a
|
||||
}
|
||||
_ = a
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user