rust-lang / rust-lang/rust-clippy
Use `std::future::pending` for infinite sleep
Open
Nobody has claimed this yet.
A-lint
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
What it does
Whenever you write tokio::time::sleep(Duration::MAX), the lint should suggest that you replace this with std::future::pending().
Ideally the lint would also apply to sleep calls from other runtimes.
Advantage
- Improves efficiency by not storing a timer.
- Does not depend on a specific runtime.
- The lint will teach people that
std::future::pending()exists.
Drawbacks
Perhaps this lint is too specific?
Example
#[tokio::main]
async fn main() {
tokio::spawn(my_bg_task());
// Don't return from main, since that kills everything.
tokio::time::sleep(Duration::MAX).await;
}
Could be written as:
#[tokio::main]
async fn main() {
tokio::spawn(my_bg_task());
// Don't return from main, since that kills everything.
std::future::pending().await;
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start from the issue's Tokio example and the requested replacement with std::future::pending(). Determine how the lint should recognize Duration::MAX sleeps, including whether other runtimes are in scope; done means the intended sleep calls produce the suggested replacement without incorrectly flagging other uses.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- devtools
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100