blob: 1435ea09a50287c40c83ebc437325287c7fd813f [file] [log] [blame]
// Copyright 2020 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 fillreturns
import (
"errors"
"go/ast"
ast2 "go/ast"
"io"
"net/http"
. "net/http"
"net/url"
"strconv"
)
type T struct{}
type T1 = T
type I interface{}
type I1 = I
type z func(string, http.Handler) error
func x() error {
return errors.New("foo")
}
func b() (string, int, error) {
return "", 0, errors.New("foo") // want "wrong number of return values \\(want 3, got 2\\)"
}
func c() (string, int, error) {
return "", 7, errors.New("foo") // want "wrong number of return values \\(want 3, got 2\\)"
}
func d() (string, int, error) {
return "", 7, nil // want "wrong number of return values \\(want 3, got 2\\)"
}
func e() (T, error, *bool) {
return T{}, (z(http.ListenAndServe))("", nil), nil // want "wrong number of return values \\(want 3, got 1\\)"
}
func preserveLeft() (int, int, error) {
return 1, 0, errors.New("foo") // want "wrong number of return values \\(want 3, got 2\\)"
}
func matchValues() (int, error, string) {
return 3, errors.New("foo"), "" // want "wrong number of return values \\(want 3, got 2\\)"
}
func preventDataOverwrite() (int, string) {
return 0, "", errors.New("foo") // want "wrong number of return values \\(want 2, got 1\\)"
}
func closure() (string, error) {
_ = func() (int, error) {
return 0, nil // want "wrong number of return values \\(want 2, got 0\\)"
}
return "", nil // want "wrong number of return values \\(want 2, got 0\\)"
}
func basic() (uint8, uint16, uint32, uint64, int8, int16, int32, int64, float32, float64, complex64, complex128, byte, rune, uint, int, uintptr, string, bool, error) {
return 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", false, nil // want "wrong number of return values \\(want 20, got 0\\)"
}
func complex() (*int, []int, [2]int, map[int]int) {
return nil, nil, nil, nil // want "wrong number of return values \\(want 4, got 0\\)"
}
func structsAndInterfaces() (T, url.URL, T1, I, I1, io.Reader, Client, ast2.Stmt) {
return T{}, url.URL{}, T{}, nil, nil, nil, Client{}, nil // want "wrong number of return values \\(want 8, got 0\\)"
}
func m() (int, error) {
if 1 == 2 {
return 0, nil // want "wrong number of return values \\(want 2, got 0\\)"
} else if 1 == 3 {
return 0, errors.New("foo") // want "wrong number of return values \\(want 2, got 1\\)"
} else {
return 1, nil // want "wrong number of return values \\(want 2, got 1\\)"
}
return 0, nil // want "wrong number of return values \\(want 2, got 0\\)"
}
func convertibleTypes() (ast2.Expr, int) {
return &ast2.ArrayType{}, 0 // want "wrong number of return values \\(want 2, got 1\\)"
}
func assignableTypes() (map[string]int, int) {
type X map[string]int
var x X
return x, 0 // want "wrong number of return values \\(want 2, got 1\\)"
}
func interfaceAndError() (I, int) {
return errors.New("foo"), 0 // want "wrong number of return values \\(want 2, got 1\\)"
}
func funcOneReturn() (string, error) {
return strconv.Itoa(1), nil // want "wrong number of return values \\(want 2, got 1\\)"
}
func funcMultipleReturn() (int, error, string) {
return strconv.Atoi("1")
}
func localFuncMultipleReturn() (string, int, error, string) {
return b()
}
func multipleUnused() (int, string, string, string) {
return 3, "", "", "", 4, 5 // want "wrong number of return values \\(want 4, got 3\\)"
}
func gotTooMany() int {
if true {
return 0 // want "wrong number of return values \\(want 1, got 2\\)"
} else {
return 1 // want "wrong number of return values \\(want 1, got 3\\)"
}
return 5 // want "wrong number of return values \\(want 1, got 3\\)"
}
func fillVars() (int, string, ast.Node, bool, error) {
eint := 0
s := "a"
var t bool
if true {
err := errors.New("fail")
return eint, s, nil, false, err // want "wrong number of return values \\(want 5, got 0\\)"
}
n := ast.NewIdent("ident")
int := 3
var b bool
return int, "", n, b, nil // want "wrong number of return values \\(want 5, got 1\\)"
}