rust-lang / rust-clippy

A bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/
https://rust-lang.github.io/rust-clippy/
Other
11.31k stars 1.53k forks source link

Manual Duration::{as_nanos,as_milis,as_secs_f64,as_secs_f32} implementation #6068

Open est31 opened 4 years ago

est31 commented 4 years ago

What it does

Recognize cases of manual re-implementation of the builtin as_nanos and as_secs_f64 and as_secs_f32 functions on Duration.

Categories

Drawbacks

MSRV issues, implementing the suggestion might increase the MSRV.

Example

let nanos = diff.as_secs() * 1_000_000_000 + diff.subsec_nanos() as u64;
let milis = diff.as_secs() * 1_000 + diff.subsec_milis() as u64;
let secs_f64 = (diff.as_secs() as f64 * 1_000.0 + diff.subsec_milis() as f64) / 1000.0;
let secs_f64 = diff.as_secs() as f64 + diff.subsec_milis() as f64 / 1_000.0;
let secs_f64 = diff.as_secs() as f64 + diff.subsec_nanos() as f64 / 1_000_000_000.0;

Could be written as:

let nanos = diff.as_nanos() as u64;
let milis = diff.as_millis() as u64;
let secs_f64 = diff.as_secs_f64();
let secs_f64 = diff.as_secs_f64();
let secs_f64 = diff.as_secs_f64();
est31 commented 4 years ago

Example encounters in the wild:

ghost commented 4 years ago

I think duration_subsec should be renamed to manual_duration_calcs and extended to handle cases.

I think the minimum supported rust version is an issue an that needs to be handled globally for this project. I wouldn't worry about it while implementing this.

himanoa commented 3 years ago

Hi, Can I give it a try?

llogiq commented 3 years ago

It's all yours!