1
1
use std:: iter;
2
2
3
- use hir:: { HasSource , HirFileIdExt , ModuleSource } ;
3
+ use hir:: { HirFileIdExt , ModuleSource } ;
4
4
use ide_db:: {
5
5
assists:: { AssistId , AssistKind } ,
6
6
base_db:: FileId ,
7
7
defs:: { Definition , NameClass , NameRefClass } ,
8
+ helpers:: item_name,
9
+ items_locator:: items_with_name,
8
10
search:: { FileReference , SearchScope } ,
9
11
FxHashMap , FxHashSet ,
10
12
} ;
@@ -433,7 +435,7 @@ impl Module {
433
435
fn process_def_in_sel (
434
436
& mut self ,
435
437
def : Definition ,
436
- node_syntax : & SyntaxNode ,
438
+ use_node : & SyntaxNode ,
437
439
curr_parent_module : & Option < ast:: Module > ,
438
440
ctx : & AssistContext < ' _ > ,
439
441
) -> Option < TextRange > {
@@ -491,7 +493,7 @@ impl Module {
491
493
492
494
//If use_stmt exists, find the use_tree_str, reconstruct it inside new module
493
495
//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 ) {
495
497
Some ( ( use_tree_str, _) ) => use_tree_str_opt = Some ( use_tree_str) ,
496
498
None if def_in_mod && def_out_sel => {
497
499
//Considered only after use_stmt is not present
@@ -502,15 +504,15 @@ impl Module {
502
504
// mod -> ust_stmt transversal
503
505
// true | false -> super import insertion
504
506
// 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 ) ;
506
508
}
507
509
None => { }
508
510
}
509
511
} else if exists_inside_sel && !exists_outside_sel {
510
512
//Changes to be made inside new module, and remove import from outside
511
513
512
514
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 )
514
516
{
515
517
if let Some ( text_range) = text_range_opt {
516
518
import_path_to_be_removed = Some ( text_range) ;
@@ -530,7 +532,7 @@ impl Module {
530
532
531
533
use_tree_str_opt = Some ( use_tree_str) ;
532
534
} 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 ) ;
534
536
}
535
537
}
536
538
@@ -550,7 +552,20 @@ impl Module {
550
552
make:: use_ ( None , make:: use_tree ( make:: join_paths ( use_tree_str) , None , None , false ) ) ;
551
553
let item = ast:: Item :: from ( use_) ;
552
554
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 {
554
569
self . use_items . insert ( 0 , item. clone ( ) ) ;
555
570
}
556
571
}
0 commit comments