]> git.lizzy.rs Git - rust.git/commitdiff
fix: Don't drop glob with nested self
authorDropDemBits <r3usrlnd@gmail.com>
Tue, 15 Feb 2022 00:41:49 +0000 (19:41 -0500)
committerDropDemBits <r3usrlnd@gmail.com>
Tue, 15 Feb 2022 00:45:31 +0000 (19:45 -0500)
crates/ide_assists/src/handlers/merge_imports.rs
crates/ide_db/src/helpers/merge_imports.rs

index cf30897ab42c9514da1332790c8644f789349aae..2ded8c980372110f35239db28fff791b2feaded1 100644 (file)
@@ -321,6 +321,18 @@ fn test_merge_nested_empty_and_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(
index 614784b467456b7ff887b03615de98270d859084..f113dccdea9bed2050dd23d6065360b0b3ce6da3 100644 (file)
@@ -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,