diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 35155175886..7a5640b5cb6 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -900,9 +900,10 @@ impl<'a> Resolver<'a> { name, participle, article, - shadowed_binding_descr, + shadowed_binding, shadowed_binding_span, } => { + let shadowed_binding_descr = shadowed_binding.descr(); let mut err = struct_span_err!( self.session, span, @@ -915,13 +916,18 @@ impl<'a> Resolver<'a> { span, format!("cannot be named the same as {} {}", article, shadowed_binding_descr), ); - err.span_suggestion( - span, - "try specify the pattern arguments", - format!("{}(..)", name), - Applicability::Unspecified, - ) - .emit(); + match shadowed_binding { + Res::Def(DefKind::Ctor(CtorOf::Variant | CtorOf::Struct, CtorKind::Fn), _) => { + err.span_suggestion( + span, + "try specify the pattern arguments", + format!("{}(..)", name), + Applicability::Unspecified, + ) + .emit(); + } + _ => (), + } let msg = format!("the {} `{}` is {} here", shadowed_binding_descr, name, participle); err.span_label(shadowed_binding_span, msg); diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 640d13ea435..68d4db90194 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -2849,7 +2849,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> { name: ident.name, participle: if binding.is_import() { "imported" } else { "defined" }, article: binding.res().article(), - shadowed_binding_descr: binding.res().descr(), + shadowed_binding: binding.res(), shadowed_binding_span: binding.span, }, ); @@ -2865,7 +2865,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> { name: ident.name, participle: "defined", article: res.article(), - shadowed_binding_descr: res.descr(), + shadowed_binding: res, shadowed_binding_span: self.r.opt_span(def_id).expect("const parameter defined outside of local crate"), } ); diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index 28ef384f2c5..e7fa9e4e7d9 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -234,7 +234,7 @@ enum ResolutionError<'a> { name: Symbol, participle: &'static str, article: &'static str, - shadowed_binding_descr: &'static str, + shadowed_binding: Res, shadowed_binding_span: Span, }, /// Error E0128: generic parameters with a default cannot use forward-declared identifiers.