Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit df2eb3c

Browse files
committed
fix: Don't drop tree when the other has self
1 parent 014d3ef commit df2eb3c

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

crates/ide_assists/src/handlers/merge_imports.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,75 @@ use std::{fmt::{Display, Debug}};
252252
);
253253
}
254254

255+
#[test]
256+
fn test_merge_with_nested_self_item() {
257+
check_assist(
258+
merge_imports,
259+
r"
260+
use std$0::{fmt::{Write, Display}};
261+
use std::{fmt::{self, Debug}};
262+
",
263+
r"
264+
use std::{fmt::{Write, Display, self, Debug}};
265+
",
266+
);
267+
}
268+
269+
#[test]
270+
fn test_merge_with_nested_self_item2() {
271+
check_assist(
272+
merge_imports,
273+
r"
274+
use std$0::{fmt::{self, Debug}};
275+
use std::{fmt::{Write, Display}};
276+
",
277+
r"
278+
use std::{fmt::{self, Debug, Write, Display}};
279+
",
280+
);
281+
}
282+
283+
#[test]
284+
fn test_merge_self_with_nested_self_item() {
285+
check_assist(
286+
merge_imports,
287+
r"
288+
use std::{fmt$0::{self, Debug}, fmt::{Write, Display}};
289+
",
290+
r"
291+
use std::{fmt::{self, Debug, Write, Display}};
292+
",
293+
);
294+
}
295+
296+
#[test]
297+
fn test_merge_nested_self_and_empty() {
298+
check_assist(
299+
merge_imports,
300+
r"
301+
use foo::$0{bar::{self}};
302+
use foo::{bar};
303+
",
304+
r"
305+
use foo::{bar::{self}};
306+
",
307+
)
308+
}
309+
310+
#[test]
311+
fn test_merge_nested_empty_and_self() {
312+
check_assist(
313+
merge_imports,
314+
r"
315+
use foo::$0{bar};
316+
use foo::{bar::{self}};
317+
",
318+
r"
319+
use foo::{bar::{self}};
320+
",
321+
)
322+
}
323+
255324
#[test]
256325
fn test_merge_single_wildcard_diff_prefixes() {
257326
check_assist(

crates/ide_db/src/helpers/merge_imports.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,10 @@ fn recursive_merge(lhs: &ast::UseTree, rhs: &ast::UseTree, merge: MergeBehavior)
115115
let tree_contains_self = |tree: &ast::UseTree| {
116116
tree.use_tree_list()
117117
.map(|tree_list| tree_list.use_trees().any(|it| tree_is_self(&it)))
118-
.unwrap_or(false)
119118
};
120119
match (tree_contains_self(lhs_t), tree_contains_self(&rhs_t)) {
121-
(true, false) => continue,
122-
(false, true) => {
120+
(Some(true), None) => continue,
121+
(None, Some(true)) => {
123122
ted::replace(lhs_t.syntax(), rhs_t.syntax());
124123
*lhs_t = rhs_t;
125124
continue;

0 commit comments

Comments
 (0)