aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists')
-rw-r--r--crates/ra_assists/src/handlers/merge_imports.rs33
1 files changed, 30 insertions, 3 deletions
diff --git a/crates/ra_assists/src/handlers/merge_imports.rs b/crates/ra_assists/src/handlers/merge_imports.rs
index 0958f52f1..ef0ce0586 100644
--- a/crates/ra_assists/src/handlers/merge_imports.rs
+++ b/crates/ra_assists/src/handlers/merge_imports.rs
@@ -1,7 +1,7 @@
1use std::iter::successors; 1use std::iter::successors;
2 2
3use ra_syntax::{ 3use ra_syntax::{
4 algo::{neighbor, SyntaxRewriter}, 4 algo::{neighbor, skip_trivia_token, SyntaxRewriter},
5 ast::{self, edit::AstNodeEdit, make}, 5 ast::{self, edit::AstNodeEdit, make},
6 AstNode, Direction, InsertPosition, SyntaxElement, T, 6 AstNode, Direction, InsertPosition, SyntaxElement, T,
7}; 7};
@@ -72,9 +72,18 @@ fn try_merge_trees(old: &ast::UseTree, new: &ast::UseTree) -> Option<ast::UseTre
72 let lhs = old.split_prefix(&lhs_prefix); 72 let lhs = old.split_prefix(&lhs_prefix);
73 let rhs = new.split_prefix(&rhs_prefix); 73 let rhs = new.split_prefix(&rhs_prefix);
74 74
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
75 let mut to_insert: Vec<SyntaxElement> = Vec::new(); 82 let mut to_insert: Vec<SyntaxElement> = Vec::new();
76 to_insert.push(make::token(T![,]).into()); 83 if should_insert_comma {
77 to_insert.push(make::tokens::single_space().into()); 84 to_insert.push(make::token(T![,]).into());
85 to_insert.push(make::tokens::single_space().into());
86 }
78 to_insert.extend( 87 to_insert.extend(
79 rhs.use_tree_list()? 88 rhs.use_tree_list()?
80 .syntax() 89 .syntax()
@@ -247,4 +256,22 @@ use {
247", 256",
248 ); 257 );
249 } 258 }
259
260 #[test]
261 fn test_double_comma() {
262 check_assist(
263 merge_imports,
264 r"
265use foo::bar::baz;
266use foo::<|>{
267 FooBar,
268};
269",
270 r"
271use foo::{<|>
272 FooBar,
273bar::baz};
274",
275 )
276 }
250} 277}