Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #20566 from A4-Tacks/part-selection-merge-uses
Add partial selection for merge_imports
Chayim Refael Friedman 9 weeks ago
parent 4376b9b · parent 0c9dace · commit d9da5ff
-rw-r--r--crates/ide-assists/src/handlers/merge_imports.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/merge_imports.rs b/crates/ide-assists/src/handlers/merge_imports.rs
index 9ba73d23dd..42bc05811f 100644
--- a/crates/ide-assists/src/handlers/merge_imports.rs
+++ b/crates/ide-assists/src/handlers/merge_imports.rs
@@ -49,8 +49,9 @@ pub(crate) fn merge_imports(acc: &mut Assists, ctx: &AssistContext<'_>) -> Optio
SyntaxElement::Node(n) => n,
SyntaxElement::Token(t) => t.parent()?,
};
- let mut selected_nodes =
- parent_node.children().filter(|it| selection_range.contains_range(it.text_range()));
+ let mut selected_nodes = parent_node.children().filter(|it| {
+ selection_range.intersect(it.text_range()).is_some_and(|it| !it.is_empty())
+ });
let first_selected = selected_nodes.next()?;
let edits = match_ast! {
@@ -678,6 +679,25 @@ use std::fmt::Result;
}
#[test]
+ fn merge_partial_selection_uses() {
+ cov_mark::check!(merge_with_selected_use_item_neighbors);
+ check_assist(
+ merge_imports,
+ r"
+use std::fmt::Error;
+$0use std::fmt::Display;
+use std::fmt::Debug;
+use std::fmt::Write;
+use$0 std::fmt::Result;
+",
+ r"
+use std::fmt::Error;
+use std::fmt::{Debug, Display, Result, Write};
+",
+ );
+ }
+
+ #[test]
fn merge_selection_use_trees() {
cov_mark::check!(merge_with_selected_use_tree_neighbors);
check_assist(