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
10.89k stars 1.46k forks source link

less aggressive needless_borrows_for_generic_args #12706

Open pacak opened 3 weeks ago

pacak commented 3 weeks ago

Current implementation looks for significant drops, that can change the behavior, but that's not enough - value might not have a Drop itself but one of its children might have it.

A good example is passing a reference to PathBuf to std::fs::File::open. There's no benefits to pass PathBuf by value, but since clippy can't see Drop on Vec several layers down it complains forcing pass by value and making it impossible to use the same name later.

New implementation only looks at copy values or values created in place so existing variable will never be moved but things that take a string reference created and value is created inplace &"".to_owned() will make it to suggest to use "".to_owned() still.

Fixes https://github.com/rust-lang/rust-clippy/issues/12454

changelog: [needless_borrows_for_generic_args]: avoid moving variables

rustbot commented 3 weeks ago

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @dswij (or someone else) some time within the next two weeks.

Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate: