diff options
| author | Obei Sideg <obei.sideg@gmail.com> | 2022-07-08 14:01:30 +0300 |
|---|---|---|
| committer | Obei Sideg <obei.sideg@gmail.com> | 2022-07-08 14:06:50 +0300 |
| commit | c2436d54d0a4482fe073a8f40686471e89305a44 (patch) | |
| tree | 85b13698eedacb51513f364da412ad2be7425d0c | |
| parent | ea46e7a47e67c5ca9c147380d288d0c76451b5c2 (diff) | |
| download | rust-c2436d54d0a4482fe073a8f40686471e89305a44.tar.gz rust-c2436d54d0a4482fe073a8f40686471e89305a44.zip | |
Check if E0530 is `rustc_resolve::late::PatternSource::Match` to emit suggestion
| -rw-r--r-- | compiler/rustc_resolve/src/diagnostics.rs | 13 | ||||
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 8 | ||||
| -rw-r--r-- | compiler/rustc_resolve/src/lib.rs | 4 |
3 files changed, 14 insertions, 11 deletions
diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 7a5640b5cb6..58361146342 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -28,7 +28,7 @@ use rustc_span::{BytePos, Span}; use tracing::debug; use crate::imports::{Import, ImportKind, ImportResolver}; -use crate::late::Rib; +use crate::late::{PatternSource, Rib}; use crate::path_names_to_string; use crate::{AmbiguityError, AmbiguityErrorMisc, AmbiguityKind, BindingError, Finalize}; use crate::{HasGenericParams, MacroRulesScope, Module, ModuleKind, ModuleOrUniformRoot}; @@ -896,7 +896,7 @@ impl<'a> Resolver<'a> { err } ResolutionError::BindingShadowsSomethingUnacceptable { - shadowing_binding_descr, + shadowing_binding, name, participle, article, @@ -909,15 +909,18 @@ impl<'a> Resolver<'a> { span, E0530, "{}s cannot shadow {}s", - shadowing_binding_descr, + shadowing_binding.descr(), shadowed_binding_descr, ); err.span_label( span, format!("cannot be named the same as {} {}", article, shadowed_binding_descr), ); - match shadowed_binding { - Res::Def(DefKind::Ctor(CtorOf::Variant | CtorOf::Struct, CtorKind::Fn), _) => { + match (shadowing_binding, shadowed_binding) { + ( + PatternSource::Match, + Res::Def(DefKind::Ctor(CtorOf::Variant | CtorOf::Struct, CtorKind::Fn), _), + ) => { err.span_suggestion( span, "try specify the pattern arguments", diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 68d4db90194..f37acca3d9f 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -50,7 +50,7 @@ struct BindingInfo { } #[derive(Copy, Clone, PartialEq, Eq, Debug)] -enum PatternSource { +pub enum PatternSource { Match, Let, For, @@ -64,7 +64,7 @@ enum IsRepeatExpr { } impl PatternSource { - fn descr(self) -> &'static str { + pub fn descr(self) -> &'static str { match self { PatternSource::Match => "match binding", PatternSource::Let => "let binding", @@ -2845,7 +2845,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> { self.report_error( ident.span, ResolutionError::BindingShadowsSomethingUnacceptable { - shadowing_binding_descr: pat_src.descr(), + shadowing_binding: pat_src, name: ident.name, participle: if binding.is_import() { "imported" } else { "defined" }, article: binding.res().article(), @@ -2861,7 +2861,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> { self.report_error( ident.span, ResolutionError::BindingShadowsSomethingUnacceptable { - shadowing_binding_descr: pat_src.descr(), + shadowing_binding: pat_src, name: ident.name, participle: "defined", article: res.article(), diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index e7fa9e4e7d9..8968179c92e 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -61,7 +61,7 @@ use tracing::debug; use diagnostics::{ImportSuggestion, LabelSuggestion, Suggestion}; use imports::{Import, ImportKind, ImportResolver, NameResolution}; -use late::{HasGenericParams, PathSource}; +use late::{HasGenericParams, PathSource, PatternSource}; use macros::{MacroRulesBinding, MacroRulesScope, MacroRulesScopeRef}; use crate::access_levels::AccessLevelsVisitor; @@ -230,7 +230,7 @@ enum ResolutionError<'a> { ), /// Error E0530: `X` bindings cannot shadow `Y`s. BindingShadowsSomethingUnacceptable { - shadowing_binding_descr: &'static str, + shadowing_binding: PatternSource, name: Symbol, participle: &'static str, article: &'static str, |
