mirror of
https://github.com/golang/go
synced 2024-11-22 01:44:40 -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:
parent
39fcca60cb
commit
f2dc50b48d
@ -9,6 +9,7 @@ GOFILES=\
|
||||
error.go\
|
||||
filepath.go\
|
||||
fix.go\
|
||||
htmlerr.go\
|
||||
httpfinalurl.go\
|
||||
httpfs.go\
|
||||
httpheaders.go\
|
||||
|
@ -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.
|
||||
func renameTop(f *ast.File, old, new string) bool {
|
||||
var fixed bool
|
||||
|
47
src/cmd/gofix/htmlerr.go
Normal file
47
src/cmd/gofix/htmlerr.go
Normal 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
|
||||
}
|
39
src/cmd/gofix/htmlerr_test.go
Normal file
39
src/cmd/gofix/htmlerr_test.go
Normal 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()
|
||||
}
|
||||
`,
|
||||
},
|
||||
}
|
@ -37,7 +37,7 @@ func newBitReader(r io.Reader) bitReader {
|
||||
|
||||
// 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
|
||||
// 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) {
|
||||
for bits > br.bits {
|
||||
b, err := br.r.ReadByte()
|
||||
@ -82,6 +82,6 @@ func (br *bitReader) ReadBit() bool {
|
||||
return n != 0
|
||||
}
|
||||
|
||||
func (br *bitReader) Error() error {
|
||||
func (br *bitReader) Err() error {
|
||||
return br.err
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ func (bz2 *reader) Read(buf []byte) (n int, err error) {
|
||||
|
||||
if !bz2.setupDone {
|
||||
err = bz2.setup()
|
||||
brErr := bz2.br.Error()
|
||||
brErr := bz2.br.Err()
|
||||
if brErr != nil {
|
||||
err = brErr
|
||||
}
|
||||
@ -91,7 +91,7 @@ func (bz2 *reader) Read(buf []byte) (n int, err error) {
|
||||
}
|
||||
|
||||
n, err = bz2.read(buf)
|
||||
brErr := bz2.br.Error()
|
||||
brErr := bz2.br.Err()
|
||||
if brErr != nil {
|
||||
err = brErr
|
||||
}
|
||||
|
@ -620,7 +620,7 @@ func (s *Stmt) Close() error {
|
||||
// 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 {
|
||||
db *DB
|
||||
@ -651,8 +651,8 @@ func (rs *Rows) Next() bool {
|
||||
return rs.lasterr == nil
|
||||
}
|
||||
|
||||
// Error returns the error, if any, that was encountered during iteration.
|
||||
func (rs *Rows) Error() error {
|
||||
// Err returns the error, if any, that was encountered during iteration.
|
||||
func (rs *Rows) Err() error {
|
||||
if rs.lasterr == io.EOF {
|
||||
return nil
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ func (p *parser) read() error {
|
||||
p.tok = p.tokenizer.Token()
|
||||
switch p.tok.Type {
|
||||
case ErrorToken:
|
||||
return p.tokenizer.Error()
|
||||
return p.tokenizer.Err()
|
||||
case SelfClosingTagToken:
|
||||
p.hasSelfClosingToken = true
|
||||
p.tok.Type = StartTagToken
|
||||
|
@ -149,9 +149,9 @@ type Tokenizer struct {
|
||||
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.
|
||||
func (z *Tokenizer) Error() error {
|
||||
func (z *Tokenizer) Err() error {
|
||||
if z.tt != ErrorToken {
|
||||
return nil
|
||||
}
|
||||
|
@ -427,7 +427,7 @@ loop:
|
||||
if tt.golden != "" {
|
||||
for i, s := range strings.Split(tt.golden, "$") {
|
||||
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
|
||||
}
|
||||
actual := z.Token().String()
|
||||
@ -438,8 +438,8 @@ loop:
|
||||
}
|
||||
}
|
||||
z.Next()
|
||||
if z.Error() != io.EOF {
|
||||
t.Errorf("%s: want EOF got %q", tt.desc, z.Error())
|
||||
if z.Err() != io.EOF {
|
||||
t.Errorf("%s: want EOF got %q", tt.desc, z.Err())
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -543,8 +543,8 @@ loop:
|
||||
tt := z.Next()
|
||||
switch tt {
|
||||
case ErrorToken:
|
||||
if z.Error() != io.EOF {
|
||||
t.Error(z.Error())
|
||||
if z.Err() != io.EOF {
|
||||
t.Error(z.Err())
|
||||
}
|
||||
break loop
|
||||
case TextToken:
|
||||
|
Loading…
Reference in New Issue
Block a user