== Why is this an issue?

In Kotlin, `Flow` represents a cold stream concept. Similar to `Stream` in Java or `Sequence` in Kotlin, we can manipulate the data inside the flow (filter, transform, collect, etc). The `Flow` API, just like `Stream` and `Sequence`, offers two types of operations: intermediate and terminal. Intermediate operations again return a `Flow` instance, all other operations are considered terminal. As flows are naturally lazy, no operations will actually be started until a terminal operation is called.

This rule reports an issue when the result of an intermediate operation on `Flow` is left unused.

=== Noncompliant code example

[source,kotlin]
----
suspend fun main() {
    val flow = flow {
        emit(1)
        emit(2)
        emit(3)
    }
    
    flow.take(2) // Noncompliant, the result of this operation is never used
}
----

=== Compliant solution

[source,kotlin]
----
suspend fun main() {
    val flow = flow {
        emit(1)
        emit(2)
        emit(3)
    }

    flow.take(2).collect { println(it) } // Compliant, collect is a terminal operation
}
----

== Resources

* https://kotlinlang.org/docs/flow.html[Flow documentation]
