| // 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" |
| |
| func init() { |
| register(httputilFix) |
| } |
| |
| var httputilFix = fix{ |
| "httputil", |
| "2011-11-18", |
| httputil, |
| `Move some functions in http package into httputil package. |
| |
| http://codereview.appspot.com/5336049 |
| `, |
| } |
| |
| var httputilFuncs = []string{ |
| "DumpRequest", |
| "DumpRequestOut", |
| "DumpResponse", |
| "NewChunkedReader", |
| "NewChunkedWriter", |
| "NewClientConn", |
| "NewProxyClientConn", |
| "NewServerConn", |
| "NewSingleHostReverseProxy", |
| } |
| |
| func httputil(f *ast.File) bool { |
| if imports(f, "net/http/httputil") { |
| return false |
| } |
| |
| fixed := false |
| |
| walk(f, func(n interface{}) { |
| // Rename package name. |
| if expr, ok := n.(ast.Expr); ok { |
| for _, s := range httputilFuncs { |
| if isPkgDot(expr, "http", s) { |
| if !fixed { |
| addImport(f, "net/http/httputil") |
| fixed = true |
| } |
| expr.(*ast.SelectorExpr).X.(*ast.Ident).Name = "httputil" |
| } |
| } |
| } |
| }) |
| |
| // Remove the net/http import if no longer needed. |
| if fixed && !usesImport(f, "net/http") { |
| deleteImport(f, "net/http") |
| } |
| |
| return fixed |
| } |