|
1 | 1 | use std::iter::successors; |
2 | 2 |
|
3 | 3 | use ra_syntax::{ |
4 | | - algo::{neighbor, SyntaxRewriter}, |
| 4 | + algo::{neighbor, skip_trivia_token, SyntaxRewriter}, |
5 | 5 | ast::{self, edit::AstNodeEdit, make}, |
6 | | - AstNode, Direction, InsertPosition, NodeOrToken, SyntaxElement, T, |
| 6 | + AstNode, Direction, InsertPosition, SyntaxElement, T, |
7 | 7 | }; |
8 | 8 |
|
9 | 9 | use crate::{Assist, AssistCtx, AssistId}; |
@@ -72,18 +72,12 @@ fn try_merge_trees(old: &ast::UseTree, new: &ast::UseTree) -> Option<ast::UseTre |
72 | 72 | let lhs = old.split_prefix(&lhs_prefix); |
73 | 73 | let rhs = new.split_prefix(&rhs_prefix); |
74 | 74 |
|
75 | | - let mut should_insert_comma = true; |
76 | | - |
77 | | - lhs.syntax() |
78 | | - .last_child() |
79 | | - .and_then(|child| child.children().last()) |
80 | | - .and_then(|last| last.next_sibling_or_token()) |
81 | | - .map(|next_sibling| { |
82 | | - // FIXME: there's probably a better way to check if it's a COMMA |
83 | | - if let NodeOrToken::Token(maybe_comma) = next_sibling { |
84 | | - should_insert_comma = maybe_comma.to_string() != ","; |
85 | | - } |
86 | | - }); |
| 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); |
87 | 81 |
|
88 | 82 | let mut to_insert: Vec<SyntaxElement> = Vec::new(); |
89 | 83 | if should_insert_comma { |
|
0 commit comments