diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index 002ee599400..462f0947338 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -489,7 +489,7 @@ pub enum BuiltinLintDiagnostics { UnknownCrateTypes(Span, String, String), UnusedImports(String, Vec<(Span, String)>), NestedImplTrait { outer_impl_trait_span: Span, inner_impl_trait_span: Span }, - RedundantImport(Vec, ast::Ident), + RedundantImport(Vec<(Span, bool)>, ast::Ident), } impl BuiltinLintDiagnostics { @@ -587,10 +587,11 @@ impl BuiltinLintDiagnostics { db.span_label(inner_impl_trait_span, "nested `impl Trait` here"); } BuiltinLintDiagnostics::RedundantImport(spans, ident) => { - for span in spans { + for (span, is_imported) in spans { + let introduced = if is_imported { "imported" } else { "defined" }; db.span_label( span, - format!("the item `{}` was already imported here", ident) + format!("the item `{}` was {} here", ident, introduced) ); } } diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index cd018d8eb9e..eacbf81347a 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -1295,7 +1295,8 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> { ) { Ok(other_binding) => { is_redundant[ns] = Some(binding.def() == other_binding.def()); - redundant_span[ns] = Some(other_binding.span); + redundant_span[ns] = + Some((other_binding.span, other_binding.is_import())); } Err(_) => is_redundant[ns] = Some(false) } diff --git a/src/test/ui/lint/use-redundant.stderr b/src/test/ui/lint/use-redundant.stderr index c843ed160df..b5000b22a1d 100644 --- a/src/test/ui/lint/use-redundant.stderr +++ b/src/test/ui/lint/use-redundant.stderr @@ -2,7 +2,7 @@ warning: the item `Bar` is imported redundantly --> $DIR/use-redundant.rs:14:9 | LL | use crate::foo::Bar; - | --------------- the item `Bar` was already imported here + | --------------- the item `Bar` was imported here ... LL | use crate::foo::Bar; | ^^^^^^^^^^^^^^^