// 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. package main import ( "go/ast" ) var httpHeadersFix = fix{ "httpheaders", httpheaders, `Rename http Referer, UserAgent, Cookie, SetCookie, which are now methods. http://codereview.appspot.com/4620049/ `, } func init() { register(httpHeadersFix) } func httpheaders(f *ast.File) bool { if !imports(f, "http") { return false } called := make(map[ast.Node]bool) walk(f, func(ni interface{}) { switch n := ni.(type) { case *ast.CallExpr: called[n.Fun] = true } }) fixed := false typeof := typecheck(headerTypeConfig, f) walk(f, func(ni interface{}) { switch n := ni.(type) { case *ast.SelectorExpr: if called[n] { break } if t := typeof[n.X]; t != "*http.Request" && t != "*http.Response" { break } switch n.Sel.Name { case "Referer", "UserAgent": n.Sel.Name += "()" fixed = true case "Cookie": n.Sel.Name = "Cookies()" fixed = true } } }) return fixed } var headerTypeConfig = &TypeConfig{ Type: map[string]*Type{ "*http.Request": &Type{}, "*http.Response": &Type{}, }, }