1
0
mirror of https://github.com/golang/go synced 2024-11-25 04:07:55 -07:00

html,bzip2,sql: rename Error methods that return error to Err

There are three classes of methods/functions called Error:

a) The Error method in the just introduced error interface
b) Error methods that create or report errors (http.Error, etc)
c) Error methods that return errors previously associated with
   the receiver (Tokenizer.Error, rows.Error, etc).

This CL introduces the convention that methods in case (c)
should be named Err.

The reasoning for the change is:

- The change differentiates the two kinds of APIs based on
  names rather than just on signature, unloading Error a bit
- Err is closer to the err variable name that is so commonly
  used with the intent of verifying an error
- Err is shorter and thus more convenient to be used often
  on error verifications, such as in iterators following the
  convention of the sql package.

R=bradfitz, rsc
CC=golang-dev
https://golang.org/cl/5327064
This commit is contained in:
Gustavo Niemeyer 2011-11-04 09:50:20 -04:00
parent 39fcca60cb
commit f2dc50b48d
10 changed files with 103 additions and 16 deletions

View File

@ -9,6 +9,7 @@ GOFILES=\
error.go\ error.go\
filepath.go\ filepath.go\
fix.go\ fix.go\
htmlerr.go\
httpfinalurl.go\ httpfinalurl.go\
httpfs.go\ httpfs.go\
httpheaders.go\ httpheaders.go\

View File

@ -481,7 +481,7 @@ func newPkgDot(pos token.Pos, pkg, name string) ast.Expr {
} }
} }
// renameTop renames all references to the top-level name top. // renameTop renames all references to the top-level name old.
// It returns true if it makes any changes. // It returns true if it makes any changes.
func renameTop(f *ast.File, old, new string) bool { func renameTop(f *ast.File, old, new string) bool {
var fixed bool var fixed bool

47
src/cmd/gofix/htmlerr.go Normal file
View File

@ -0,0 +1,47 @@
// 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(htmlerrFix)
}
var htmlerrFix = fix{
"htmlerr",
"2011-11-04",
htmlerr,
`Rename html's Tokenizer.Error method to Err.
http://codereview.appspot.com/5327064/
`,
}
var htmlerrTypeConfig = &TypeConfig{
Func: map[string]string{
"html.NewTokenizer": "html.Tokenizer",
},
}
func htmlerr(f *ast.File) bool {
if !imports(f, "html") {
return false
}
typeof, _ := typecheck(htmlerrTypeConfig, f)
fixed := false
walk(f, func(n interface{}) {
s, ok := n.(*ast.SelectorExpr)
if ok && typeof[s.X] == "html.Tokenizer" && s.Sel.Name == "Error" {
s.Sel.Name = "Err"
fixed = true
}
})
return fixed
}

View File

@ -0,0 +1,39 @@
// 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
func init() {
addTestCases(htmlerrTests, htmlerr)
}
var htmlerrTests = []testCase{
{
Name: "htmlerr.0",
In: `package main
import (
"html"
)
func f() {
e := errors.New("")
t := html.NewTokenizer(r)
_, _ = e.Error(), t.Error()
}
`,
Out: `package main
import (
"html"
)
func f() {
e := errors.New("")
t := html.NewTokenizer(r)
_, _ = e.Error(), t.Err()
}
`,
},
}

View File

@ -37,7 +37,7 @@ func newBitReader(r io.Reader) bitReader {
// ReadBits64 reads the given number of bits and returns them in the // ReadBits64 reads the given number of bits and returns them in the
// least-significant part of a uint64. In the event of an error, it returns 0 // least-significant part of a uint64. In the event of an error, it returns 0
// and the error can be obtained by calling Error(). // and the error can be obtained by calling Err().
func (br *bitReader) ReadBits64(bits uint) (n uint64) { func (br *bitReader) ReadBits64(bits uint) (n uint64) {
for bits > br.bits { for bits > br.bits {
b, err := br.r.ReadByte() b, err := br.r.ReadByte()
@ -82,6 +82,6 @@ func (br *bitReader) ReadBit() bool {
return n != 0 return n != 0
} }
func (br *bitReader) Error() error { func (br *bitReader) Err() error {
return br.err return br.err
} }

View File

@ -80,7 +80,7 @@ func (bz2 *reader) Read(buf []byte) (n int, err error) {
if !bz2.setupDone { if !bz2.setupDone {
err = bz2.setup() err = bz2.setup()
brErr := bz2.br.Error() brErr := bz2.br.Err()
if brErr != nil { if brErr != nil {
err = brErr err = brErr
} }
@ -91,7 +91,7 @@ func (bz2 *reader) Read(buf []byte) (n int, err error) {
} }
n, err = bz2.read(buf) n, err = bz2.read(buf)
brErr := bz2.br.Error() brErr := bz2.br.Err()
if brErr != nil { if brErr != nil {
err = brErr err = brErr
} }

View File

@ -620,7 +620,7 @@ func (s *Stmt) Close() error {
// err = rows.Scan(&id, &name) // err = rows.Scan(&id, &name)
// ... // ...
// } // }
// err = rows.Error() // get any Error encountered during iteration // err = rows.Err() // get any error encountered during iteration
// ... // ...
type Rows struct { type Rows struct {
db *DB db *DB
@ -651,8 +651,8 @@ func (rs *Rows) Next() bool {
return rs.lasterr == nil return rs.lasterr == nil
} }
// Error returns the error, if any, that was encountered during iteration. // Err returns the error, if any, that was encountered during iteration.
func (rs *Rows) Error() error { func (rs *Rows) Err() error {
if rs.lasterr == io.EOF { if rs.lasterr == io.EOF {
return nil return nil
} }

View File

@ -250,7 +250,7 @@ func (p *parser) read() error {
p.tok = p.tokenizer.Token() p.tok = p.tokenizer.Token()
switch p.tok.Type { switch p.tok.Type {
case ErrorToken: case ErrorToken:
return p.tokenizer.Error() return p.tokenizer.Err()
case SelfClosingTagToken: case SelfClosingTagToken:
p.hasSelfClosingToken = true p.hasSelfClosingToken = true
p.tok.Type = StartTagToken p.tok.Type = StartTagToken

View File

@ -149,9 +149,9 @@ type Tokenizer struct {
textIsRaw bool textIsRaw bool
} }
// Error returns the error associated with the most recent ErrorToken token. // Err returns the error associated with the most recent ErrorToken token.
// This is typically io.EOF, meaning the end of tokenization. // This is typically io.EOF, meaning the end of tokenization.
func (z *Tokenizer) Error() error { func (z *Tokenizer) Err() error {
if z.tt != ErrorToken { if z.tt != ErrorToken {
return nil return nil
} }

View File

@ -427,7 +427,7 @@ loop:
if tt.golden != "" { if tt.golden != "" {
for i, s := range strings.Split(tt.golden, "$") { for i, s := range strings.Split(tt.golden, "$") {
if z.Next() == ErrorToken { if z.Next() == ErrorToken {
t.Errorf("%s token %d: want %q got error %v", tt.desc, i, s, z.Error()) t.Errorf("%s token %d: want %q got error %v", tt.desc, i, s, z.Err())
continue loop continue loop
} }
actual := z.Token().String() actual := z.Token().String()
@ -438,8 +438,8 @@ loop:
} }
} }
z.Next() z.Next()
if z.Error() != io.EOF { if z.Err() != io.EOF {
t.Errorf("%s: want EOF got %q", tt.desc, z.Error()) t.Errorf("%s: want EOF got %q", tt.desc, z.Err())
} }
} }
} }
@ -543,8 +543,8 @@ loop:
tt := z.Next() tt := z.Next()
switch tt { switch tt {
case ErrorToken: case ErrorToken:
if z.Error() != io.EOF { if z.Err() != io.EOF {
t.Error(z.Error()) t.Error(z.Err())
} }
break loop break loop
case TextToken: case TextToken: