Skip to content

Commit c82e769

Browse files
bors[bot]IceSentry
andauthored
Merge #3961
3961: Fix double comma when merge imports on second line r=edwin0cheng a=IceSentry This fixes the bug when merging imports from the second line when it already has a comma it would previously insert a comma. There's probably a better way to check for a COMMA. This also ends up with a weird indentation, but rust-fmt can easily deal with it so I'm not sure how to resolve that. Closes #3832 Co-authored-by: IceSentry <[email protected]>
2 parents d075f49 + ed0eedb commit c82e769

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

crates/ra_assists/src/handlers/merge_imports.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::iter::successors;
22

33
use ra_syntax::{
4-
algo::{neighbor, SyntaxRewriter},
4+
algo::{neighbor, skip_trivia_token, SyntaxRewriter},
55
ast::{self, edit::AstNodeEdit, make},
66
AstNode, Direction, InsertPosition, SyntaxElement, T,
77
};
@@ -72,9 +72,18 @@ fn try_merge_trees(old: &ast::UseTree, new: &ast::UseTree) -> Option<ast::UseTre
7272
let lhs = old.split_prefix(&lhs_prefix);
7373
let rhs = new.split_prefix(&rhs_prefix);
7474

75+
let should_insert_comma = lhs
76+
.use_tree_list()?
77+
.r_curly_token()
78+
.and_then(|it| skip_trivia_token(it.prev_token()?, Direction::Prev))
79+
.map(|it| it.kind() != T![,])
80+
.unwrap_or(true);
81+
7582
let mut to_insert: Vec<SyntaxElement> = Vec::new();
76-
to_insert.push(make::token(T![,]).into());
77-
to_insert.push(make::tokens::single_space().into());
83+
if should_insert_comma {
84+
to_insert.push(make::token(T![,]).into());
85+
to_insert.push(make::tokens::single_space().into());
86+
}
7887
to_insert.extend(
7988
rhs.use_tree_list()?
8089
.syntax()
@@ -247,4 +256,22 @@ use {
247256
",
248257
);
249258
}
259+
260+
#[test]
261+
fn test_double_comma() {
262+
check_assist(
263+
merge_imports,
264+
r"
265+
use foo::bar::baz;
266+
use foo::<|>{
267+
FooBar,
268+
};
269+
",
270+
r"
271+
use foo::{<|>
272+
FooBar,
273+
bar::baz};
274+
",
275+
)
276+
}
250277
}

0 commit comments

Comments
 (0)