@@ -896,6 +896,7 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
896
896
897
897
match target {
898
898
Some ( ref target) if target. shadowable != Shadowable :: Always => {
899
+ use syntax:: ast_map:: NodeItem ;
899
900
let ns_word = match namespace {
900
901
TypeNS => "type" ,
901
902
ValueNS => "value" ,
@@ -904,12 +905,21 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
904
905
"a {} named `{}` has already been imported \
905
906
in this module", ns_word,
906
907
& token:: get_name( name) ) ;
908
+ let use_id = import_resolution. id ( namespace) ;
909
+ if let NodeItem ( item) = self . resolver . ast_map . get ( use_id) {
910
+ // Assert item.node is ItemUse
911
+ // I feel like this should maybe mention the type,
912
+ // as it's otherwise a bit of work to look up...
913
+ // use syntax::ast::Item;
914
+ span_note ! ( self . resolver. session, item. span,
915
+ "Previously import of {} `{}` here" ,
916
+ ns_word, token:: get_name( name) ) ;
917
+ }
918
+ // Also showing the definition is reasonable?
907
919
if let Some ( sp) = target. bindings . span_for_namespace ( namespace) {
908
920
span_note ! ( self . resolver. session, sp,
909
- "first import of {} `{}` here" ,
921
+ "definition of {} `{}` here" ,
910
922
ns_word, token:: get_name( name) ) ;
911
- } else {
912
- span_note ! ( self . resolver. session, import_span, "I can't find where it was previously imported" ) ;
913
923
}
914
924
}
915
925
Some ( _) | None => { }
0 commit comments