Twey
7 hours ago
This would have been flagged by Clippy lints `let_underscore_untyped` or `let_underscore_must_use`, which sadly are not enabled by default.
microgpt
5 hours ago
Or just by not writing let _ =
pwdisswordfishq
6 hours ago
Ehh, easy fix
#[allow(clippy::let_underscore_untyped,clippy::let_underscore_must_use)]
let _ = self.poll_flush(cx)?;Twey
6 hours ago
I said ‘flagged’, not ‘fixed’ :)
You can always write the wrong code if you want it enough. But hopefully a warning would have prompted someone to think harder about this flow.
pwdisswordfishq
5 hours ago
But "let _ =" is already an explicit suppression of a must-use warning. Where does this arms race of "no, I really know what I am doing, compiler" versus "no, this really looks like a mistake, programmer" end?
Twey
5 hours ago
That's an excellent question I don't have an answer for in general :)
IMHO the goal is usually for the compiler not to make these decisions but to provide the tools for the APIs people build to make them. That's kind of passing the buck, though.
I guess in this case the core problem is that the API for these I/O calls has no representation in the type system for what's happening to the buffer. Proxying it as ‘the programmer must think about this code path’ is a reasonable best-effort but, evidently, sometimes inadequate.
tialaramex
4 hours ago
I do feel like Rust did enough to allow software engineers and their managers to make an explicit choice here.
PoignardAzur
4 hours ago
And this is why you should warn on `clippy::allow_attributes_without_reason` in your projects.
lunar_mycroft
6 hours ago
You can set the lints to `forbid` instead of `deny`, which means they can't be `allowed` like that.
nesarkvechnep
6 hours ago
Yeah, but you must know about them and the possible bug first in order to allow them...
Twey
6 hours ago
Hence ‘sadly’. IMNSHO both of these (or at least _untyped) should be enabled by default. Untyped `let _` is too big a footgun during refactorings.
Joker_vD
6 hours ago
At which point you wouldn't have written this bug in the first place; or the warnings would trigger immediately, you'd change _ to an actual variable and then remove the warning pragmas because now you don't assign to _.
Twey
6 hours ago
`Poll` is marked `#[must_use]` so if you were assigning to something other than `_` you'd get a warning that you're ignoring the `Pending` path. The Clippy lint is only for `_` which Rust considers a use by default.
turboponyy
4 hours ago
Not really. If I'm using a linter, I go and configure the strictest possible ruleset, and only disable rules when justified on a need-by-need basis. It's just a matter of discipline.