rust-clippy icon indicating copy to clipboard operation
rust-clippy copied to clipboard

FP derive_partial_eq_without_eq, breaks code

Open matthiaskrgr opened this issue 2 years ago • 0 comments

Summary

.

Lint Name

derive_partial_eq_without_eq

Reproducer

I tried this code: Unfortunately I have no idea what is happening here :/

#![feature(decl_macro)]

#[derive(Copy, Clone, PartialEq, Debug)]
pub enum Field {
    RootCtxt,
    MacroCtxt,
}

#[rustfmt::skip]
macro x(
    $macro_name:ident,
    $macro2_name:ident,
    $type_name:ident,
    $field_name:ident,
    $const_name:ident
) {
    #[derive(Copy, Clone)]
    pub struct $type_name {
        pub field: Field,
        pub $field_name: Field,
    }

    pub const $const_name: $type_name =
        $type_name { field: Field::MacroCtxt, $field_name: Field::RootCtxt };

    #[macro_export]
    macro_rules! $macro_name {
        (check_fields_of $e:expr) => {{
            let e = $e;
            assert_eq!(e.field, Field::MacroCtxt);
            assert_eq!(e.$field_name, Field::RootCtxt);
        }};
        (check_fields) => {{
            assert_eq!($const_name.field, Field::MacroCtxt);
            assert_eq!($const_name.$field_name, Field::RootCtxt);
        }};
        (construct) => {
            $type_name { field: Field::MacroCtxt, $field_name: Field::RootCtxt }
        };
    }

    pub macro $macro2_name {
        (check_fields_of $e:expr) => {{
            let e = $e;
            assert_eq!(e.field, Field::MacroCtxt);
            assert_eq!(e.$field_name, Field::RootCtxt);
        }},
        (check_fields) => {{
            assert_eq!($const_name.field, Field::MacroCtxt);
            assert_eq!($const_name.$field_name, Field::RootCtxt);
        }},
        (construct) => {
            $type_name { field: Field::MacroCtxt, $field_name: Field::RootCtxt }
        }
    }
}

x!(test_fields, test_fields2, MyStruct, field, MY_CONST);

pub fn check_fields(s: MyStruct) {
    test_fields!(check_fields_of s);
}

pub fn main() {}

I saw this happen: cargo clippy --fix -- -Aclippy::all -Wclippy::derive_partial_eq_without_eq

    Checking clpy v0.1.0 (/tmp/clpy)
warning: failed to automatically apply fixes suggested by rustc to crate `clpy`

after fixes were automatically applied the compiler reported errors within these files:

  * src/main.rs

This likely indicates a bug in either rustc or cargo itself,
and we would appreciate a bug report! You're likely to see
a number of compiler warnings after this message which cargo
attempted to fix but failed. If you could open an issue at
https://github.com/rust-lang/rust/issues
quoting the full output of this command we'd be very appreciative!
Note that you may be able to make some more progress in the near-term
fixing code with the `--broken-code` flag

The following errors were reported:
error[E0609]: no field `field` on type `MyStruct`
  --> src/main.rs:30:26
   |
30 |             assert_eq!(e.field, Field::MacroCtxt);
   |                          ^^^^^ help: a field with a similar name exists: `field`
...
61 |     test_fields!(check_fields_of s);
   |     ------------------------------- in this macro invocation
   |
   = note: this error originates in the macro `test_fields` (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to previous error

For more information about this error, try `rustc --explain E0609`.
Original diagnostics will follow.

warning: you are deriving `PartialEq` and can implement `Eq`
 --> src/main.rs:3:23
  |
3 | #[derive(Copy, Clone, PartialEq, Debug)]
  |                       ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
  |
  = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
  = note: requested on the command line with `-W clippy::derive-partial-eq-without-eq`

warning: `clpy` (bin "clpy") generated 1 warning (run `cargo fix --bin "clpy"` to apply 1 suggestion)
warning: `clpy` (bin "clpy" test) generated 1 warning 

Version

rustc 1.67.0-nightly (c5d82ed7a 2022-11-19)
binary: rustc
commit-hash: c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b
commit-date: 2022-11-19
host: x86_64-unknown-linux-gnu
release: 1.67.0-nightly
LLVM version: 15.0.4

Additional Labels

No response

matthiaskrgr avatar Nov 20 '22 07:11 matthiaskrgr