golangci-lint/test/testdata/nonamedreturns_custom.go
dependabot[bot] 98c811d0e5
build(deps): bump github.com/firefart/nonamedreturns from 1.0.1 to 1.0.2 (#2929)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2022-06-19 14:20:47 +02:00

226 lines
3.7 KiB
Go

// args: -Enonamedreturns
// config_path: testdata/configs/nonamedreturns.yml
package testdata
func simple() (err error) {
defer func() {
err = nil
}()
return
}
func twoReturnParams() (i int, err error) { // ERROR `named return "i" with type "int" found`
defer func() {
i = 0
err = nil
}()
return
}
func allUnderscoresExceptError() (_ int, err error) {
defer func() {
err = nil
}()
return
}
func customName() (myName error) {
defer func() {
myName = nil
}()
return
}
func errorIsNoAssigned() (err error) { // ERROR `named return "err" with type "error" found`
defer func() {
_ = err
processError(err)
if err == nil {
}
switch err {
case nil:
default:
}
}()
return
}
func shadowVariable() (err error) {
defer func() {
err := 123 // linter doesn't understand that this is different variable (even if different type) (yet?)
_ = err
}()
return
}
func shadowVariable2() (err error) {
defer func() {
a, err := doSomething() // linter doesn't understand that this is different variable (yet?)
_ = a
_ = err
}()
return
}
type myError = error // linter doesn't understand that this is the same type (yet?)
func customType() (err myError) { // ERROR `named return "err" with type "myError" found`
defer func() {
err = nil
}()
return
}
func notTheLast() (err error, _ int) {
defer func() {
err = nil
}()
return
}
func twoErrorsCombined() (err1, err2 error) {
defer func() {
err1 = nil
err2 = nil
}()
return
}
func twoErrorsSeparated() (err1 error, err2 error) {
defer func() {
err1 = nil
err2 = nil
}()
return
}
func errorSlice() (err []error) { // ERROR `named return "err" with type "\[\]error" found`
defer func() {
err = nil
}()
return
}
func deferWithVariable() (err error) { // ERROR `named return "err" with type "error" found`
f := func() {
err = nil
}
defer f() // linter can't catch closure passed via variable (yet?)
return
}
func uberMultierr() (err error) { // ERROR `named return "err" with type "error" found`
defer func() {
multierrAppendInto(&err, nil) // linter doesn't allow it (yet?)
}()
return
}
func deferInDefer() (err error) {
defer func() {
defer func() {
err = nil
}()
}()
return
}
func twoDefers() (err error) {
defer func() {}()
defer func() {
err = nil
}()
return
}
func callFunction() (err error) {
defer func() {
_, err = doSomething()
}()
return
}
func callFunction2() (err error) {
defer func() {
var a int
a, err = doSomething()
_ = a
}()
return
}
func deepInside() (err error) {
if true {
switch true {
case false:
for i := 0; i < 10; i++ {
go func() {
select {
default:
defer func() {
if true {
switch true {
case false:
for j := 0; j < 10; j++ {
go func() {
select {
default:
err = nil
}
}()
}
}
}
}()
}
}()
}
}
}
return
}
var goodFuncLiteral = func() (err error) {
defer func() {
err = nil
}()
return
}
var badFuncLiteral = func() (err error) { // ERROR `named return "err" with type "error" found`
defer func() {
_ = err
}()
return
}
func funcLiteralInsideFunc() error {
do := func() (err error) {
defer func() {
err = nil
}()
return
}
return do()
}
type x struct{}
func (x) goodMethod() (err error) {
defer func() {
err = nil
}()
return
}
func (x) badMethod() (err error) { // ERROR `named return "err" with type "error" found`
defer func() {
_ = err
}()
return
}
func processError(error) {}
func doSomething() (int, error) { return 10, nil }
func multierrAppendInto(*error, error) bool { return false } // https://pkg.go.dev/go.uber.org/multierr#AppendInto