mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
![Russ Cox](/assets/img/avatar_default.png)
Currently the code handles the case of returning values from a function with no result parameters as a special case. Consider this input: package p func f0_2() { return 1, 2 } func f0_1() { return 1 } func f1_0() int { return } func f1_2() int { return 1, 2 } func f2_0() (int, int) { return } func f2_1() (int, int) { return 1 } The errors are: x.go:3:33: no result values expected <<< x.go:4:33: no result values expected <<< x.go:5:26: not enough return values have () want (int) x.go:6:36: too many return values have (number, number) want (int) x.go:7:26: not enough return values have () want (int, int) x.go:8:33: not enough return values have (number) want (int, int) There are two problems with the current special case emitting the errors on the marked line: 1. It calls them 'result values' instead of 'return values'. 2. It doesn't show the type being returned, which can be useful to programmers. Using the general case solves both these problems, so this CL removes the special case and calls the general case instead. Now those two errors read: x.go:3:33: too many return values have (number, number) want () x.go:4:33: too many return values have (number) want () Fixes #50653. Change-Id: If6b47dcece14ed4febb3a2d3d78270d5be1cb24d Reviewed-on: https://go-review.googlesource.com/c/go/+/379116 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
54 lines
2 KiB
Go
54 lines
2 KiB
Go
// errorcheck
|
|
|
|
// Copyright 2016 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 foo() (int, int) {
|
|
return 2.3 // ERROR "not enough return values\n\thave \(number\)\n\twant \(int, int\)|not enough arguments to return"
|
|
}
|
|
|
|
func foo2() {
|
|
return int(2), 2 // ERROR "too many (arguments to return|return values)\n\thave \(int, number\)\n\twant \(\)|return with value in function with no return type"
|
|
}
|
|
|
|
func foo3(v int) (a, b, c, d int) {
|
|
if v >= 0 {
|
|
return 1 // ERROR "not enough return values\n\thave \(number\)\n\twant \(int, int, int, int\)|not enough arguments to return"
|
|
}
|
|
return 2, 3 // ERROR "not enough return values\n\thave \(number, number\)\n\twant \(int, int, int, int\)|not enough arguments to return"
|
|
}
|
|
|
|
func foo4(name string) (string, int) {
|
|
switch name {
|
|
case "cow":
|
|
return "moo" // ERROR "not enough return values\n\thave \(string\)\n\twant \(string, int\)|not enough arguments to return"
|
|
case "dog":
|
|
return "dog", 10, true // ERROR "too many return values\n\thave \(string, number, bool\)\n\twant \(string, int\)|too many arguments to return"
|
|
case "fish":
|
|
return "" // ERROR "not enough return values\n\thave \(string\)\n\twant \(string, int\)|not enough arguments to return"
|
|
default:
|
|
return "lizard", 10
|
|
}
|
|
}
|
|
|
|
type S int
|
|
type T string
|
|
type U float64
|
|
|
|
func foo5() (S, T, U) {
|
|
if false {
|
|
return "" // ERROR "not enough return values\n\thave \(string\)\n\twant \(S, T, U\)|not enough arguments to return"
|
|
} else {
|
|
ptr := new(T)
|
|
return ptr // ERROR "not enough return values\n\thave \(\*T\)\n\twant \(S, T, U\)|not enough arguments to return"
|
|
}
|
|
return new(S), 12.34, 1 + 0i, 'r', true // ERROR "too many return values\n\thave \(\*S, number, number, number, bool\)\n\twant \(S, T, U\)|too many arguments to return"
|
|
}
|
|
|
|
func foo6() (T, string) {
|
|
return "T", true, true // ERROR "too many return values\n\thave \(string, bool, bool\)\n\twant \(T, string\)|too many arguments to return"
|
|
}
|