disable missing_copy_implementations lint on non_exhaustive types
use is_variant_list_non_exhaustive/is_field_list_non_exhaustive remove unused tcx inline non_exhaustive def/variant check
This commit is contained in:
parent
eea26141ec
commit
a8e7e79101
2 changed files with 30 additions and 0 deletions
|
@ -677,6 +677,11 @@ impl<'tcx> LateLintPass<'tcx> for MissingCopyImplementations {
|
||||||
if type_implements_negative_copy_modulo_regions(cx.tcx, ty, param_env) {
|
if type_implements_negative_copy_modulo_regions(cx.tcx, ty, param_env) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if def.is_variant_list_non_exhaustive()
|
||||||
|
|| def.variants().iter().any(|variant| variant.is_field_list_non_exhaustive())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// We shouldn't recommend implementing `Copy` on stateful things,
|
// We shouldn't recommend implementing `Copy` on stateful things,
|
||||||
// such as iterators.
|
// such as iterators.
|
||||||
|
|
25
tests/ui/lint/missing-copy-implementations-non-exhaustive.rs
Normal file
25
tests/ui/lint/missing-copy-implementations-non-exhaustive.rs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
// Test for issue #116766.
|
||||||
|
// Ensure that we don't suggest impl'ing `Copy` for a type if it or at least one
|
||||||
|
// of it's variants are marked as `non_exhaustive`.
|
||||||
|
|
||||||
|
// check-pass
|
||||||
|
|
||||||
|
#![deny(missing_copy_implementations)]
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum MyEnum {
|
||||||
|
A,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub struct MyStruct {
|
||||||
|
foo: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum MyEnum2 {
|
||||||
|
#[non_exhaustive]
|
||||||
|
A,
|
||||||
|
B,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue