Unnamed repository; edit this file 'description' to name the repository.
fix: Don't drop glob with nested self
DropDemBits 2022-02-15
parent df2eb3c · commit 86c1251
-rw-r--r--crates/ide_assists/src/handlers/merge_imports.rs12
-rw-r--r--crates/ide_db/src/helpers/merge_imports.rs3
2 files changed, 15 insertions, 0 deletions
diff --git a/crates/ide_assists/src/handlers/merge_imports.rs b/crates/ide_assists/src/handlers/merge_imports.rs
index cf30897ab4..2ded8c9803 100644
--- a/crates/ide_assists/src/handlers/merge_imports.rs
+++ b/crates/ide_assists/src/handlers/merge_imports.rs
@@ -322,6 +322,18 @@ use foo::{bar::{self}};
}
#[test]
+ fn test_merge_nested_list_self_and_glob() {
+ check_assist(
+ merge_imports,
+ r"
+use std$0::{fmt::*};
+use std::{fmt::{self, Display}};
+",
+ r"use std::{fmt::{self, *, Display}};",
+ )
+ }
+
+ #[test]
fn test_merge_single_wildcard_diff_prefixes() {
check_assist(
merge_imports,
diff --git a/crates/ide_db/src/helpers/merge_imports.rs b/crates/ide_db/src/helpers/merge_imports.rs
index 614784b467..f113dccdea 100644
--- a/crates/ide_db/src/helpers/merge_imports.rs
+++ b/crates/ide_db/src/helpers/merge_imports.rs
@@ -115,6 +115,9 @@ fn recursive_merge(lhs: &ast::UseTree, rhs: &ast::UseTree, merge: MergeBehavior)
let tree_contains_self = |tree: &ast::UseTree| {
tree.use_tree_list()
.map(|tree_list| tree_list.use_trees().any(|it| tree_is_self(&it)))
+ // Glob imports aren't part of the use-tree lists,
+ // so they need to be handled explicitly
+ .or_else(|| tree.star_token().is_some().then(|| false))
};
match (tree_contains_self(lhs_t), tree_contains_self(&rhs_t)) {
(Some(true), None) => continue,