Skip to content

Uplift clippy::double_neg lint as double_negations #126604

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

Merged
merged 3 commits into from
Jan 27, 2025

Conversation

kadiwa4
Copy link
Contributor

@kadiwa4 kadiwa4 commented Jun 17, 2024

Warns about cases like this:

fn main() {
    let x = 1;
    let _b = --x; //~ WARN use of a double negation
}

The intent is to keep people from thinking that --x is a prefix decrement operator. ++x, x++ and x-- are invalid expressions and already have a helpful diagnostic.

I didn't add a machine-applicable suggestion to the lint because it's not entirely clear what the programmer was trying to achieve with the --x operation. The code that triggers the lint should always be reviewed manually.

Closes #82987

@rustbot
Copy link
Collaborator

rustbot commented Jun 17, 2024

r? @nnethercote

rustbot has assigned @nnethercote.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 17, 2024
@rustbot
Copy link
Collaborator

rustbot commented Jun 17, 2024

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

@rust-log-analyzer

This comment has been minimized.

@kadiwa4 kadiwa4 force-pushed the uplift_double_negation branch from af85271 to a745a8d Compare June 17, 2024 18:22
@kadiwa4
Copy link
Contributor Author

kadiwa4 commented Jun 18, 2024

@rustbot author

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 18, 2024
@compiler-errors compiler-errors added T-lang Relevant to the language team, which will review and decide on the PR/issue. I-lang-nominated Nominated for discussion during a lang team meeting. and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 18, 2024
@nnethercote
Copy link
Contributor

This needs T-lang approval. The appropriate labels have been applied to summon them.

@bors
Copy link
Collaborator

bors commented Jun 30, 2024

☔ The latest upstream changes (presumably #127174) made this pull request unmergeable. Please resolve the merge conflicts.

@kadiwa4 kadiwa4 force-pushed the uplift_double_negation branch from a745a8d to 8f3387c Compare September 1, 2024 17:25
@kadiwa4 kadiwa4 changed the title Uplift clippy::double_neg lint as double_negation Uplift clippy::double_neg lint as double_negations Sep 1, 2024
@rust-log-analyzer

This comment has been minimized.

@kadiwa4 kadiwa4 force-pushed the uplift_double_negation branch from 8f3387c to 9862f05 Compare September 1, 2024 18:01
@kadiwa4
Copy link
Contributor Author

kadiwa4 commented Sep 1, 2024

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Sep 1, 2024
@nnethercote
Copy link
Contributor

Still waiting on T-lang, AFAICT.

@kadiwa4
Copy link
Contributor Author

kadiwa4 commented Sep 30, 2024

@rustbot label: -S-waiting-on-review +S-waiting-on-team

@rustbot rustbot added S-waiting-on-team Status: Awaiting decision from the relevant subteam (see the T-<team> label). and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 30, 2024
@bors
Copy link
Collaborator

bors commented Oct 29, 2024

☔ The latest upstream changes (presumably #128985) made this pull request unmergeable. Please resolve the merge conflicts.

@kadiwa4 kadiwa4 force-pushed the uplift_double_negation branch from 9862f05 to beb1dd2 Compare October 29, 2024 19:54
@bors
Copy link
Collaborator

bors commented Jan 26, 2025

☔ The latest upstream changes (presumably #136070) made this pull request unmergeable. Please resolve the merge conflicts.

@kadiwa4 kadiwa4 force-pushed the uplift_double_negation branch from d3cbf72 to c1dcbeb Compare January 26, 2025 11:18
@kadiwa4
Copy link
Contributor Author

kadiwa4 commented Jan 26, 2025

@rustbot label: -S-waiting-on-team +S-waiting-on-review -I-lang-nominated

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-team Status: Awaiting decision from the relevant subteam (see the T-<team> label). I-lang-nominated Nominated for discussion during a lang team meeting. labels Jan 26, 2025
@nnethercote
Copy link
Contributor

Updated code looks fine to me. I think/hope this has gone through all the appropriate hoops and is ready to be merged.

@bors r+

@bors
Copy link
Collaborator

bors commented Jan 26, 2025

📌 Commit c1dcbeb has been approved by nnethercote

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 26, 2025
bors added a commit to rust-lang-ci/rust that referenced this pull request Jan 27, 2025
Rollup of 8 pull requests

Successful merges:

 - rust-lang#126604 (Uplift `clippy::double_neg` lint as `double_negations`)
 - rust-lang#135158 (Add `TooGeneric` variant to `LayoutError` and emit `Unknown`)
 - rust-lang#135635 (Move `std::io::pipe` code into its own file)
 - rust-lang#136072 (add two old crash tests)
 - rust-lang#136079 (compiler_fence: fix example)
 - rust-lang#136091 (Add some tracing to core bootstrap logic)
 - rust-lang#136097 (rustc_ast: replace some len-checks + indexing with slice patterns etc.)
 - rust-lang#136101 (triagebot: set myself on vacation)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 3c58b2f into rust-lang:master Jan 27, 2025
6 checks passed
@rustbot rustbot added this to the 1.86.0 milestone Jan 27, 2025
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Jan 27, 2025
Rollup merge of rust-lang#126604 - kadiwa4:uplift_double_negation, r=nnethercote

Uplift `clippy::double_neg` lint as `double_negations`

Warns about cases like this:
```rust
fn main() {
    let x = 1;
    let _b = --x; //~ WARN use of a double negation
}
```

The intent is to keep people from thinking that `--x` is a prefix decrement operator. `++x`, `x++` and `x--` are invalid expressions and already have a helpful diagnostic.

I didn't add a machine-applicable suggestion to the lint because it's not entirely clear what the programmer was trying to achieve with the `--x` operation. The code that triggers the lint should always be reviewed manually.

Closes rust-lang#82987
@kadiwa4 kadiwa4 deleted the uplift_double_negation branch January 27, 2025 09:43
bors pushed a commit to rust-lang-ci/rust that referenced this pull request Jan 28, 2025
…nnethercote

Uplift `clippy::double_neg` lint as `double_negations`

Warns about cases like this:
```rust
fn main() {
    let x = 1;
    let _b = --x; //~ WARN use of a double negation
}
```

The intent is to keep people from thinking that `--x` is a prefix decrement operator. `++x`, `x++` and `x--` are invalid expressions and already have a helpful diagnostic.

I didn't add a machine-applicable suggestion to the lint because it's not entirely clear what the programmer was trying to achieve with the `--x` operation. The code that triggers the lint should always be reviewed manually.

Closes rust-lang#82987
@fmease
Copy link
Member

fmease commented Feb 2, 2025

@bors r- ('fixing' desync)

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Feb 2, 2025
github-actions bot pushed a commit to tautschnig/verify-rust-std that referenced this pull request Mar 11, 2025
Rollup of 8 pull requests

Successful merges:

 - rust-lang#126604 (Uplift `clippy::double_neg` lint as `double_negations`)
 - rust-lang#135158 (Add `TooGeneric` variant to `LayoutError` and emit `Unknown`)
 - rust-lang#135635 (Move `std::io::pipe` code into its own file)
 - rust-lang#136072 (add two old crash tests)
 - rust-lang#136079 (compiler_fence: fix example)
 - rust-lang#136091 (Add some tracing to core bootstrap logic)
 - rust-lang#136097 (rustc_ast: replace some len-checks + indexing with slice patterns etc.)
 - rust-lang#136101 (triagebot: set myself on vacation)

r? `@ghost`
`@rustbot` modify labels: rollup
@jieyouxu jieyouxu added A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. L-double_negations Lint: double_negations labels Mar 22, 2025
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Apr 9, 2025
Upstream changes relative to 1.85.1:

Version 1.86.0 (2025-04-03)
==========================

Language
--------
- [Stabilize upcasting trait objects to supertraits.]
  (rust-lang/rust#134367)
- [Allow safe functions to be marked with the `#[target_feature]` attribute.]
  (rust-lang/rust#134090)
- [The `missing_abi` lint now warns-by-default.]
  (rust-lang/rust#132397)
- Rust now lints about double negations, to catch cases that might
  have intended to be a prefix decrement operator (`--x`) as written
  in other languages. This was previously a clippy lint,
  `clippy::double_neg`, and is [now available directly in Rust as
  `double_negations`.]
  (rust-lang/rust#126604)
- [More pointers are now detected as definitely not-null based on
  their alignment in const eval.]
  (rust-lang/rust#133700)
- [Empty `repr()` attribute applied to invalid items are now
  correctly rejected.]
  (rust-lang/rust#133925)
- [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer
  accepted in more places than intended.]
  (rust-lang/rust#134276)

Compiler
--------
- [Debug-assert that raw pointers are non-null on access.]
  (rust-lang/rust#134424)
- [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2`
  to match Cargo's defaults.]
  (rust-lang/rust#135439)
- [Fix emission of `overflowing_literals` under certain macro environments.]
  (rust-lang/rust#136393)

Platform Support
----------------
- [Replace `i686-unknown-redox` target with `i586-unknown-redox`.]
  (rust-lang/rust#136698)
- [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.]
  (rust-lang/rust#136700)
- New tier 3 targets:
  - [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`]
    (rust-lang/rust#133631).
    For supporting Neutrino QNX 7.1 with `io-socket` network stack.
  - [`{aarch64-unknown,x86_64-pc}-nto-qnx800`]
    (rust-lang/rust#133631).
    For supporting Neutrino QNX 8.0 (`no_std`-only).
  - [`{x86_64,i686}-win7-windows-gnu`]
    (rust-lang/rust#134609).
    Intended for backwards compatibility with Windows 7.
    `{x86_64,i686}-win7-windows-msvc` are the Windows MSVC counterparts
    that already exist as Tier 3 targets.
  - [`amdgcn-amd-amdhsa`](rust-lang/rust#134740).
  - [`x86_64-pc-cygwin`](rust-lang/rust#134999).
  - [`{mips,mipsel}-mti-none-elf`]
    (rust-lang/rust#135074).
    Initial bare-metal support.
  - [`m68k-unknown-none-elf`](rust-lang/rust#135085).
  - [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and
    `thumbv7a-nuttx-{eabi,eabihf}`]
    (rust-lang/rust#135757).

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

Libraries
---------
- The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes:
  &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from
  an opaque struct to an enum]
  (rust-lang/rust#134143), allowing users
  to examine why the conversion failed.
- [Remove `RustcDecodable` and `RustcEncodable`.]
  (rust-lang/rust#134272)
- [Deprecate libtest's `--logfile` option.]
  (rust-lang/rust#134283)
- [On recent versions of Windows, `std::fs::remove_file` will now
  remove read-only files.]
  (rust-lang/rust#134679)

Stabilized APIs
---------------

- [`{float}::next_down`]
  (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down)
- [`{float}::next_up`]
  (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up)
- [`<[_]>::get_disjoint_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut)
- [`<[_]>::get_disjoint_unchecked_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut)
- [`slice::GetDisjointMutError`]
  (https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html)
- [`HashMap::get_disjoint_mut`]
  (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut)
- [`HashMap::get_disjoint_unchecked_mut`]
  (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut)
- [`NonZero::count_ones`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones)
- [`Vec::pop_if`]
  (https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if)
- [`sync::Once::wait`]
  (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait)
- [`sync::Once::wait_force`]
  (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force)
- [`sync::OnceLock::wait`]
  (https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)

These APIs are now stable in const contexts:

- [`hint::black_box`]
  (https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`io::Cursor::get_mut`]
  (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut)
- [`io::Cursor::set_position`]
  (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position)
- [`str::is_char_boundary`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary)
- [`str::split_at`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at)
- [`str::split_at_checked`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked)
- [`str::split_at_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut)
- [`str::split_at_mut_checked`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)

Cargo
-----
- [When merging, replace rather than combine configuration keys
  that refer to a program path and its arguments.]
  (rust-lang/cargo#15066)
- [Error if both `--package` and `--workspace` are passed but the
  requested package is missing.]
  (rust-lang/cargo#15071) This was previously
  silently ignored, which was considered a bug since missing packages
  should be reported.
- [Deprecate the token argument in `cargo login` to avoid shell history leaks.]
  (rust-lang/cargo#15057)
- [Simplify the implementation of `SourceID` comparisons.]
  (rust-lang/cargo#14980) This may
  potentially change behavior if the canonicalized URL compares
  differently in alternative registries.

Rustdoc
-----
- [Add a sans-serif font setting.]
  (rust-lang/rust#133636)

Compatibility Notes
-------------------
- [The `wasm_c_abi` future compatibility warning is now a hard error.]
  (rust-lang/rust#133951)
  Users of `wasm-bindgen` should upgrade to at least version 0.2.89,
  otherwise compilation will fail.
- [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.]
  (rust-lang/rust#134300)
- [The future incompatibility lint `cenum_impl_drop_cast` has been
  made into a hard error.]
  (rust-lang/rust#135964) This means it is
  now an error to cast a field-less enum to an integer if the enum
  implements `Drop`.
- [SSE2 is now required for "i686" 32-bit x86 hard-float targets;
  disabling it causes a warning that will become a hard error
  eventually.]
  (rust-lang/rust#137037) To compile for
  pre-SSE2 32-bit x86, use a "i586" target instead.

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

- [Build the rustc on AArch64 Linux with ThinLTO + PGO.]
  (rust-lang/rust#133807)
  The ARM 64-bit compiler (AArch64) on Linux is now optimized with
  ThinLTO and PGO, similar to the optimizations we have already
  performed for the x86-64 compiler on Linux. This should make it
  up to 30% faster.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-easy-decision Issue: The decision needed by the team is conjectured to be easy; this does not imply nomination L-double_negations Lint: double_negations S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-lang Relevant to the language team, which will review and decide on the PR/issue. to-announce Announce this issue on triage meeting
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Uplift clippy::double_neg into rustc