I have the following minimal example:
#![deny(missing_copy_implementations)]
#[derive(Clone)]
pub enum MyEnum {
A,
}
It does as I expect and gives the error:
error: type could implement `Copy`; consider adding `impl Copy`
--> src/lib.rs:4:1
|
4 | / pub enum MyEnum {
5 | | A,
6 | | }
| |_^
|
note: the lint level is defined here
--> src/lib.rs:1:9
|
1 | #![deny(missing_copy_implementations)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
However, since this enum is going to have more options added to it in the future, for example, B(String), I go ahead and label it as non_exhaustive:
#![deny(missing_copy_implementations)]
#[derive(Clone)]
#[non_exhaustive]
pub enum MyEnum {
A,
}
I would expect that this would disable the missing_copy_implementations lint in this case. This is because, otherwise adding a Copy implementation, e.g.:
#![deny(missing_copy_implementations)]
#[derive(Clone, Copy)]
#[non_exhaustive]
pub enum MyEnum {
A,
}
would then break when, in the future, I add my B variant:
#![deny(missing_copy_implementations)]
#[derive(Clone, Copy)]
#[non_exhaustive]
pub enum MyEnum {
A,
B(String),
}
with:
error[E0204]: the trait `Copy` cannot be implemented for this type
--> src/lib.rs:3:17
|
3 | #[derive(Clone, Copy)]
| ^^^^
...
7 | B(String),
| ------ this field does not implement `Copy`
|
In short, I would expect that adding non_exhaustive would disable the missing_copy_implementations lint as it's not future-proof, and the whole point of the non_exhaustive attribute is to say "that a type or variant may have more fields or variants added in the future".
I have the following minimal example:
It does as I expect and gives the error:
However, since this enum is going to have more options added to it in the future, for example,
B(String),I go ahead and label it asnon_exhaustive:I would expect that this would disable the
missing_copy_implementationslint in this case. This is because, otherwise adding aCopyimplementation, e.g.:would then break when, in the future, I add my
Bvariant:with:
In short, I would expect that adding
non_exhaustivewould disable themissing_copy_implementationslint as it's not future-proof, and the whole point of thenon_exhaustiveattribute is to say "that a type or variant may have more fields or variants added in the future".