diff options
| author | Maja Kądziołka <maya@compilercrim.es> | 2025-03-03 12:54:26 +0100 |
|---|---|---|
| committer | Maja Kądziołka <maya@compilercrim.es> | 2025-03-07 16:16:36 +0100 |
| commit | 10cf3cb945b413c0fb81cf13c4bf4db762ba5377 (patch) | |
| tree | a122add349a1643c05b645f8edd3330f5e5f46af | |
| parent | e5c1d1cb7ee727246a6d453f52b5707e264387d5 (diff) | |
| download | rust-10cf3cb945b413c0fb81cf13c4bf4db762ba5377.tar.gz rust-10cf3cb945b413c0fb81cf13c4bf4db762ba5377.zip | |
Add helper methods checking for "#[non_exhaustive] that's active"
A check for `#[non_exhaustive]` is often done in combination with checking whether the type is local to the crate, in a variety of ways. Create a helper method and standardize on it as the way to check for this.
| -rw-r--r-- | clippy_lints/src/default.rs | 2 | ||||
| -rw-r--r-- | clippy_lints/src/needless_update.rs | 5 | ||||
| -rw-r--r-- | clippy_lints/src/unneeded_struct_pattern.rs | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/clippy_lints/src/default.rs b/clippy_lints/src/default.rs index ffdd946aadb..886c325b355 100644 --- a/clippy_lints/src/default.rs +++ b/clippy_lints/src/default.rs @@ -134,7 +134,7 @@ impl<'tcx> LateLintPass<'tcx> for Default { && let ty::Adt(adt, args) = *binding_type.kind() && adt.is_struct() && let variant = adt.non_enum_variant() - && (adt.did().is_local() || !variant.is_field_list_non_exhaustive()) + && !variant.field_list_has_applicable_non_exhaustive() && let module_did = cx.tcx.parent_module(stmt.hir_id) && variant .fields diff --git a/clippy_lints/src/needless_update.rs b/clippy_lints/src/needless_update.rs index 0cba72bd2c6..cce0617ba39 100644 --- a/clippy_lints/src/needless_update.rs +++ b/clippy_lints/src/needless_update.rs @@ -54,8 +54,9 @@ impl<'tcx> LateLintPass<'tcx> for NeedlessUpdate { if let ExprKind::Struct(_, fields, StructTailExpr::Base(base)) = expr.kind { let ty = cx.typeck_results().expr_ty(expr); if let ty::Adt(def, _) = ty.kind() { - if fields.len() == def.non_enum_variant().fields.len() - && !def.variant(0_usize.into()).is_field_list_non_exhaustive() + let variant = def.non_enum_variant(); + if fields.len() == variant.fields.len() + && !variant.is_field_list_non_exhaustive() { span_lint( cx, diff --git a/clippy_lints/src/unneeded_struct_pattern.rs b/clippy_lints/src/unneeded_struct_pattern.rs index a74eab8b6ae..3326dea8c5d 100644 --- a/clippy_lints/src/unneeded_struct_pattern.rs +++ b/clippy_lints/src/unneeded_struct_pattern.rs @@ -51,7 +51,7 @@ impl LateLintPass<'_> for UnneededStructPattern { let variant = cx.tcx.adt_def(enum_did).variant_with_id(did); let has_only_fields_brackets = variant.ctor.is_some() && variant.fields.is_empty(); - let non_exhaustive_activated = !variant.def_id.is_local() && variant.is_field_list_non_exhaustive(); + let non_exhaustive_activated = variant.field_list_has_applicable_non_exhaustive(); if !has_only_fields_brackets || non_exhaustive_activated { return; } |
