Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/merge_imports.rs')
-rw-r--r--crates/ide-assists/src/handlers/merge_imports.rs87
1 files changed, 41 insertions, 46 deletions
diff --git a/crates/ide-assists/src/handlers/merge_imports.rs b/crates/ide-assists/src/handlers/merge_imports.rs
index aae007577c..b7f7cb9cb0 100644
--- a/crates/ide-assists/src/handlers/merge_imports.rs
+++ b/crates/ide-assists/src/handlers/merge_imports.rs
@@ -12,7 +12,7 @@ use syntax::{
};
use crate::{
- AssistId, AssistKind,
+ AssistId,
assist_context::{AssistContext, Assists},
utils::next_prev,
};
@@ -69,55 +69,50 @@ pub(crate) fn merge_imports(acc: &mut Assists, ctx: &AssistContext<'_>) -> Optio
(selection_range, edits?)
};
- acc.add(
- AssistId("merge_imports", AssistKind::RefactorRewrite),
- "Merge imports",
- target,
- |builder| {
- let edits_mut: Vec<Edit> = edits
- .into_iter()
- .map(|it| match it {
- Remove(Either::Left(it)) => Remove(Either::Left(builder.make_mut(it))),
- Remove(Either::Right(it)) => Remove(Either::Right(builder.make_mut(it))),
- Replace(old, new) => Replace(builder.make_syntax_mut(old), new),
- })
- .collect();
- for edit in edits_mut {
- match edit {
- Remove(it) => it.as_ref().either(Removable::remove, Removable::remove),
- Replace(old, new) => {
- ted::replace(old, &new);
-
- // If there's a selection and we're replacing a use tree in a tree list,
- // normalize the parent use tree if it only contains the merged subtree.
- if !ctx.has_empty_selection() {
- let normalized_use_tree = ast::UseTree::cast(new)
- .as_ref()
- .and_then(ast::UseTree::parent_use_tree_list)
- .and_then(|use_tree_list| {
- if use_tree_list.use_trees().collect_tuple::<(_,)>().is_some() {
- Some(use_tree_list.parent_use_tree())
- } else {
- None
- }
- })
- .and_then(|target_tree| {
- try_normalize_use_tree(
- &target_tree,
- ctx.config.insert_use.granularity.into(),
- )
- .map(|top_use_tree_flat| (target_tree, top_use_tree_flat))
- });
- if let Some((old_tree, new_tree)) = normalized_use_tree {
- cov_mark::hit!(replace_parent_with_normalized_use_tree);
- ted::replace(old_tree.syntax(), new_tree.syntax());
- }
+ acc.add(AssistId::refactor_rewrite("merge_imports"), "Merge imports", target, |builder| {
+ let edits_mut: Vec<Edit> = edits
+ .into_iter()
+ .map(|it| match it {
+ Remove(Either::Left(it)) => Remove(Either::Left(builder.make_mut(it))),
+ Remove(Either::Right(it)) => Remove(Either::Right(builder.make_mut(it))),
+ Replace(old, new) => Replace(builder.make_syntax_mut(old), new),
+ })
+ .collect();
+ for edit in edits_mut {
+ match edit {
+ Remove(it) => it.as_ref().either(Removable::remove, Removable::remove),
+ Replace(old, new) => {
+ ted::replace(old, &new);
+
+ // If there's a selection and we're replacing a use tree in a tree list,
+ // normalize the parent use tree if it only contains the merged subtree.
+ if !ctx.has_empty_selection() {
+ let normalized_use_tree = ast::UseTree::cast(new)
+ .as_ref()
+ .and_then(ast::UseTree::parent_use_tree_list)
+ .and_then(|use_tree_list| {
+ if use_tree_list.use_trees().collect_tuple::<(_,)>().is_some() {
+ Some(use_tree_list.parent_use_tree())
+ } else {
+ None
+ }
+ })
+ .and_then(|target_tree| {
+ try_normalize_use_tree(
+ &target_tree,
+ ctx.config.insert_use.granularity.into(),
+ )
+ .map(|top_use_tree_flat| (target_tree, top_use_tree_flat))
+ });
+ if let Some((old_tree, new_tree)) = normalized_use_tree {
+ cov_mark::hit!(replace_parent_with_normalized_use_tree);
+ ted::replace(old_tree.syntax(), new_tree.syntax());
}
}
}
}
- },
- )
+ }
+ })
}
trait Merge: AstNode + Clone {