Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::let_underscore_future: non-binding `let` on a future
What it meansChecks for let _ = <expr> where the resulting type of expr implements Future It is in the suspicious group and warns by default.
What you see
warning: non-binding `let` on a future --> main.rs:6:1 | 6 | let _ = foo(); | ^^^^^^^^^^^^^^ | = help: consider awaiting the future or dropping explicitly with `std::mem::drop` = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#let_underscore_future = note: `#[warn(clippy::let_underscore_future)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Futures must be polled for work to be done. The original intention was most likely to await the future and ignore the resulting value.
Code that is most likely wrong or useless. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
async fn foo() -> Result<(), ()> {
Ok(())
}
let _ = foo();
Write this instead
async fn foo() -> Result<(), ()> {
Ok(())
}
let _ = foo().await;
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::let_underscore_future)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
let_underscore_future = "allow"One run
cargo clippy -- -A clippy::let-underscore-futureThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for let _ = <expr> where the resulting type of expr implements Future
Why is this bad?
Futures must be polled for work to be done. The original intention was most likely to await the future and ignore the resulting value.
Example
async fn foo() -> Result<(), ()> {
Ok(())
}
let _ = foo();
Use instead:
async fn foo() -> Result<(), ()> {
Ok(())
}
let _ = foo().await;
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- infallible_try_frominfallible TryFrom impl; consider implementing From instead
- iter_out_of_boundsthis `.take()` call takes more items than the iterator will produce
- join_absolute_pathsChecks for calls to Path::join that start with a path separator (\\ or /)
- lines_filter_map_okChecks for usage of lines.filter_map(Result::ok) or lines.flat_map(Result::ok) when lines has type std::io::Lines
- macro_metavars_in_unsafeLooks for macros that expand metavariables in an unsafe block
- manual_unwrap_or_defaultmatch can be simplified with `.unwrap_or_default()`
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::infallible_try_frominfallible TryFrom impl; consider implementing From insteadRead it next →Did this answer your question?