Commit c5670f15 authored by Gustavo Niemeyer's avatar Gustavo Niemeyer

gofix: do not convert url in field names

There's some ambiguity in the U{url: url} case as it could be
both a map or a struct literal, but given context it's more
likely a struct, so U{url: url_} rather than U{url_: url_}.
At least that was the case for me.

R=golang-dev, rsc, adg
CC=golang-dev
https://golang.org/cl/4972052
parent 9b011500
...@@ -46,7 +46,12 @@ func url(f *ast.File) bool { ...@@ -46,7 +46,12 @@ func url(f *ast.File) bool {
fixed := false fixed := false
// Update URL code. // Update URL code.
var skip interface{}
urlWalk := func(n interface{}) { urlWalk := func(n interface{}) {
if n == skip {
skip = nil
return
}
// Is it an identifier? // Is it an identifier?
if ident, ok := n.(*ast.Ident); ok && ident.Name == "url" { if ident, ok := n.(*ast.Ident); ok && ident.Name == "url" {
ident.Name = "url_" ident.Name = "url_"
...@@ -57,6 +62,12 @@ func url(f *ast.File) bool { ...@@ -57,6 +62,12 @@ func url(f *ast.File) bool {
fixed = urlDoFields(fn.Params) || fixed fixed = urlDoFields(fn.Params) || fixed
fixed = urlDoFields(fn.Results) || fixed fixed = urlDoFields(fn.Results) || fixed
} }
// U{url: ...} is likely a struct field.
if kv, ok := n.(*ast.KeyValueExpr); ok {
if ident, ok := kv.Key.(*ast.Ident); ok && ident.Name == "url" {
skip = ident
}
}
} }
// Fix up URL code and add import, at most once. // Fix up URL code and add import, at most once.
...@@ -64,7 +75,7 @@ func url(f *ast.File) bool { ...@@ -64,7 +75,7 @@ func url(f *ast.File) bool {
if fixed { if fixed {
return return
} }
walk(f, urlWalk) walkBeforeAfter(f, urlWalk, nop)
addImport(f, "url") addImport(f, "url")
fixed = true fixed = true
} }
......
...@@ -80,10 +80,15 @@ import ( ...@@ -80,10 +80,15 @@ import (
"http" "http"
) )
type U struct{ url int }
type M map[int]int
func f() { func f() {
http.ParseURL(a) http.ParseURL(a)
var url = 23 var url = 23
url, x := 45, y url, x := 45, y
_ = U{url: url}
_ = M{url + 1: url}
} }
func g(url string) string { func g(url string) string {
...@@ -98,10 +103,15 @@ func h() (url string) { ...@@ -98,10 +103,15 @@ func h() (url string) {
import "url" import "url"
type U struct{ url int }
type M map[int]int
func f() { func f() {
url.Parse(a) url.Parse(a)
var url_ = 23 var url_ = 23
url_, x := 45, y url_, x := 45, y
_ = U{url: url_}
_ = M{url_ + 1: url_}
} }
func g(url_ string) string { func g(url_ string) string {
......
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