gofix: make fix order implicit by date.

This partially undoes 8fd7e6d070c8, but preserves its semantics.
More importantly, it results in the data about each fix being
decentralised, which makes it easier for new fixes to be added,
and other gofix users to slot new fixes in.

It also adds some useful metadata that could be used in the future.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5306092
This commit is contained in:
David Symonds 2011-11-04 08:34:37 +11:00
parent 37d82c8520
commit d26144be29
24 changed files with 131 additions and 35 deletions

View file

@ -11,11 +11,12 @@ import (
)
func init() {
fixes = append(fixes, errorFix)
register(errorFix)
}
var errorFix = fix{
"error",
"2011-11-02",
errorFn,
`Use error instead of os.Error.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(filepathFix)
}
var filepathFix = fix{
"filepath",
"2011-06-26",
filepathFunc,
`Adapt code from filepath.[List]SeparatorString to string(filepath.[List]Separator).

View file

@ -24,45 +24,29 @@ import (
type fix struct {
name string
date string // date that fix was introduced, in YYYY-MM-DD format
f func(*ast.File) bool
desc string
}
// main runs sort.Sort(fixes) before printing list of fixes.
type fixlist []fix
// main runs sort.Sort(byName(fixes)) before printing list of fixes.
type byName []fix
func (f fixlist) Len() int { return len(f) }
func (f fixlist) Swap(i, j int) { f[i], f[j] = f[j], f[i] }
func (f fixlist) Less(i, j int) bool { return f[i].name < f[j].name }
func (f byName) Len() int { return len(f) }
func (f byName) Swap(i, j int) { f[i], f[j] = f[j], f[i] }
func (f byName) Less(i, j int) bool { return f[i].name < f[j].name }
var fixes = fixlist{
// NOTE: This list must be in chronological order,
// so that code using APIs that changed multiple times
// can be updated in the correct order.
// Add new fixes to bottom of list. Do not sort.
httpserverFix,
procattrFix,
netdialFix,
netlookupFix,
tlsdialFix,
osopenFix,
reflectFix,
httpFinalURLFix,
httpHeadersFix,
oserrorstringFix,
sortsliceFix,
filepathFix,
httpFileSystemFix,
stringssplitFix,
signalFix,
sorthelpersFix,
urlFix,
netudpgroupFix,
imagenewFix,
mathFix,
ioCopyNFix,
imagecolorFix,
mapdeleteFix,
// main runs sort.Sort(byDate(fixes)) before applying fixes.
type byDate []fix
func (f byDate) Len() int { return len(f) }
func (f byDate) Swap(i, j int) { f[i], f[j] = f[j], f[i] }
func (f byDate) Less(i, j int) bool { return f[i].date < f[j].date }
var fixes []fix
func register(f fix) {
fixes = append(fixes, f)
}
// walk traverses the AST x, calling visit(y) for each node y in the tree but

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(httpFinalURLFix)
}
var httpFinalURLFix = fix{
"httpfinalurl",
"2011-05-13",
httpfinalurl,
`Adapt http Get calls to not have a finalURL result parameter.

View file

@ -9,8 +9,13 @@ import (
"go/token"
)
func init() {
register(httpFileSystemFix)
}
var httpFileSystemFix = fix{
"httpfs",
"2011-06-27",
httpfs,
`Adapt http FileServer to take a FileSystem.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(httpHeadersFix)
}
var httpHeadersFix = fix{
"httpheaders",
"2011-06-16",
httpheaders,
`Rename http Referer, UserAgent, Cookie, SetCookie, which are now methods.

View file

@ -9,8 +9,13 @@ import (
"go/token"
)
func init() {
register(httpserverFix)
}
var httpserverFix = fix{
"httpserver",
"2011-03-15",
httpserver,
`Adapt http server methods and functions to changes
made to the http ResponseWriter interface.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(imagecolorFix)
}
var imagecolorFix = fix{
"imagecolor",
"2011-10-04",
imagecolor,
`Adapt code to types moved from image to color.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(imagenewFix)
}
var imagenewFix = fix{
"imagenew",
"2011-09-14",
imagenew,
`Adapt image.NewXxx calls to pass an image.Rectangle instead of (w, h int).

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(ioCopyNFix)
}
var ioCopyNFix = fix{
"iocopyn",
"2011-09-30",
ioCopyN,
`Rename io.Copyn to io.CopyN.

View file

@ -40,7 +40,7 @@ func usage() {
fmt.Fprintf(os.Stderr, "usage: gofix [-diff] [-r fixname,...] [-force fixname,...] [path ...]\n")
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, "\nAvailable rewrites are:\n")
sort.Sort(fixes)
sort.Sort(byName(fixes))
for _, f := range fixes {
fmt.Fprintf(os.Stderr, "\n%s\n", f.name)
desc := strings.TrimSpace(f.desc)
@ -54,6 +54,8 @@ func main() {
flag.Usage = usage
flag.Parse()
sort.Sort(byDate(fixes))
if *allowedRewrites != "" {
allowed = make(map[string]bool)
for _, f := range strings.Split(*allowedRewrites, ",") {

View file

@ -6,8 +6,13 @@ package main
import "go/ast"
func init() {
register(mapdeleteFix)
}
var mapdeleteFix = fix{
"mapdelete",
"2011-10-18",
mapdelete,
`Use delete(m, k) instead of m[k] = 0, false.

View file

@ -6,8 +6,13 @@ package main
import "go/ast"
func init() {
register(mathFix)
}
var mathFix = fix{
"math",
"2011-09-29",
math,
`Remove the leading F from math functions such as Fabs.

View file

@ -8,8 +8,15 @@ import (
"go/ast"
)
func init() {
register(netdialFix)
register(tlsdialFix)
register(netlookupFix)
}
var netdialFix = fix{
"netdial",
"2011-03-28",
netdial,
`Adapt 3-argument calls of net.Dial to use 2-argument form.
@ -19,6 +26,7 @@ http://codereview.appspot.com/4244055
var tlsdialFix = fix{
"tlsdial",
"2011-03-28",
tlsdial,
`Adapt 4-argument calls of tls.Dial to use 3-argument form.
@ -28,6 +36,7 @@ http://codereview.appspot.com/4244055
var netlookupFix = fix{
"netlookup",
"2011-03-28",
netlookup,
`Adapt 3-result calls to net.LookupHost to use 2-result form.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(netudpgroupFix)
}
var netudpgroupFix = fix{
"netudpgroup",
"2011-08-18",
netudpgroup,
`Adapt 1-argument calls of net.(*UDPConn).JoinGroup, LeaveGroup to use 2-argument form.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(oserrorstringFix)
}
var oserrorstringFix = fix{
"oserrorstring",
"2011-06-22",
oserrorstring,
`Replace os.ErrorString() conversions with calls to os.NewError().

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(osopenFix)
}
var osopenFix = fix{
"osopen",
"2011-04-04",
osopen,
`Adapt os.Open calls to new, easier API and rename O_CREAT O_CREATE.

View file

@ -9,8 +9,13 @@ import (
"go/token"
)
func init() {
register(procattrFix)
}
var procattrFix = fix{
"procattr",
"2011-03-15",
procattr,
`Adapt calls to os.StartProcess to use new ProcAttr type.

View file

@ -15,8 +15,13 @@ import (
"strings"
)
func init() {
register(reflectFix)
}
var reflectFix = fix{
"reflect",
"2011-04-08",
reflectFn,
`Adapt code to new reflect API.

View file

@ -9,8 +9,13 @@ import (
"strings"
)
func init() {
register(signalFix)
}
var signalFix = fix{
"signal",
"2011-06-29",
signal,
`Adapt code to types moved from os/signal to signal.

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(sorthelpersFix)
}
var sorthelpersFix = fix{
"sorthelpers",
"2011-07-08",
sorthelpers,
`Adapt code from sort.Sort[Ints|Float64s|Strings] to sort.[Ints|Float64s|Strings].
`,

View file

@ -8,8 +8,13 @@ import (
"go/ast"
)
func init() {
register(sortsliceFix)
}
var sortsliceFix = fix{
"sortslice",
"2011-06-26",
sortslice,
`Adapt code from sort.[Float64|Int|String]Array to sort.[Float64|Int|String]Slice.

View file

@ -9,8 +9,13 @@ import (
"go/token"
)
func init() {
register(stringssplitFix)
}
var stringssplitFix = fix{
"stringssplit",
"2011-06-28",
stringssplit,
`Restore strings.Split to its original meaning and add strings.SplitN. Bytes too.

View file

@ -6,8 +6,13 @@ package main
import "go/ast"
func init() {
register(urlFix)
}
var urlFix = fix{
"url",
"2011-08-17",
url,
`Move the URL pieces of package http into a new package, url.