Commit 8158b8b6 authored by Robert Griesemer's avatar Robert Griesemer

gofmt: -s flag simplifies "for _ = range x"

LGTM=adonovan, rsc
R=rsc, adonovan
CC=golang-codereviews
https://golang.org/cl/117800043
parent cf521ce6
...@@ -75,6 +75,7 @@ var tests = []struct { ...@@ -75,6 +75,7 @@ var tests = []struct {
{"testdata/composites.input", "-s"}, {"testdata/composites.input", "-s"},
{"testdata/slices1.input", "-s"}, {"testdata/slices1.input", "-s"},
{"testdata/slices2.input", "-s"}, {"testdata/slices2.input", "-s"},
{"testdata/ranges.input", "-s"},
{"testdata/old.input", ""}, {"testdata/old.input", ""},
{"testdata/rewrite1.input", "-r=Foo->Bar"}, {"testdata/rewrite1.input", "-r=Foo->Bar"},
{"testdata/rewrite2.input", "-r=int->bool"}, {"testdata/rewrite2.input", "-r=int->bool"},
......
...@@ -97,16 +97,26 @@ func (s *simplifier) Visit(node ast.Node) ast.Visitor { ...@@ -97,16 +97,26 @@ func (s *simplifier) Visit(node ast.Node) ast.Visitor {
// x, y := b[:n], b[n:] // x, y := b[:n], b[n:]
case *ast.RangeStmt: 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 {...} // 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 n.Value = nil
} }
if isBlank(n.Key) && n.Value == nil {
n.Key = nil
}
} }
return s return s
} }
func isBlank(x ast.Expr) bool {
ident, ok := x.(*ast.Ident)
return ok && ident.Name == "_"
}
func simplify(f *ast.File) { func simplify(f *ast.File) {
var s simplifier var s simplifier
......
// 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 {
}
}
// 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 {}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment