1
0
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:
alkiller22 2019-09-18 11:50:33 +00:00 committed by Rebecca Stambler
parent 7baacfbe02
commit 7460b8e10b
2 changed files with 14 additions and 4 deletions

View File

@ -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

View File

@ -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
}