Skip to content

Commit ea46e7a

Browse files
committed
Check if E0530 is tuple variant or tuple struct to emit suggestion
1 parent 51504db commit ea46e7a

File tree

3 files changed

+17
-11
lines changed

3 files changed

+17
-11
lines changed

compiler/rustc_resolve/src/diagnostics.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -900,9 +900,10 @@ impl<'a> Resolver<'a> {
900900
name,
901901
participle,
902902
article,
903-
shadowed_binding_descr,
903+
shadowed_binding,
904904
shadowed_binding_span,
905905
} => {
906+
let shadowed_binding_descr = shadowed_binding.descr();
906907
let mut err = struct_span_err!(
907908
self.session,
908909
span,
@@ -915,13 +916,18 @@ impl<'a> Resolver<'a> {
915916
span,
916917
format!("cannot be named the same as {} {}", article, shadowed_binding_descr),
917918
);
918-
err.span_suggestion(
919-
span,
920-
"try specify the pattern arguments",
921-
format!("{}(..)", name),
922-
Applicability::Unspecified,
923-
)
924-
.emit();
919+
match shadowed_binding {
920+
Res::Def(DefKind::Ctor(CtorOf::Variant | CtorOf::Struct, CtorKind::Fn), _) => {
921+
err.span_suggestion(
922+
span,
923+
"try specify the pattern arguments",
924+
format!("{}(..)", name),
925+
Applicability::Unspecified,
926+
)
927+
.emit();
928+
}
929+
_ => (),
930+
}
925931
let msg =
926932
format!("the {} `{}` is {} here", shadowed_binding_descr, name, participle);
927933
err.span_label(shadowed_binding_span, msg);

compiler/rustc_resolve/src/late.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2849,7 +2849,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
28492849
name: ident.name,
28502850
participle: if binding.is_import() { "imported" } else { "defined" },
28512851
article: binding.res().article(),
2852-
shadowed_binding_descr: binding.res().descr(),
2852+
shadowed_binding: binding.res(),
28532853
shadowed_binding_span: binding.span,
28542854
},
28552855
);
@@ -2865,7 +2865,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
28652865
name: ident.name,
28662866
participle: "defined",
28672867
article: res.article(),
2868-
shadowed_binding_descr: res.descr(),
2868+
shadowed_binding: res,
28692869
shadowed_binding_span: self.r.opt_span(def_id).expect("const parameter defined outside of local crate"),
28702870
}
28712871
);

compiler/rustc_resolve/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ enum ResolutionError<'a> {
234234
name: Symbol,
235235
participle: &'static str,
236236
article: &'static str,
237-
shadowed_binding_descr: &'static str,
237+
shadowed_binding: Res,
238238
shadowed_binding_span: Span,
239239
},
240240
/// Error E0128: generic parameters with a default cannot use forward-declared identifiers.

0 commit comments

Comments
 (0)