about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-09-20 14:38:08 +0000
committerbors <bors@rust-lang.org>2023-09-20 14:38:08 +0000
commitd6fef2c7e3be2783369b4b84e320b163b8fd291a (patch)
tree4fd1883f7e9383300ed09d968fc92a197a9c1b70
parent4778255b3de9786c59928346470b2ed3cfcdb2c9 (diff)
parentcac796acb30d3af9a2eb9aff02acfae43a6da537 (diff)
downloadrust-d6fef2c7e3be2783369b4b84e320b163b8fd291a.tar.gz
rust-d6fef2c7e3be2783369b4b84e320b163b8fd291a.zip
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.
-rw-r--r--crates/ide-assists/src/handlers/unmerge_use.rs40
1 files changed, 18 insertions, 22 deletions
diff --git a/crates/ide-assists/src/handlers/unmerge_use.rs b/crates/ide-assists/src/handlers/unmerge_use.rs
index dac216b69b7..52df30d9623 100644
--- a/crates/ide-assists/src/handlers/unmerge_use.rs
+++ b/crates/ide-assists/src/handlers/unmerge_use.rs
@@ -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();
-
-            tree.remove();
-            ted::insert(Position::after(use_.syntax()), new_use.syntax());
-
-            builder.replace(old_parent_range, new_parent.to_string());
-        },
-    )
+    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());
+
+        builder.replace(old_parent_range, new_parent.to_string());
+    })
 }
 
 fn resolve_full_path(tree: &ast::UseTree) -> Option<ast::Path> {