Skip to content

Commit 7163d60

Browse files
harrysarsonharrysarson-signaloid
authored andcommitted
handle {self} when recursively removing node from UseTree
This commits adds logic to `UseTree::remove_recursive` to handle converting `use x::y::{self};` to `use x::y;` when recurisevly removing nodes. For example `use x::y::{self, Z};` can become `use x::y` if `Z` is unused.
1 parent 415e357 commit 7163d60

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ mod z {
800800
}
801801
802802
mod z {
803-
use super::inner::{self};
803+
use super::inner;
804804
805805
fn f() {
806806
let y = inner::Y();

crates/syntax/src/ast/edit_in_place.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,13 +451,21 @@ impl ast::UseTree {
451451
u.remove();
452452
}
453453
} else if let Some(u) = parent.and_then(ast::UseTreeList::cast) {
454-
if u.use_trees().next().is_none() {
454+
if u.is_just_self() {
455+
let parent = u.syntax().parent().and_then(ast::UseTree::cast);
456+
if let Some(u) = parent {
457+
let path = u.path().unwrap();
458+
ted::remove_all_iter(u.syntax().children_with_tokens());
459+
ted::insert_raw(Position::first_child_of(u.syntax()), path.syntax());
460+
}
461+
} else if u.use_trees().next().is_none() {
455462
let parent = u.syntax().parent().and_then(ast::UseTree::cast);
456463
if let Some(u) = parent {
457464
u.remove_recursive();
458465
}
466+
} else {
467+
u.remove_unnecessary_braces();
459468
}
460-
u.remove_unnecessary_braces();
461469
}
462470
}
463471

0 commit comments

Comments
 (0)