Commit graph

19709 commits

Author SHA1 Message Date
J-ZhengLi
3cd6fd15a5 fix [empty_docs] trigger in proc-macro 2024-03-12 10:40:40 +08:00
J-ZhengLi
10677d6901 add with_empty_docs attr macro & test cases for issue #12377 2024-03-12 09:19:35 +08:00
Jacherr
edcf10e2f7 update_lints 2024-03-11 22:55:31 +00:00
Jacherr
100ab4993e new restriction lint: division_remainder_used 2024-03-11 22:51:03 +00:00
bors
e22ca03627 Auto merge of #12452 - CBSpeir:dedup-manual-retain, r=blyxyas
[`manual_retain`]: Fix duplicate diagnostics

Relates to: #12379

The first lint guard executed in `LateLintPass::check_expr` was testing if the parent was of type `ExprKind::Assign`.  This meant the lint emitted on both sides of the assignment operator when `check_expr` is called on either `Expr`.  The guard in the fix only lints once when the `Expr` is of kind `Assign`.

changelog:  Fix duplicate lint diagnostic emission from [`manual_retain`]
2024-03-11 22:21:27 +00:00
bors
f685a4b3f1 Auto merge of #12378 - GuillaumeGomez:duplicated_attr, r=blyxyas
Add new `duplicated_attributes` lint

It's a lint idea that `@llogiq` gave me while reviewing another PR.

There are some limitations, in particular for the "output". Initially I wanted to make it possible for directly lint against the whole attribute if its parts were all duplicated, but then I realized that the output would be chaotic if the duplicates were coming from different attributes, so I preferred to go to the simplest way and simply emit a warning for each entry. Not the best, but makes the implementation much easier.

Another limitation is that `cfg_attr` would be a bit more tricky to implement because we need to check if two `cfg` sets are exactly the same. I added a FIXME and will likely come back to it later.

And finally, I updated the `cargo dev update_lints` command because the generated `tests/ui/rename.rs` file was emitting the `duplicated_attributes` lint, so I allowed this lint inside it to prevent it from working.

changelog: Add new `duplicated_attributes` lint
2024-03-11 18:36:21 +00:00
Christopher B. Speir
d66a0ec714 Fix typo in section '6.10. Macro Expansions' of the Clippy Book
The struct returned by the `Span::ctxt` method was listed as
`SpanContext`. The correct struct is currently named `SyntaxContext`.
2024-03-11 13:31:02 -05:00
bors
870e016b65 Auto merge of #12430 - sanxiyn:direct-minimal-versions, r=Alexendoo
Fix dependency specifications

As Clippy lacks `Cargo.lock`, it makes sense to test its dependency specifications with [direct-minimal-versions](https://doc.rust-lang.org/cargo/reference/unstable.html#direct-minimal-versions). This can be done with the following addition to `.cargo/config.toml`.

```toml
[unstable]
direct-minimal-versions = true
```

* `tempfile` 3.3 is required by `clippy_lints`.
* `regex` 1.5.5 is required by `ui_test` 0.22.2.
* `quote` 1.0.25 is required by `syn` 2.0.0.
* `serde` 1.0.145 is required by `toml` 0.7.3.

changelog: none
2024-03-11 17:19:06 +00:00
bors
6ff4e71a05 Auto merge of #12448 - WeiTheShinobi:fix_single_match, r=dswij
[`single_match`]: Fix duplicate diagnostics

Relates to #12379

edit two test file
`tests/ui/single_match_else.rs`
`tests/ui/single_match.rs`

those two test file point to the same lint

---

changelog: [`single_match`] Fix duplicate diagnostics
2024-03-11 10:29:00 +00:00
bors
02156dcf09 Auto merge of #12458 - hamirmahal:refactor/readability-improvement, r=dswij
[`seek_from_current`]: readability improvements

fixes #12457.

---

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

changelog: [`seek_from_current`]: readability improvements
2024-03-11 07:00:36 +00:00
Hamir Mahal
9c51fd99aa
refactor: readability improvement for seek lint 2024-03-10 12:51:33 -07:00
WeiTheShinobi
8e55bbf115 [single_match]: Fix duplicate diagnostics 2024-03-11 01:08:37 +08:00
r0cky
6c863bc64c Remove unused structs in clippy 2024-03-10 23:33:00 +08:00
bors
86717f2f0c Auto merge of #12445 - y21:document-diagnostic-utils, r=xFrednet
add documentation to the `span_lint_hir` functions

As far as I could tell, these weren't documented anywhere, and since this is sometimes needed over `span_lint` for `#[allow]` attrs to work, I thought I would add a little bit of documentation.
When I started with clippy development, I also had no idea what these functions were for.

changelog: none
2024-03-10 10:49:05 +00:00
bors
81debac35b Auto merge of #12440 - GuillaumeGomez:add-match_option_and_default, r=llogiq
Add new `manual_unwrap_or_default` lint

This adds a new lint checking if a `match` or a `if let` can be replaced with `unwrap_or_default`.

----

changelog: Add new [`manual_unwrap_or_default`] lint
2024-03-10 09:57:32 +00:00
bors
18479040a6 Auto merge of #122246 - RalfJung:miri, r=RalfJung
Miri subtree update

r? `@ghost`

`@WaffleLapkin` when this lands, setting `MIRI_TEMP` should not be needed any more on the dev desktops.
2024-03-10 09:40:39 +00:00
The Miri Cronjob Bot
6d80398bd5 Merge from rustc 2024-03-10 05:04:18 +00:00
bors
45f87a0627 Auto merge of #121662 - saethlin:precondition-unification, r=RalfJung
Distinguish between library and lang UB in assert_unsafe_precondition

As described in https://github.com/rust-lang/rust/pull/121583#issuecomment-1963168186, `assert_unsafe_precondition` now explicitly distinguishes between language UB (conditions we explicitly optimize on) and library UB (things we document you shouldn't do, and maybe some library internals assume you don't do).

`debug_assert_nounwind` was originally added to avoid the "only at runtime" aspect of `assert_unsafe_precondition`. Since then the difference between the macros has gotten muddied. This totally revamps the situation.

Now _all_ preconditions shall be checked with `assert_unsafe_precondition`. If you have a precondition that's only checkable at runtime, do a `const_eval_select` hack, as done in this PR.

r? RalfJung
2024-03-10 01:23:54 +00:00
Christopher B. Speir
ed6e6291dc Fix duplicate lint emission from [manual_retain] 2024-03-09 18:58:40 -06:00
Guillaume Gomez
98ac5f1e8c Rename into manual_unwrap_or_default 2024-03-10 01:23:28 +01:00
Guillaume Gomez
b0f358fd3c Update ui test 2024-03-10 01:23:28 +01:00
Guillaume Gomez
fadb254073 Add new ui test for match_option_and_default 2024-03-10 01:15:23 +01:00
Guillaume Gomez
1abf4418f8 Add new match_option_and_default lint 2024-03-10 01:15:22 +01:00
kcz
a92037fce8
[option_option]: Fix duplicate diagnostics 2024-03-09 18:08:40 -05:00
y21
5b1f95cbbb apply review suggestions 2024-03-09 23:28:48 +01:00
bors
7ee75f896f Auto merge of #12447 - MarcusGrass:mg/fix-12438-regression, r=y21
Fix #12438 std_instead_of_core regression

Fixes #12438.

Boy-scouting removed two paths that checks for duplication since I thought they were unused. However, that's just because I didn't spot it in the diff.

I installed [difftastic](https://github.com/Wilfred/difftastic) and ran it on the old one:

![image](https://github.com/rust-lang/rust-clippy/assets/34198073/5c51276c-055a-49a3-9425-6f7da0590fb0)

And the new one (fixed):

![image](https://github.com/rust-lang/rust-clippy/assets/34198073/6e10f29c-6d6b-4f64-893f-de526424f1cd)

New one (stderr):
![image](https://github.com/rust-lang/rust-clippy/assets/34198073/c4c07776-ee0f-47ba-996f-6b632de47c81)

Good teachings for the future when inspecting diffs with a lot of line changes, should've thought of that before, sorry for the trouble!

changelog: [`std_instead_of_core`] Fix false positive for crates that are in `std` but not `core`
2024-03-09 21:23:38 +00:00
bors
d8a9068e83 Auto merge of #12449 - Jacherr:issue-6439, r=llogiq
Add new lint `zero_repeat_side_effects`

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

Adds a new `suspicious` lint zero_repeat_side_effects. This lint warns the user when initializing an array or `Vec` using the `Repeat` syntax, i.e., `[x; y]`. If `x` is an `Expr::Call/MethodCall` or contains an `Expr::Call/MethodCall` and `y` is zero, then there is a chance that the internal call can produce side effects, such as printing to console, which is not very obvious.

This lint warns against this and instead suggests to separate out the function call and the array/Vec initialization.

changelog: Add new lint `zero_repeat_side_effects`
2024-03-09 20:15:02 +00:00
Jacherr
0c82fd01c7 fix example code 2024-03-09 19:04:35 +00:00
Jacherr
0e59259add add new lint zero_repeat_side_effects 2024-03-09 18:53:14 +00:00
y21
eb5ce85932 mention span_lint_hir in span_lint and add a reason to disallowed_methods 2024-03-09 19:40:39 +01:00
MarcusGrass
b44ab66156
Fix #12438 false positive regression 2024-03-09 18:37:18 +01:00
bors
c173ea64b7 Auto merge of #12446 - y21:check_fn_span_lint, r=xFrednet
use `span_lint_hir` instead of `span_lint` in more lints

Decided to grep for `check_(fn|block)` and look where `span_lint` is used, since some lints lint will then emit a lint on a statement or expression in that function, which would use the wrong lint level attributes

The `LintContext` keeps track of the last entered HIR node that had any attributes, and uses those (and its parents) for figuring out the lint level when a lint is emitted

However, this only works when we actually emit a lint at the same node as the `check_*` function we are in.
If we're in `check_fn` and we emit a lint on a statement within that function, then there is no way to allow the lint only for that one statement (if `span_lint` is used). It would only count allow attributes on the function

changelog: [`needless_return`]: [`useless_let_if_seq`]: [`mut_mut`]: [`read_zero_byte_vec`]: [`unused_io_amount`]: [`unused_peekable`]: now respects `#[allow]` attributes on the affected statement instead of only on the enclosing block or function
2024-03-09 17:01:03 +00:00
y21
ced8bc5b8f use span_lint_hir instead of span_lint in more lints 2024-03-09 17:43:04 +01:00
bors
b2f9c4cbc7 Auto merge of #12442 - cookie-s:fix-mutmut-duplicate-diags, r=y21
[`mut_mut`]: Fix duplicate diags

Relates to #12379

The `mut_mut` lint produced two diagnostics for each `mut mut` pattern in `ty` inside  `block`s because `MutVisitor::visit_ty` was called from `MutMut::check_ty` and  `MutMut::check_block` independently. This PR fixes the issue.

---

changelog: [`mut_mut`]: Fix duplicate diagnostics
2024-03-09 13:13:28 +00:00
bors
099e2c0033 Auto merge of #12443 - cookie-s:noeffectreoplace-fix-dup-diags, r=Alexendoo
[`no_effect_replace`]: Fix duplicate diagnostics

Relates to #12379

Fixes `no_effect_replace` duplicate diagnostics

---

changelog: [`no_effect_replace`]: Fix duplicate diagnostics
2024-03-09 13:02:47 +00:00
y21
fa4e3aac19 add documentation to the span_lint_hir functions 2024-03-09 13:06:40 +01:00
Guillaume Gomez
ae52a9d428 Update ui tests 2024-03-09 12:43:19 +01:00
Guillaume Gomez
d57d001543 Update cargo dev update_lints command to fix new warning emitted by duplicated_attributes 2024-03-09 12:43:19 +01:00
Guillaume Gomez
749e225cd6 Add ui test for new duplicated_attributes lint 2024-03-09 12:43:18 +01:00
Guillaume Gomez
f34804d807 Add new duplicated_attributes lint 2024-03-09 12:43:18 +01:00
bors
453242cbde Auto merge of #12310 - samueltardieu:issue-12307, r=xFrednet
New lint `const_is_empty`

This lint detects calls to `.is_empty()` on an entity initialized from a string literal and flag them as suspicious. To avoid triggering on macros called from generated code, it checks that the `.is_empty()` receiver, the call itself and the initialization come from the same context.

Fixes #12307

changelog: [`const_is_empty`]: new lint
2024-03-09 09:56:37 +00:00
The Miri Cronjob Bot
4d15a7553f Merge from rustc 2024-03-09 05:01:38 +00:00
Christopher B. Speir
8d78cd17e1 Fix duplicate lint emission from [else_if_without_else] 2024-03-08 22:36:17 -06:00
kcz
7473f0522c
[no_effect_replace]: Fix duplicate diagnostics 2024-03-08 23:05:16 -05:00
bors
689040738a Auto merge of #118879 - Nadrieril:lint-range-gap, r=estebank
Lint singleton gaps after exclusive ranges

In the discussion to stabilize exclusive range patterns (https://github.com/rust-lang/rust/issues/37854), it has often come up that they're likely to cause off-by-one mistakes. We already have the `overlapping_range_endpoints` lint, so I [proposed](https://github.com/rust-lang/rust/issues/37854#issuecomment-1845580712) a lint to catch the complementary mistake.

This PR adds a new `non_contiguous_range_endpoints` lint that catches likely off-by-one errors with exclusive range patterns. Here's the idea (see the test file for more examples):
```rust
match x {
    0..10 => ..., // WARN: this range doesn't match `10_u8` because `..` is an exclusive range
    11..20 => ..., // this could appear to continue range `0_u8..10_u8`, but `10_u8` isn't matched by either of them
    _ => ...,
}
// help: use an inclusive range instead: `0_u8..=10_u8`
```

More precisely: for any exclusive range `lo..hi`, if `hi+1` is matched by another range but `hi` isn't, we suggest writing an inclusive range `lo..=hi` instead. We also catch `lo..T::MAX`.
2024-03-09 03:49:01 +00:00
kcz
4e95b4a026
[mut_mut]: Fix duplicate diags 2024-03-08 22:39:36 -05:00
Nadrieril
2dd085fb00 Allow lint where we don't care 2024-03-09 01:13:42 +01:00
Ben Kimock
158b70a1ed Distinguish between library and lang UB in assert_unsafe_precondition 2024-03-08 18:53:58 -05:00
Matthias Krüger
1bd73835d3 Rollup merge of #121194 - beetrees:rustc-raw-args, r=petrochenkov
Refactor pre-getopts command line argument handling

Rebased version of #111658. I've also fixed the Windows CI failure (although I don't have access to Windows to test it myself).
2024-03-08 13:22:25 +01:00
bors
0b4b684b46 Auto merge of #12433 - J-ZhengLi:issue12197, r=dswij
fix [`missing_docs_in_private_items`] on some proc macros

fixes: #12197

---

changelog: [`missing_docs_in_private_items`] support manually search for docs as fallback method
2024-03-08 11:05:50 +00:00