mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 17:28:09 +00:00
Auto merge of #15621 - kpreid:import, r=Veykril
Give `unmerge_use` a label explaining what it will affect. When I'm trying to clean up `use`s, I often feel uncertain about what exactly the effects of choosing an assist will be. This PR makes a small improvement to that by giving “Unmerge use” a label which names the root of the tree that it's going to move, when one exists. There is no test because I didn't see, among the test helpers, a way to assert on the assist label (as opposed to filtering on it). However, I did test the change manually. I looked into making a similar change to “Merge imports”, but that is considerably trickier.
This commit is contained in:
commit
d6fef2c7e3
1 changed files with 16 additions and 20 deletions
|
@ -36,29 +36,25 @@ pub(crate) fn unmerge_use(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<
|
|||
let old_parent_range = use_.syntax().parent()?.text_range();
|
||||
let new_parent = use_.syntax().parent()?;
|
||||
|
||||
// If possible, explain what is going to be done.
|
||||
let label = match tree.path().and_then(|path| path.first_segment()) {
|
||||
Some(name) => format!("Unmerge use of `{name}`"),
|
||||
None => "Unmerge use".into(),
|
||||
};
|
||||
|
||||
let target = tree.syntax().text_range();
|
||||
acc.add(
|
||||
AssistId("unmerge_use", AssistKind::RefactorRewrite),
|
||||
"Unmerge use",
|
||||
target,
|
||||
|builder| {
|
||||
let new_use = make::use_(
|
||||
use_.visibility(),
|
||||
make::use_tree(
|
||||
path,
|
||||
tree.use_tree_list(),
|
||||
tree.rename(),
|
||||
tree.star_token().is_some(),
|
||||
),
|
||||
)
|
||||
.clone_for_update();
|
||||
acc.add(AssistId("unmerge_use", AssistKind::RefactorRewrite), label, target, |builder| {
|
||||
let new_use = make::use_(
|
||||
use_.visibility(),
|
||||
make::use_tree(path, tree.use_tree_list(), tree.rename(), tree.star_token().is_some()),
|
||||
)
|
||||
.clone_for_update();
|
||||
|
||||
tree.remove();
|
||||
ted::insert(Position::after(use_.syntax()), new_use.syntax());
|
||||
tree.remove();
|
||||
ted::insert(Position::after(use_.syntax()), new_use.syntax());
|
||||
|
||||
builder.replace(old_parent_range, new_parent.to_string());
|
||||
},
|
||||
)
|
||||
builder.replace(old_parent_range, new_parent.to_string());
|
||||
})
|
||||
}
|
||||
|
||||
fn resolve_full_path(tree: &ast::UseTree) -> Option<ast::Path> {
|
||||
|
|
Loading…
Reference in a new issue