// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package testdata

func ReturnReturnOkay() (any, error) {
	var i interface{}
	return i, nil
}

func OneGoodOneBad() (any, error) { // want "Function OneGoodOneBad can return an error, and has a statement that returns only nils"
	var i interface{}
	if true {
		return i, nil
	}
	return nil, nil
}

func OneBadOneGood() (any, error) { // want "Function OneBadOneGood can return an error, and has a statement that returns only nils"
	var i interface{}
	if true {
		return nil, nil
	}
	return i, nil
}

func EmptyFunc() {}

func TwoNilNils() (any, error) { // want "Function TwoNilNils can return an error, and has a statement that returns only nils"
	if true {
		return nil, nil
	}
	return nil, nil
}

// ThreeResults should not fail, as while it returns nil, nil, nil, it has three results, not two.
func ThreeResults() (any, any, error) {
	return nil, nil, nil
}

func TwoArgsNoError() (any, any) {
	return nil, nil
}

func NestedReturn() (any, error) { // want "Function NestedReturn can return an error, and has a statement that returns only nils"
	{
		{
			{
				return nil, nil
			}
		}
	}
}

func NestedForReturn() (any, error) { // want "Function NestedForReturn can return an error, and has a statement that returns only nils"
	for {
		for i := 0; i < 100; i++ {
			{
				return nil, nil
			}
		}
	}
}

func AnyErrorNilNil() (any, error) { // want "Function AnyErrorNilNil can return an error, and has a statement that returns only nils"
	return nil, nil
}

// Skipped should be skipped because of the following line:
// ignore-nil-nil-function-check
func Skipped() (any, error) {
	return nil, nil
}
