Commit 96a609c2 authored by Robert Griesemer's avatar Robert Griesemer

gofmt: handle comments correctly in rewrites

R=rsc
CC=golang-dev
https://golang.org/cl/6294076
parent 51ff2ef4
...@@ -66,7 +66,6 @@ func runTest(t *testing.T, in, out, flags string) { ...@@ -66,7 +66,6 @@ func runTest(t *testing.T, in, out, flags string) {
} }
} }
// TODO(gri) Add more test cases!
var tests = []struct { var tests = []struct {
in, flags string in, flags string
}{ }{
...@@ -78,6 +77,7 @@ var tests = []struct { ...@@ -78,6 +77,7 @@ var tests = []struct {
{"testdata/rewrite2.input", "-r=int->bool"}, {"testdata/rewrite2.input", "-r=int->bool"},
{"testdata/rewrite3.input", "-r=x->x"}, {"testdata/rewrite3.input", "-r=x->x"},
{"testdata/rewrite4.input", "-r=(x)->x"}, {"testdata/rewrite4.input", "-r=(x)->x"},
{"testdata/rewrite5.input", "-r=x+x->2*x"},
{"testdata/stdin*.input", "-stdin"}, {"testdata/stdin*.input", "-stdin"},
{"testdata/comments.input", ""}, {"testdata/comments.input", ""},
{"testdata/import.input", ""}, {"testdata/import.input", ""},
......
...@@ -55,6 +55,7 @@ func dump(msg string, val reflect.Value) { ...@@ -55,6 +55,7 @@ func dump(msg string, val reflect.Value) {
// rewriteFile applies the rewrite rule 'pattern -> replace' to an entire file. // rewriteFile applies the rewrite rule 'pattern -> replace' to an entire file.
func rewriteFile(pattern, replace ast.Expr, p *ast.File) *ast.File { func rewriteFile(pattern, replace ast.Expr, p *ast.File) *ast.File {
cmap := ast.NewCommentMap(fileSet, p, p.Comments)
m := make(map[string]reflect.Value) m := make(map[string]reflect.Value)
pat := reflect.ValueOf(pattern) pat := reflect.ValueOf(pattern)
repl := reflect.ValueOf(replace) repl := reflect.ValueOf(replace)
...@@ -73,7 +74,9 @@ func rewriteFile(pattern, replace ast.Expr, p *ast.File) *ast.File { ...@@ -73,7 +74,9 @@ func rewriteFile(pattern, replace ast.Expr, p *ast.File) *ast.File {
} }
return val return val
} }
return apply(f, reflect.ValueOf(p)).Interface().(*ast.File) r := apply(f, reflect.ValueOf(p)).Interface().(*ast.File)
r.Comments = cmap.Filter(r).Comments() // recreate comments list
return r
} }
// setValue is a wrapper for x.SetValue(y); it protects // setValue is a wrapper for x.SetValue(y); it protects
......
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Rewriting of expressions containing nodes with associated comments to
// expressions without those nodes must also eliminate the associated
// comments.
package p
func f(x int) int {
_ = 2 * x // this comment remains in the rewrite
_ = 2 * x
return 2 * x
}
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Rewriting of expressions containing nodes with associated comments to
// expressions without those nodes must also eliminate the associated
// comments.
package p
func f(x int) int {
_ = x + x // this comment remains in the rewrite
_ = x /* this comment must not be in the rewrite */ + x
return x /* this comment must not be in the rewrite */ + 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