Skip to content

Commit c2436d5

Browse files
committed
Check if E0530 is rustc_resolve::late::PatternSource::Match to emit suggestion
1 parent ea46e7a commit c2436d5

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

compiler/rustc_resolve/src/diagnostics.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use rustc_span::{BytePos, Span};
2828
use tracing::debug;
2929

3030
use crate::imports::{Import, ImportKind, ImportResolver};
31-
use crate::late::Rib;
31+
use crate::late::{PatternSource, Rib};
3232
use crate::path_names_to_string;
3333
use crate::{AmbiguityError, AmbiguityErrorMisc, AmbiguityKind, BindingError, Finalize};
3434
use crate::{HasGenericParams, MacroRulesScope, Module, ModuleKind, ModuleOrUniformRoot};
@@ -896,7 +896,7 @@ impl<'a> Resolver<'a> {
896896
err
897897
}
898898
ResolutionError::BindingShadowsSomethingUnacceptable {
899-
shadowing_binding_descr,
899+
shadowing_binding,
900900
name,
901901
participle,
902902
article,
@@ -909,15 +909,18 @@ impl<'a> Resolver<'a> {
909909
span,
910910
E0530,
911911
"{}s cannot shadow {}s",
912-
shadowing_binding_descr,
912+
shadowing_binding.descr(),
913913
shadowed_binding_descr,
914914
);
915915
err.span_label(
916916
span,
917917
format!("cannot be named the same as {} {}", article, shadowed_binding_descr),
918918
);
919-
match shadowed_binding {
920-
Res::Def(DefKind::Ctor(CtorOf::Variant | CtorOf::Struct, CtorKind::Fn), _) => {
919+
match (shadowing_binding, shadowed_binding) {
920+
(
921+
PatternSource::Match,
922+
Res::Def(DefKind::Ctor(CtorOf::Variant | CtorOf::Struct, CtorKind::Fn), _),
923+
) => {
921924
err.span_suggestion(
922925
span,
923926
"try specify the pattern arguments",

compiler/rustc_resolve/src/late.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct BindingInfo {
5050
}
5151

5252
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
53-
enum PatternSource {
53+
pub enum PatternSource {
5454
Match,
5555
Let,
5656
For,
@@ -64,7 +64,7 @@ enum IsRepeatExpr {
6464
}
6565

6666
impl PatternSource {
67-
fn descr(self) -> &'static str {
67+
pub fn descr(self) -> &'static str {
6868
match self {
6969
PatternSource::Match => "match binding",
7070
PatternSource::Let => "let binding",
@@ -2845,7 +2845,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
28452845
self.report_error(
28462846
ident.span,
28472847
ResolutionError::BindingShadowsSomethingUnacceptable {
2848-
shadowing_binding_descr: pat_src.descr(),
2848+
shadowing_binding: pat_src,
28492849
name: ident.name,
28502850
participle: if binding.is_import() { "imported" } else { "defined" },
28512851
article: binding.res().article(),
@@ -2861,7 +2861,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
28612861
self.report_error(
28622862
ident.span,
28632863
ResolutionError::BindingShadowsSomethingUnacceptable {
2864-
shadowing_binding_descr: pat_src.descr(),
2864+
shadowing_binding: pat_src,
28652865
name: ident.name,
28662866
participle: "defined",
28672867
article: res.article(),

compiler/rustc_resolve/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ use tracing::debug;
6161

6262
use diagnostics::{ImportSuggestion, LabelSuggestion, Suggestion};
6363
use imports::{Import, ImportKind, ImportResolver, NameResolution};
64-
use late::{HasGenericParams, PathSource};
64+
use late::{HasGenericParams, PathSource, PatternSource};
6565
use macros::{MacroRulesBinding, MacroRulesScope, MacroRulesScopeRef};
6666

6767
use crate::access_levels::AccessLevelsVisitor;
@@ -230,7 +230,7 @@ enum ResolutionError<'a> {
230230
),
231231
/// Error E0530: `X` bindings cannot shadow `Y`s.
232232
BindingShadowsSomethingUnacceptable {
233-
shadowing_binding_descr: &'static str,
233+
shadowing_binding: PatternSource,
234234
name: Symbol,
235235
participle: &'static str,
236236
article: &'static str,

0 commit comments

Comments
 (0)