Skip to content

Commit 02214a6

Browse files
committed
fix: remove redundant use node insertion
1 parent 4180565 commit 02214a6

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

crates/ide-assists/src/handlers/extract_module.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
use std::iter;
22

3-
use hir::{HasSource, HirFileIdExt, ModuleSource};
3+
use hir::{HirFileIdExt, ModuleSource};
44
use 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

Comments
 (0)