1
0
mirror of https://github.com/golang/go synced 2024-11-21 23:14:40 -07:00

cmd/vet: give warning for construct 'Println(os.Stderr, ...)'

also fixes this bug in net/http/httptest.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5654083
This commit is contained in:
Shenghou Ma 2012-02-14 11:24:41 -05:00 committed by Russ Cox
parent d599accafa
commit 60e4d5668e
2 changed files with 12 additions and 1 deletions

View File

@ -207,7 +207,18 @@ func (f *File) checkPrintfVerb(call *ast.CallExpr, verb rune, flags []byte) {
// call.Args[skip] is the first argument to be printed. // call.Args[skip] is the first argument to be printed.
func (f *File) checkPrint(call *ast.CallExpr, name string, skip int) { func (f *File) checkPrint(call *ast.CallExpr, name string, skip int) {
isLn := strings.HasSuffix(name, "ln") isLn := strings.HasSuffix(name, "ln")
isF := strings.HasPrefix(name, "F")
args := call.Args args := call.Args
// check for Println(os.Stderr, ...)
if skip == 0 && !isF && len(args) > 0 {
if sel, ok := args[0].(*ast.SelectorExpr); ok {
if x, ok := sel.X.(*ast.Ident); ok {
if x.Name == "os" && strings.HasPrefix(sel.Sel.Name, "Std") {
f.Warnf(call.Pos(), "first argument to %s is %s.%s", name, x.Name, sel.Sel.Name)
}
}
}
}
if len(args) <= skip { if len(args) <= skip {
if *verbose && !isLn { if *verbose && !isLn {
f.Badf(call.Pos(), "no args in %s call", name) f.Badf(call.Pos(), "no args in %s call", name)

View File

@ -95,7 +95,7 @@ func (s *Server) Start() {
s.URL = "http://" + s.Listener.Addr().String() s.URL = "http://" + s.Listener.Addr().String()
go s.Config.Serve(s.Listener) go s.Config.Serve(s.Listener)
if *serve != "" { if *serve != "" {
fmt.Println(os.Stderr, "httptest: serving on", s.URL) fmt.Fprintln(os.Stderr, "httptest: serving on", s.URL)
select {} select {}
} }
} }