blob: e03d0520d06a5b4b9b77729b6df98b806d767d8e [file] [log] [blame]
// Copyright 2024 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 yield defines an Analyzer that checks for mistakes related
// to the yield function used in iterators.
//
// # Analyzer yield
//
// yield: report calls to yield where the result is ignored
//
// After a yield function returns false, the caller should not call
// the yield function again; generally the iterator should return
// promptly.
//
// This example fails to check the result of the call to yield,
// causing this analyzer to report a diagnostic:
//
// yield(1) // yield may be called again (on L2) after returning false
// yield(2)
//
// The corrected code is either this:
//
// if yield(1) { yield(2) }
//
// or simply:
//
// _ = yield(1) && yield(2)
//
// It is not always a mistake to ignore the result of yield.
// For example, this is a valid single-element iterator:
//
// yield(1) // ok to ignore result
// return
//
// It is only a mistake when the yield call that returned false may be
// followed by another call.
package yield