Commit Graph

12138 Commits

Author SHA1 Message Date
Jason Newcomb
3e5dcba2ee
Small cleanup of option_if_let_else and additional tests. 2021-08-26 11:44:36 -04:00
Jason Newcomb
8b3ca9a315
Fix option_if_let_else
* `break` and `continue` statments local to the would-be closure are allowed
* don't lint in const contexts
* don't lint when yield expressions are used
* don't lint when the captures made by the would-be closure conflict with the other branch
* don't lint when a field of a local is used when the type could be pontentially moved from
* in some cases, don't lint when scrutinee expression conflicts with the captures of the would-be closure
2021-08-16 16:12:00 -04:00
bors
983e5b877e Auto merge of #7566 - dswij:manual-flatten-use, r=xFrednet
Check expr usage for  `manual_flatten`

Fixes #6784
Fixes #7538

`manual_flatten` should not trigger when `if let` match expression will be used.

changelog: [`manual_flatten`] checks for expr usage after `if let`
2021-08-16 08:35:06 +00:00
dswij
a09bc1b6fe Check if let expr usage in manual_flatten
`manual_flatten` should not trigger when match expression in `if let` is
going to be used.
2021-08-16 16:25:10 +08:00
dswij
711c5cb6d2 Add false positive test for manual_flatten
Add a scenario where `manual_flatten` is triggered when match expression will still be used after the match in `if let`.
2021-08-16 16:24:44 +08:00
bors
3f0c97740f Auto merge of #7531 - Jarcho:manual_map_7413, r=camsteffen
Manual map 7413

fixes: #7413

This only fixes the specific problem from #7413, not the general case. The full fix requires interacting with the borrow checker to determine the lifetime of all the borrows made in the function. I'll open an issue about it later.

changelog: Don't suggest using `map` when the option is borrowed in the match, and also consumed in the arm.
changelog: Locals declared within the would-be closure will not prevent the closure from being suggested in `manual_map` and `map_entry`
2021-08-16 01:48:01 +00:00
Jason Newcomb
f0444d73de
Use each_binding_or_first in capture_local_usage 2021-08-15 20:32:47 -04:00
bors
d4e2fcabb1 Auto merge of #7521 - rukai:fix_lintcheck_local_path_handling, r=camsteffen
lintcheck always copies in a fresh crate when provided with a crate path

changelog: none

When lintcheck is run on local crates it copies the crate to `target/lintcheck/sources/crate_name` on the first run only.
Then in subsequent runs of lintcheck it reuses this same copy.
This caching behaviour makes sense when dealing with immutable crates.io releases and git commits.
However it is quite surprising that the changes to my local crate are not used when I run lintcheck.

To fix this I removed the copy, instead clippy runs directly off the provided crate folder.
I have tested this and have not observed any negative effects from doing this.
But maybe i'm missing something as im not familiar with clippy!

Alternatively we could make it copy the entire crate every run, but that seems problematic to me as multi-gigabyte target folders will take a long time to copy and wear down SSDs for developers who frequently run lintcheck.
2021-08-16 00:20:31 +00:00
Lucas Kent
997ddbbfd8 Lintcheck always copies in a fresh crate when provided with a crate path
but skips directories containing CACHEDIR.TAG e.g. the target/ dir
2021-08-16 10:18:24 +10:00
bors
5449e23e67 Auto merge of #7568 - dtolnay-contrib:ifletelse, r=llogiq
Downgrade option_if_let_else to nursery

I believe that this lint's loose understanding of ownership (#5822, #6737) makes it unsuitable to be enabled by default in its current state, even as a pedantic lint.

Additionally the lint has known problems with type inference (#6137), though I may be willing to consider this a non-blocker in isolation if it weren't for the ownership false positives.

A fourth false positive involving const fn: #7567.

But on top of these, for me the biggest issue is I basically fully agree with https://github.com/rust-lang/rust-clippy/issues/6137#issuecomment-705605688. In my experience this lint universally makes code worse even when the resulting code does compile.

---

changelog: remove [`option_if_let_else`] from default set of enabled lints
2021-08-15 12:02:24 +00:00
Jason Newcomb
10c0460a47
update stderr messages 2021-08-14 19:52:59 -04:00
Jason Newcomb
5e4d8b44f9
Improve doc for can_move_expr_to_closure_no_visit 2021-08-14 19:50:01 -04:00
Jason Newcomb
9500974bdb
Fix tracking of which locals would need to be captured in a closure.
* Captures by sub closures are now considered
* Copy types are correctly borrowed by reference when their value is used
* Fields are no longer automatically borrowed by value
* Bindings in `match` and `let` patterns are now checked to determine how a local is captured
2021-08-14 19:49:57 -04:00
Jason Newcomb
251dd30d77
Improve manual_map
In some cases check if a borrow made in the scrutinee expression would prevent creating the closure used by `map`
2021-08-14 19:49:54 -04:00
Jason Newcomb
4838c78ba4
Improve manual_map and map_entry
Locals which can be partially moved created within the to-be-created closure shouldn't block the use of a closure
2021-08-14 19:49:45 -04:00
David Tolnay
3c8eaa8b2c
Downgrade option_if_let_else to nursery 2021-08-14 05:47:01 -07:00
bors
7c5487dc62 Auto merge of #7562 - dswij:filter-next-false-positive, r=xFrednet
Fix false positive on `filter_next`

fixes #7561

changelog: Fix false positive on [`filter_next`] when a method does not implement `Iterator`
2021-08-13 07:49:52 +00:00
dswij
91b598a8e4 Fix false positive on filter_next 2021-08-13 14:56:37 +08:00
dswij
e9f56f949d Add false positive test for iterator method 2021-08-13 14:56:37 +08:00
bors
b4d76b42fd Auto merge of #7560 - xFrednet:7289-configuration-for-every-type-lint, r=camsteffen
Use `avoid-breaking-exported-api` configuration in types module

This PR empowers our lovely `avoid-breaking-exported-api` configuration value to also influence the emission of lints inside the `types` module.

(That's pretty much it, not really a change worthy of writing a fairy tale about. Don't get me wrong, I would love to write a short one, but I sadly need to study now).

---

Closes: rust-lang/rust-clippy#7489

changelog: The `avoid-breaking-exported-api` configuration now also works for [`box_vec`], [`redundant_allocation`], [`rc_buffer`], [`vec_box`], [`option_option`], [`linkedlist`], [`rc_mutex`]

changelog: [`rc_mutex`]: update the lint message to comply with the normal format

---

r? `@camsteffen,` as you implemented the configuration value

cc: `@flip1995,` as we've discussed this change in rust-lang/rust-clippy#7308
2021-08-12 20:20:58 +00:00
xFrednet
c02dcd5405 Update type UI tests to use private items 2021-08-12 22:18:45 +02:00
xFrednet
206741bf57 Use avoid_breaking_exported_api for types module lints
Addressed PR reviews regarding code style
2021-08-12 22:18:42 +02:00
xFrednet
09b7745f34 Updated lint message for rc_mutex 2021-08-12 13:53:23 +02:00
bors
7bfc26ec8e Auto merge of #7558 - flip1995:rustup, r=flip1995
Rustup

r? `@ghost`

changelog: none
2021-08-12 09:13:53 +00:00
flip1995
c3995b5edc
Bump nightly version -> 2021-08-12 2021-08-12 11:09:15 +02:00
flip1995
d02016d686
Merge remote-tracking branch 'upstream/master' into rustup 2021-08-12 10:58:44 +02:00
bors
62f4187ed0 Auto merge of #7546 - mgeier:patch-1, r=giraffate
similar_names: allow "iter" and "item"

changelog: [`similar_names`] no longer complains about `iter` and `item` being too similar
2021-08-12 08:16:50 +00:00
bors
e62a6cad1e Auto merge of #7516 - lf-:unwrap-or-default, r=xFrednet
Add `unwrap_or_else_default` lint

---

*Please write a short comment explaining your change (or "none" for internal only changes)*

changelog: Add a new [`unwrap_or_else_default`] style lint. This will catch `unwrap_or_else(Default::default)` on Result and Option and suggest `unwrap_or_default()` instead.
2021-08-12 08:02:44 +00:00
bors
dd9fe5ceab Auto merge of #7556 - F3real:no_effect_inclusive_range, r=flip1995
No effect inclusive range

I noticed during last PR that range expression is `ExprKind::Struct` while inclusive range is `ExprKind::Call` which was why it was not handled. This PR adds check for this case.

changelog: [`no_effect]` Report inclusive range in no_effect lint
2021-08-12 07:47:07 +00:00
Jade
295df88986 Reword is_trait_item description 2021-08-11 18:28:42 -07:00
F3real
979ce29086 Correctly report inclusive range in no_effect lint 2021-08-12 01:05:41 +02:00
Matthias Geier
f7784ef534
fix line numbers 2021-08-11 20:42:01 +02:00
Matthias Geier
ee63ebe11b
rustfmt 2021-08-11 20:35:48 +02:00
Matthias Geier
573b897441
Add test for similar names "iter" and "item" 2021-08-11 20:32:26 +02:00
bors
b1b38604f2 Auto merge of #7541 - LeSeulArtichaut:for-never-loop, r=camsteffen
`never_loop`: suggest using an `if let` instead of a `for` loop

changelog: suggest using an `if let` statement instead of a `for` loop that [`never_loop`]s

Fixes #7537, r? `@camsteffen.`
2021-08-11 14:49:37 +00:00
LeSeulArtichaut
fc0af8e4d8 never_loop: suggest using an if let instead of a for loop 2021-08-11 16:35:33 +02:00
Esteban Kuber
652b6a771f update clippy 2021-08-11 14:21:33 +00:00
Jade
23d398b184 tree-wide: Fix all the rustdoc warnings 2021-08-10 14:40:26 -07:00
Jade
c78cc7ac1f Add is_trait_item, refactor or_fun_call and unwrap_or_else_default 2021-08-10 14:40:26 -07:00
Jade
11ef04728c Add unwrap_or_else_default lint
This will catch `unwrap_or_else(Default::default)` on Result and Option
and suggest `unwrap_or_default()` instead.
2021-08-10 14:40:26 -07:00
bors
76c4a337d1 Auto merge of #7535 - LeSeulArtichaut:7518-self-ty-arg, r=xFrednet
Properly handle `Self` type for `trivially_copy_pass_by_ref`

changelog: properly handle `Self` type for [`trivially_copy_pass_by_ref`].

Fixes #7518
2021-08-10 10:25:26 +00:00
bors
f998e89e43 Auto merge of #7478 - DevinR528:preemtive, r=llogiq
Fix nonstandard_macro_braces FP and docs of disallowed_types

changelog: Fix FP in [`nonstandard_macro_braces`] lint
2021-08-10 00:52:04 +00:00
bors
87ce09d0df Auto merge of #7544 - r00ster91:patch-1, r=flip1995
Clean up examples in new lint suggestion template

I'm pretty sure they meant to write `bounds checking` when they wrote `bounce checking` but I could be wrong. After that I thought I could improve it further and ended up with this.

changelog: none
2021-08-09 14:04:36 +00:00
bors
14d2aa1582 Auto merge of #7542 - LeSeulArtichaut:cleanups, r=flip1995
Cleanup usage of `span_to_snippet` and `LintContext::sess`

- avoid using `SourceMap::span_to_snippet` directly and use `clippy_utils::source::snippet_opt` instead
- don't use `LintContext::sess()` on `EarlyContext`s which have a `sess` field directly available, saving the import of `LintContext`

changelog: none
2021-08-09 13:48:47 +00:00
bors
0084195dee Auto merge of #7506 - HKalbasi:add-xor-swap, r=camsteffen
Add xor case to `manual swap` lint

Continue of #7153
closes #6598

changelog: Add "xor swap" case to [`manual_swap`]
2021-08-09 13:34:42 +00:00
hamidreza kalbasi
6d36d1a835 merge XOR_SWAP with MANUAL_SWAP 2021-08-09 02:15:10 +04:30
Matthias Geier
bc9459f9d4
similar_names: allow "iter" and "item" 2021-08-07 18:11:49 +02:00
bors
176df7ca9a Auto merge of #7536 - LeSeulArtichaut:redundant-allocation-doc, r=giraffate
Add missing backtick in docs for `redundant_allocation`

changelog: none
2021-08-07 13:19:06 +00:00
bors
6cb30ad581 Auto merge of #7534 - LeSeulArtichaut:7517-closure-too-many-lines, r=flip1995
Don't emit `too_many_lines` for closures

changelog: don't emit the [`too_many_lines`] lint inside closures to avoir duplicated diagnostics.

Fixes #7517.
2021-08-07 13:05:53 +00:00
bors
a0e71e5d63 Auto merge of #7533 - Valentine-Mario:vec_extend_to_append, r=xFrednet
fix bug on mutable ref

fixes: #7524

This PR is related to issue #7524
changelog:  [`extend_with_drain`] Improve code suggestion for mutable and immutable references
2021-08-07 12:54:13 +00:00