@@ -281,7 +281,35 @@ impl ImportAssets {
281281 match & self . import_candidate {
282282 ImportCandidate :: Path ( path_candidate) => {
283283 path_applicable_imports ( sema, krate, path_candidate, mod_path, |item_to_import| {
284+ let import_def = match item_to_import {
285+ ItemInNs :: Types ( def) => def,
286+ ItemInNs :: Values ( def) => def,
287+ ItemInNs :: Macros ( def) => ModuleDef :: Macro ( def) ,
288+ } ;
289+ fn will_shadow ( db : & dyn HirDatabase , cur : ModuleDef , other : ModuleDef ) -> bool {
290+ match ( cur, other) {
291+ ( ModuleDef :: Module ( a) , ModuleDef :: Module ( b) ) => a. name ( db) == b. name ( db) ,
292+ ( ModuleDef :: Function ( a) , ModuleDef :: Function ( b) ) => a. name ( db) == b. name ( db) ,
293+ ( ModuleDef :: Adt ( a) , ModuleDef :: Adt ( b) ) => a. name ( db) == b. name ( db) ,
294+ ( ModuleDef :: Variant ( a) , ModuleDef :: Variant ( b) ) => a. name ( db) == b. name ( db) ,
295+ ( ModuleDef :: Variant ( a) , ModuleDef :: Function ( b) ) => a. name ( db) == b. name ( db) ,
296+ ( ModuleDef :: Const ( a) , ModuleDef :: Const ( b) ) => a. name ( db) == b. name ( db) ,
297+ ( ModuleDef :: Static ( a) , ModuleDef :: Static ( b) ) => a. name ( db) == b. name ( db) ,
298+ ( ModuleDef :: Trait ( a) , ModuleDef :: Trait ( b) ) => a. name ( db) == b. name ( db) ,
299+ ( ModuleDef :: TraitAlias ( a) , ModuleDef :: TraitAlias ( b) ) => a. name ( db) == b. name ( db) ,
300+ ( ModuleDef :: TypeAlias ( a) , ModuleDef :: TypeAlias ( b) ) => a. name ( db) == b. name ( db) ,
301+ ( ModuleDef :: Macro ( a) , ModuleDef :: Macro ( b) ) => a. name ( db) == b. name ( db) ,
302+ ( _, _) => false ,
303+ }
304+ }
305+
284306 !scope_definitions. contains ( & ScopeDef :: from ( item_to_import) )
307+ && scope_definitions. iter ( ) . find ( |& & scope_def| match scope_def {
308+ ScopeDef :: ModuleDef ( module_def) => {
309+ will_shadow ( sema. db , module_def, import_def)
310+ } ,
311+ _ => false
312+ } ) . is_none ( )
285313 } )
286314 }
287315 ImportCandidate :: TraitAssocItem ( trait_candidate)
0 commit comments