diff options
| author | DropDemBits <r3usrlnd@gmail.com> | 2022-02-14 19:41:49 -0500 |
|---|---|---|
| committer | DropDemBits <r3usrlnd@gmail.com> | 2022-02-14 19:45:31 -0500 |
| commit | 86c1251afb1476137ce81b86bf1fa229eecdb5fc (patch) | |
| tree | 29f5bfd314feb5dad65739a9afbd44dbf7223211 | |
| parent | df2eb3c7cbe1a67fc870a4ee5dde6569a6b7deab (diff) | |
| download | rust-86c1251afb1476137ce81b86bf1fa229eecdb5fc.tar.gz rust-86c1251afb1476137ce81b86bf1fa229eecdb5fc.zip | |
fix: Don't drop glob with nested self
| -rw-r--r-- | crates/ide_assists/src/handlers/merge_imports.rs | 12 | ||||
| -rw-r--r-- | crates/ide_db/src/helpers/merge_imports.rs | 3 |
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 cf30897ab42..2ded8c98037 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 614784b4674..f113dccdea9 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, |
