X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=clippy_lints%2Fsrc%2Flarge_enum_variant.rs;h=f166748d86b81a021822759440e66456206309b5;hb=6c2748211565773c297560f2edcd762565f1933a;hp=7ac83739be67bd6bb9286db8c705d4a7d0fec3ba;hpb=19183a6af530d50ac6a6670cb9a1dae81db24f27;p=rust.git diff --git a/clippy_lints/src/large_enum_variant.rs b/clippy_lints/src/large_enum_variant.rs index 7ac83739be6..f166748d86b 100644 --- a/clippy_lints/src/large_enum_variant.rs +++ b/clippy_lints/src/large_enum_variant.rs @@ -1,9 +1,11 @@ //! lint when there is a large size difference between variants on an enum -use crate::utils::{snippet_opt, span_lint_and_then}; +use clippy_utils::diagnostics::span_lint_and_then; +use clippy_utils::source::snippet_opt; use rustc_errors::Applicability; use rustc_hir::{Item, ItemKind, VariantData}; use rustc_lint::{LateContext, LateLintPass}; +use rustc_middle::lint::in_external_macro; use rustc_session::{declare_tool_lint, impl_lint_pass}; use rustc_target::abi::LayoutOf; @@ -56,11 +58,13 @@ pub fn new(maximum_size_difference_allowed: u64) -> Self { impl_lint_pass!(LargeEnumVariant => [LARGE_ENUM_VARIANT]); -impl<'a, 'tcx> LateLintPass<'a, 'tcx> for LargeEnumVariant { - fn check_item(&mut self, cx: &LateContext<'_, '_>, item: &Item<'_>) { - let did = cx.tcx.hir().local_def_id(item.hir_id); +impl<'tcx> LateLintPass<'tcx> for LargeEnumVariant { + fn check_item(&mut self, cx: &LateContext<'_>, item: &Item<'_>) { + if in_external_macro(cx.tcx.sess, item.span) { + return; + } if let ItemKind::Enum(ref def, _) = item.kind { - let ty = cx.tcx.type_of(did); + let ty = cx.tcx.type_of(item.def_id); let adt = ty.ty_adt_def().expect("already checked whether this is an enum"); let mut largest_variant: Option<(_, _)> = None; @@ -98,24 +102,24 @@ fn check_item(&mut self, cx: &LateContext<'_, '_>, item: &Item<'_>) { LARGE_ENUM_VARIANT, def.variants[i].span, "large size difference between variants", - |db| { - db.span_label( + |diag| { + diag.span_label( def.variants[(largest.1).0].span, &format!("this variant is {} bytes", largest.0), ); - db.span_note( + diag.span_note( def.variants[(second.1).0].span, &format!("and the second-largest variant is {} bytes:", second.0), ); if variant.fields.len() == 1 { let span = match def.variants[i].data { - VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => { + VariantData::Struct(fields, ..) | VariantData::Tuple(fields, ..) => { fields[0].ty.span }, VariantData::Unit(..) => unreachable!(), }; if let Some(snip) = snippet_opt(cx, span) { - db.span_suggestion( + diag.span_suggestion( span, help_text, format!("Box<{}>", snip), @@ -124,7 +128,7 @@ fn check_item(&mut self, cx: &LateContext<'_, '_>, item: &Item<'_>) { return; } } - db.span_help(def.variants[i].span, help_text); + diag.span_help(def.variants[i].span, help_text); }, ); }