-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rollup of 12 pull requests #5432
Conversation
… -> Option Result<T, E> has an `ok()` method that adapts a Result<T,E> into an Option<T>. It's possible to get around this adapter by writing Result<T,E>.map_or(None, Some). This lint is implemented as a new variant of the existing [`option_map_none` lint](rust-lang#2128)
…comparison, r=flip1995 Add lint for float in array comparison Fixes rust-lang#4277 changelog: - Added new handler for expression of index kind (e.g. `arr[i]`). It returns a constant when both array and index are constant, or when the array is constant and all values are equal. - Trigger float_cmp and float_cmp_const lint when comparing arrays. Allow for comparison when one of the arrays contains only zeros or infinities. - Added appropriate tests for such cases.
Fix update_lints This fixes a bug in update_lints, where `internal` lints were not registered properly. This also cleans up some code. For example: The code generation functions no longer filter the lints the are given. This is now the task of the caller. This way, it is more obvious in the `replace_in_file` calls which lints will be included in which part of a file. This also turns the lint modules private. There is no need for them to be public, since shared code should be in the utils module anyway. And last but not least, this fixes the `register_lints` code generation, so also internal lints get registered. changelog: none
Downgrade let_unit_value to pedantic Given that the false positive in rust-lang#1502 is marked E-hard and I don't have much hope of it getting fixed, I think it would be wise to disable this lint by default. I have had to suppress this lint in every substantial codebase (\>100k line) I have worked in. Any time this lint is being triggered, it's always the false positive case. The motivation for this lint is documented as: > A unit value cannot usefully be used anywhere. So binding one is kind of pointless. with this example: > ```rust > let x = { > 1; > }; > ``` Sure, but the author would find this out via an unused_variable warning or from `x` not being the type that they need further down. If there ends up being a type error on `x`, clippy's advice isn't going to help get the code compiling because it can only run if the code already compiles. changelog: Remove let_unit_value from default set of enabled lints
Downgrade trivially_copy_pass_by_ref to pedantic The rationale for this lint is documented as: > In many calling conventions instances of structs will be passed through registers if they fit into two or less general purpose registers. I think the purported performance benefits of clippy's recommendation are overstated. This isn't worth asking people to sprinkle code with more `*``*``&``*``&` to chase the alleged performance. This should be a pedantic lint that is disabled by default and opted in if some specific performance sensitive codebase determines that it is worthwhile. As a reminder, a typical place that a reference to a primitive would come up is if the function is used as a filter. Triggering a performance-oriented lint on this type of code is the definition of pedantic. ```rust fn filter(_n: &i32) -> bool { true } fn main() { let v = vec![1, 2, 3]; v.iter().copied().filter(filter).for_each(drop); } ``` ```console warning: this argument (4 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/main.rs:1:15 | 1 | fn filter(_n: &i32) -> bool { | ^^^^ help: consider passing by value instead: `i32` ``` changelog: Remove trivially_copy_pass_by_ref from default set of enabled lints
Downgrade inefficient_to_string to pedantic From the [documentation](https://rust-lang.github.io/rust-clippy/master/index.html#inefficient_to_string): > ```diff > - ["foo", "bar"].iter().map(|s| s.to_string()); > > + ["foo", "bar"].iter().map(|&s| s.to_string()); > ``` I feel like saving 10 nanoseconds from the formatting machinery isn't worth asking the programmer to insert extra `&` / `*` noise in the *vast* majority of cases. This is a pedantic lint. changelog: Remove inefficient_to_string from default set of enabled lints
Add new lint for `Result<T, E>.map_or(None, Some(T))` Fixes rust-lang#5414 PR Checklist --- - [x] Followed lint naming conventions (the name is a bit awkward, but it seems to conform) - [x] Added passing UI tests (including committed .stderr file) - [x] cargo test passes locally - [x] Executed cargo dev update_lints - [x] Added lint documentation - [x] Run cargo dev fmt `Result<T, E>` has an [`ok()`](https://doc.rust-lang.org/std/result/enum.Result.html#method.ok) method that adapts a `Result<T,E>` into an `Option<T>`. It's possible to get around this adapter by writing `Result<T,E>.map_or(None, Some)`. This lint is implemented as a new variant of the existing [`option_map_none` lint](rust-lang#2128)
Update doc links and mentioned names in docs changelog: none
Downgrade unreadable_literal to pedantic As motivated by rust-lang#5418. This is the top most commonly suppressed Clippy style lint, which indicates that the community has decided they don't share Clippy's opinion on the best style of this. I've left the lint in as pedantic, though it could be that "restriction" would be better -- I can see this lint being useful as an opt-in restriction in some codebases. changelog: Remove unreadable_literal from default set of enabled lints
Downgrade new_ret_no_self to pedantic As motivated by rust-lang#5418. This is the second most widely suppressed Clippy style lint, and [this grep.app search](https://grep.app/search?q=%5C%5Ballow%5C%28.%2Aclippy%3A%3Anew_ret_no_self%5Cb®exp=true&case=true&filter[lang][0]=Rust) shows a large number of diverse reasonable signatures for a `new` method. changelog: Remove new_ret_no_self from default set of enabled lints
…lip1995 CONTRIBUTING.md: fix broken triage link Fixes rust-lang#5421
…l, r=flip1995 Incorrect suspicious_op_assign_impl fixes rust-lang#5255 changelog: In suspicious_op_assign_impl ignore all operators in expression if it's part of AssignOp
Ehance opt_as_ref_deref lint. - [x] Added passing UI tests (including committed `.stderr` file) - [x] `cargo test` passes locally - [x] Run `cargo dev fmt` Lint on opt.as_ref().map(|x| &**x). Fixes rust-lang#5367. changelog: lint on opt.as_ref().map(|x| &**x)
I think this should be |
Changelog is written by hand anyway. This is just a marker for me/the person who writes the next changelog, that there should be rollup merges in the output of the |
@bors p=2 |
Needs rebase on #5434. |
@bors try (just trying if everything is fixed with bors+GHA. I'll rebase later) |
Rollup of 12 pull requests Successful merges: - #5345 (Add lint for float in array comparison) - #5406 (Fix update_lints) - #5409 (Downgrade let_unit_value to pedantic) - #5410 (Downgrade trivially_copy_pass_by_ref to pedantic) - #5412 (Downgrade inefficient_to_string to pedantic) - #5415 (Add new lint for `Result<T, E>.map_or(None, Some(T))`) - #5417 (Update doc links and mentioned names in docs) - #5419 (Downgrade unreadable_literal to pedantic) - #5420 (Downgrade new_ret_no_self to pedantic) - #5422 (CONTRIBUTING.md: fix broken triage link) - #5424 (Incorrect suspicious_op_assign_impl) - #5425 (Ehance opt_as_ref_deref lint.) Failed merges: - #5411 (Downgrade implicit_hasher to pedantic) - #5428 (Move cognitive_complexity to nursery) r? @ghost changelog: rollup
💔 Test failed - checks-action_test |
Successful merges:
Result<T, E>.map_or(None, Some(T))
#5415 (Add new lint forResult<T, E>.map_or(None, Some(T))
)Failed merges:
r? @ghost
changelog: rollup