]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gofmt: fix gofmt -s for 3-index slices
authorRobert Griesemer <gri@golang.org>
Tue, 1 Jul 2014 17:40:27 +0000 (10:40 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 1 Jul 2014 17:40:27 +0000 (10:40 -0700)
3-index slices of the form s[:len(s):len(s)]
cannot be simplified to s[::len(s)].

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/108330043

src/cmd/gofmt/simplify.go
src/cmd/gofmt/testdata/slices1.golden
src/cmd/gofmt/testdata/slices1.input

index b1556be74e43072a034a764c0366c678da017054..b05aa2480dfa776bb3a8d236e9bca4890d1f5530 100644 (file)
@@ -68,9 +68,10 @@ func (s *simplifier) Visit(node ast.Node) ast.Visitor {
                // a slice expression of the form: s[a:len(s)]
                // can be simplified to: s[a:]
                // if s is "simple enough" (for now we only accept identifiers)
-               if s.hasDotImport {
-                       // if dot imports are present, we cannot be certain that an
-                       // unresolved "len" identifier refers to the predefined len()
+               if n.Max != nil || s.hasDotImport {
+                       // - 3-index slices always require the 2nd and 3rd index
+                       // - if dot imports are present, we cannot be certain that an
+                       //   unresolved "len" identifier refers to the predefined len()
                        break
                }
                if s, _ := n.X.(*ast.Ident); s != nil && s.Obj != nil {
index 61e074f68a808a81d9be1e82583d3c2ce8bbd104..6633a5e001e1f680c1ec088ea06694acf3a4e846 100644 (file)
@@ -15,6 +15,7 @@ var (
        _ = a[3:(len(a))]
        _ = a[len(a) : len(a)-1]
        _ = a[0:len(b)]
+       _ = a[2:len(a):len(a)]
 
        _ = a[:]
        _ = a[:10]
@@ -22,6 +23,7 @@ var (
        _ = a[:(len(a))]
        _ = a[:len(a)-1]
        _ = a[:len(b)]
+       _ = a[:len(a):len(a)]
 
        _ = s[0:]
        _ = s[1:10]
@@ -29,6 +31,7 @@ var (
        _ = s[3:(len(s))]
        _ = s[len(a) : len(s)-1]
        _ = s[0:len(b)]
+       _ = s[2:len(s):len(s)]
 
        _ = s[:]
        _ = s[:10]
@@ -36,6 +39,7 @@ var (
        _ = s[:(len(s))]
        _ = s[:len(s)-1]
        _ = s[:len(b)]
+       _ = s[:len(s):len(s)]
 
        _ = t.s[0:]
        _ = t.s[1:10]
@@ -43,6 +47,7 @@ var (
        _ = t.s[3:(len(t.s))]
        _ = t.s[len(a) : len(t.s)-1]
        _ = t.s[0:len(b)]
+       _ = t.s[2:len(t.s):len(t.s)]
 
        _ = t.s[:]
        _ = t.s[:10]
@@ -50,6 +55,7 @@ var (
        _ = t.s[:(len(t.s))]
        _ = t.s[:len(t.s)-1]
        _ = t.s[:len(b)]
+       _ = t.s[:len(t.s):len(t.s)]
 )
 
 func _() {
index 4d2cbfff4004644082c741cb9df9504822849d7b..27e9cb8fef33be37b701bffa4c6471ee7344cec5 100644 (file)
@@ -15,6 +15,7 @@ var (
        _ = a[3:(len(a))]
        _ = a[len(a) : len(a)-1]
        _ = a[0:len(b)]
+       _ = a[2:len(a):len(a)]
 
        _ = a[:]
        _ = a[:10]
@@ -22,6 +23,7 @@ var (
        _ = a[:(len(a))]
        _ = a[:len(a)-1]
        _ = a[:len(b)]
+       _ = a[:len(a):len(a)]
 
        _ = s[0:]
        _ = s[1:10]
@@ -29,6 +31,7 @@ var (
        _ = s[3:(len(s))]
        _ = s[len(a) : len(s)-1]
        _ = s[0:len(b)]
+       _ = s[2:len(s):len(s)]
 
        _ = s[:]
        _ = s[:10]
@@ -36,6 +39,7 @@ var (
        _ = s[:(len(s))]
        _ = s[:len(s)-1]
        _ = s[:len(b)]
+       _ = s[:len(s):len(s)]
 
        _ = t.s[0:]
        _ = t.s[1:10]
@@ -43,6 +47,7 @@ var (
        _ = t.s[3:(len(t.s))]
        _ = t.s[len(a) : len(t.s)-1]
        _ = t.s[0:len(b)]
+       _ = t.s[2:len(t.s):len(t.s)]
 
        _ = t.s[:]
        _ = t.s[:10]
@@ -50,6 +55,7 @@ var (
        _ = t.s[:(len(t.s))]
        _ = t.s[:len(t.s)-1]
        _ = t.s[:len(b)]
+       _ = t.s[:len(t.s):len(t.s)]
 )
 
 func _() {