mirror of https://github.com/golang/go.git
gofmt: -s flag simplifies "for _ = range x"
LGTM=adonovan, rsc R=rsc, adonovan CC=golang-codereviews https://golang.org/cl/117800043
This commit is contained in:
parent
cf521ce64f
commit
8158b8b686
|
|
@ -75,6 +75,7 @@ var tests = []struct {
|
|||
{"testdata/composites.input", "-s"},
|
||||
{"testdata/slices1.input", "-s"},
|
||||
{"testdata/slices2.input", "-s"},
|
||||
{"testdata/ranges.input", "-s"},
|
||||
{"testdata/old.input", ""},
|
||||
{"testdata/rewrite1.input", "-r=Foo->Bar"},
|
||||
{"testdata/rewrite2.input", "-r=int->bool"},
|
||||
|
|
|
|||
|
|
@ -97,16 +97,26 @@ func (s *simplifier) Visit(node ast.Node) ast.Visitor {
|
|||
// x, y := b[:n], b[n:]
|
||||
|
||||
case *ast.RangeStmt:
|
||||
// a range of the form: for x, _ = range v {...}
|
||||
// - a range of the form: for x, _ = range v {...}
|
||||
// can be simplified to: for x = range v {...}
|
||||
if ident, _ := n.Value.(*ast.Ident); ident != nil && ident.Name == "_" {
|
||||
// - a range of the form: for _ = range v {...}
|
||||
// can be simplified to: for range v {...}
|
||||
if isBlank(n.Value) {
|
||||
n.Value = nil
|
||||
}
|
||||
if isBlank(n.Key) && n.Value == nil {
|
||||
n.Key = nil
|
||||
}
|
||||
}
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func isBlank(x ast.Expr) bool {
|
||||
ident, ok := x.(*ast.Ident)
|
||||
return ok && ident.Name == "_"
|
||||
}
|
||||
|
||||
func simplify(f *ast.File) {
|
||||
var s simplifier
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
// Test cases for range simplification.
|
||||
package p
|
||||
|
||||
func _() {
|
||||
for a, b = range x {
|
||||
}
|
||||
for a = range x {
|
||||
}
|
||||
for _, b = range x {
|
||||
}
|
||||
for range x {
|
||||
}
|
||||
|
||||
for a = range x {
|
||||
}
|
||||
for range x {
|
||||
}
|
||||
|
||||
for a, b := range x {
|
||||
}
|
||||
for a := range x {
|
||||
}
|
||||
for _, b := range x {
|
||||
}
|
||||
|
||||
for a := range x {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test cases for range simplification.
|
||||
package p
|
||||
|
||||
func _() {
|
||||
for a, b = range x {}
|
||||
for a, _ = range x {}
|
||||
for _, b = range x {}
|
||||
for _, _ = range x {}
|
||||
|
||||
for a = range x {}
|
||||
for _ = range x {}
|
||||
|
||||
for a, b := range x {}
|
||||
for a, _ := range x {}
|
||||
for _, b := range x {}
|
||||
|
||||
for a := range x {}
|
||||
}
|
||||
Loading…
Reference in New Issue