diff options
Diffstat (limited to 'src/cmd/gofix/go1pkgrename.go')
-rw-r--r-- | src/cmd/gofix/go1pkgrename.go | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/cmd/gofix/go1pkgrename.go b/src/cmd/gofix/go1pkgrename.go new file mode 100644 index 000000000..7dc952dfa --- /dev/null +++ b/src/cmd/gofix/go1pkgrename.go @@ -0,0 +1,119 @@ +// 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(go1pkgrenameFix) +} + +var go1pkgrenameFix = fix{ + "go1rename", + "2011-11-08", + go1pkgrename, + `Rewrite imports for packages moved during transition to Go 1. + +http://codereview.appspot.com/5316078 +`, +} + +var go1PackageRenames = []struct{ old, new string }{ + {"asn1", "encoding/asn1"}, + {"big", "math/big"}, + {"cmath", "math/cmplx"}, + {"csv", "encoding/csv"}, + {"exec", "os/exec"}, + {"exp/template/html", "html/template"}, + {"gob", "encoding/gob"}, + {"http", "net/http"}, + {"http/cgi", "net/http/cgi"}, + {"http/fcgi", "net/http/fcgi"}, + {"http/httptest", "net/http/httptest"}, + {"http/pprof", "net/http/pprof"}, + {"json", "encoding/json"}, + {"mail", "net/mail"}, + {"rpc", "net/rpc"}, + {"rpc/jsonrpc", "net/rpc/jsonrpc"}, + {"scanner", "text/scanner"}, + {"smtp", "net/smtp"}, + {"syslog", "log/syslog"}, + {"tabwriter", "text/tabwriter"}, + {"template", "text/template"}, + {"template/parse", "text/template/parse"}, + {"rand", "math/rand"}, + {"url", "net/url"}, + {"utf16", "unicode/utf16"}, + {"utf8", "unicode/utf8"}, + {"xml", "encoding/xml"}, + + // go.crypto sub-repository + {"crypto/bcrypt", "code.google.com/p/go.crypto/bcrypt"}, + {"crypto/blowfish", "code.google.com/p/go.crypto/blowfish"}, + {"crypto/cast5", "code.google.com/p/go.crypto/cast5"}, + {"crypto/md4", "code.google.com/p/go.crypto/md4"}, + {"crypto/ocsp", "code.google.com/p/go.crypto/ocsp"}, + {"crypto/openpgp", "code.google.com/p/go.crypto/openpgp"}, + {"crypto/openpgp/armor", "code.google.com/p/go.crypto/openpgp/armor"}, + {"crypto/openpgp/elgamal", "code.google.com/p/go.crypto/openpgp/elgamal"}, + {"crypto/openpgp/errors", "code.google.com/p/go.crypto/openpgp/errors"}, + {"crypto/openpgp/packet", "code.google.com/p/go.crypto/openpgp/packet"}, + {"crypto/openpgp/s2k", "code.google.com/p/go.crypto/openpgp/s2k"}, + {"crypto/ripemd160", "code.google.com/p/go.crypto/ripemd160"}, + {"crypto/twofish", "code.google.com/p/go.crypto/twofish"}, + {"crypto/xtea", "code.google.com/p/go.crypto/xtea"}, + {"exp/ssh", "code.google.com/p/go.crypto/ssh"}, + + // go.net sub-repository + {"net/dict", "code.google.com/p/go.net/dict"}, + {"net/websocket", "code.google.com/p/go.net/websocket"}, + {"exp/spdy", "code.google.com/p/go.net/spdy"}, + + // go.codereview sub-repository + {"encoding/git85", "code.google.com/p/go.codereview/git85"}, + {"patch", "code.google.com/p/go.codereview/patch"}, +} + +var go1PackageNameRenames = []struct{ newPath, old, new string }{ + {"html/template", "html", "template"}, + {"math/cmplx", "cmath", "cmplx"}, +} + +func go1pkgrename(f *ast.File) bool { + fixed := false + + // First update the imports. + for _, rename := range go1PackageRenames { + if !imports(f, rename.old) { + continue + } + if rewriteImport(f, rename.old, rename.new) { + fixed = true + } + } + if !fixed { + return false + } + + // Now update the package names used by importers. + for _, rename := range go1PackageNameRenames { + // These are rare packages, so do the import test before walking. + if imports(f, rename.newPath) { + walk(f, func(n interface{}) { + if sel, ok := n.(*ast.SelectorExpr); ok { + if isTopName(sel.X, rename.old) { + // We know Sel.X is an Ident. + sel.X.(*ast.Ident).Name = rename.new + return + } + } + }) + } + } + + return fixed +} |