11use std:: iter;
22
3- use hir:: { HasSource , HirFileIdExt , ModuleSource } ;
3+ use hir:: { HirFileIdExt , ModuleSource } ;
44use ide_db:: {
55 assists:: { AssistId , AssistKind } ,
66 base_db:: FileId ,
77 defs:: { Definition , NameClass , NameRefClass } ,
8+ helpers:: item_name,
9+ items_locator:: items_with_name,
810 search:: { FileReference , SearchScope } ,
911 FxHashMap , FxHashSet ,
1012} ;
@@ -433,7 +435,7 @@ impl Module {
433435 fn process_def_in_sel (
434436 & mut self ,
435437 def : Definition ,
436- node_syntax : & SyntaxNode ,
438+ use_node : & SyntaxNode ,
437439 curr_parent_module : & Option < ast:: Module > ,
438440 ctx : & AssistContext < ' _ > ,
439441 ) -> Option < TextRange > {
@@ -491,7 +493,7 @@ impl Module {
491493
492494 //If use_stmt exists, find the use_tree_str, reconstruct it inside new module
493495 //If not, insert a use stmt with super and the given nameref
494- match self . process_use_stmt_for_import_resolve ( use_stmt, node_syntax ) {
496+ match self . process_use_stmt_for_import_resolve ( use_stmt, use_node ) {
495497 Some ( ( use_tree_str, _) ) => use_tree_str_opt = Some ( use_tree_str) ,
496498 None if def_in_mod && def_out_sel => {
497499 //Considered only after use_stmt is not present
@@ -502,15 +504,15 @@ impl Module {
502504 // mod -> ust_stmt transversal
503505 // true | false -> super import insertion
504506 // true | true -> super import insertion
505- self . make_use_stmt_of_node_with_super ( node_syntax ) ;
507+ self . make_use_stmt_of_node_with_super ( use_node ) ;
506508 }
507509 None => { }
508510 }
509511 } else if exists_inside_sel && !exists_outside_sel {
510512 //Changes to be made inside new module, and remove import from outside
511513
512514 if let Some ( ( mut use_tree_str, text_range_opt) ) =
513- self . process_use_stmt_for_import_resolve ( use_stmt, node_syntax )
515+ self . process_use_stmt_for_import_resolve ( use_stmt, use_node )
514516 {
515517 if let Some ( text_range) = text_range_opt {
516518 import_path_to_be_removed = Some ( text_range) ;
@@ -530,7 +532,7 @@ impl Module {
530532
531533 use_tree_str_opt = Some ( use_tree_str) ;
532534 } else if def_in_mod && def_out_sel {
533- self . make_use_stmt_of_node_with_super ( node_syntax ) ;
535+ self . make_use_stmt_of_node_with_super ( use_node ) ;
534536 }
535537 }
536538
@@ -550,7 +552,20 @@ impl Module {
550552 make:: use_ ( None , make:: use_tree ( make:: join_paths ( use_tree_str) , None , None , false ) ) ;
551553 let item = ast:: Item :: from ( use_) ;
552554
553- if def_out_sel {
555+ let is_item = match def {
556+ Definition :: Macro ( _) => true ,
557+ Definition :: Module ( _) => true ,
558+ Definition :: Function ( _) => true ,
559+ Definition :: Adt ( _) => true ,
560+ Definition :: Const ( _) => true ,
561+ Definition :: Static ( _) => true ,
562+ Definition :: Trait ( _) => true ,
563+ Definition :: TraitAlias ( _) => true ,
564+ Definition :: TypeAlias ( _) => true ,
565+ _ => false ,
566+ } ;
567+
568+ if def_out_sel || !is_item {
554569 self . use_items . insert ( 0 , item. clone ( ) ) ;
555570 }
556571 }
0 commit comments