How does terrible code like this survive so long in such a key piece of infrastructure:<p><pre><code> let _ = self.poll_read(cx)?;
let _ = self.poll_write(cx)?;
let _ = self.poll_flush(cx)?;
</code></pre>
Surely at the very least a linter should have flagged that the return values aren't handled.
It is an <i>explicit</i> way to discard return values; `self.poll_read(cx)?` etc. alone would warn. Or in this case, `Poll<Result<(), Error>>` is unwrapped once and `Result<(), Error>` is being discarded. The decision to discard `Result<(), Error>` should have been intentional, albeit turned out to be not always the case.
Assigning to _ in Rust specifically means that you intentionally want to discard the value, and the clippy linter and the Rust compiler both know that.
Well, simple. You write a project without a linter, so as to be fast. Or on minimal settings. Then one day you turn it on and end up with 10k warnings at max checks. You ignore them and tune it down to a bearable level. Problem solved.<p>That, or the linter sucks (or the idiom is too popular to be linted against, so then it's more of a language issue).