diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-03-19 10:38:59 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-03-19 10:38:59 +0000 |
commit | 11f2c6908b23566703469f9ad7731425c23daedf (patch) | |
tree | e844c04028d229ddcb42f97fdd1f972010a8d3d2 /crates/ra_assists/src/handlers/merge_imports.rs | |
parent | 13af63a40393c0e299d7db2545aee0aeb1a5c2bc (diff) | |
parent | ef3bf906c477048076faa8e18b50fc34175f6c14 (diff) |
Merge #3650
3650: Generalize r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_assists/src/handlers/merge_imports.rs')
-rw-r--r-- | crates/ra_assists/src/handlers/merge_imports.rs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/crates/ra_assists/src/handlers/merge_imports.rs b/crates/ra_assists/src/handlers/merge_imports.rs index 96b1ab86a..e9c49b7d0 100644 --- a/crates/ra_assists/src/handlers/merge_imports.rs +++ b/crates/ra_assists/src/handlers/merge_imports.rs | |||
@@ -1,7 +1,10 @@ | |||
1 | use std::iter::successors; | 1 | use std::iter::successors; |
2 | 2 | ||
3 | use ast::{edit::AstNodeEdit, make}; | 3 | use ra_syntax::{ |
4 | use ra_syntax::{ast, AstNode, AstToken, Direction, InsertPosition, SyntaxElement, T}; | 4 | algo::neighbor, |
5 | ast::{self, edit::AstNodeEdit, make}, | ||
6 | AstNode, AstToken, Direction, InsertPosition, SyntaxElement, T, | ||
7 | }; | ||
5 | 8 | ||
6 | use crate::{Assist, AssistCtx, AssistId}; | 9 | use crate::{Assist, AssistCtx, AssistId}; |
7 | 10 | ||
@@ -23,7 +26,7 @@ pub(crate) fn merge_imports(ctx: AssistCtx) -> Option<Assist> { | |||
23 | let (merged, to_delete) = [Direction::Prev, Direction::Next] | 26 | let (merged, to_delete) = [Direction::Prev, Direction::Next] |
24 | .iter() | 27 | .iter() |
25 | .copied() | 28 | .copied() |
26 | .filter_map(|dir| next_use_item(&use_item, dir)) | 29 | .filter_map(|dir| neighbor(&use_item, dir)) |
27 | .filter_map(|it| Some((it.clone(), it.use_tree()?))) | 30 | .filter_map(|it| Some((it.clone(), it.use_tree()?))) |
28 | .find_map(|(use_item, use_tree)| { | 31 | .find_map(|(use_item, use_tree)| { |
29 | Some((try_merge_trees(&tree, &use_tree)?, use_item.clone())) | 32 | Some((try_merge_trees(&tree, &use_tree)?, use_item.clone())) |
@@ -49,10 +52,6 @@ pub(crate) fn merge_imports(ctx: AssistCtx) -> Option<Assist> { | |||
49 | }) | 52 | }) |
50 | } | 53 | } |
51 | 54 | ||
52 | fn next_use_item(this_use_item: &ast::UseItem, direction: Direction) -> Option<ast::UseItem> { | ||
53 | this_use_item.syntax().siblings(direction).skip(1).find_map(ast::UseItem::cast) | ||
54 | } | ||
55 | |||
56 | fn try_merge_trees(old: &ast::UseTree, new: &ast::UseTree) -> Option<ast::UseTree> { | 55 | fn try_merge_trees(old: &ast::UseTree, new: &ast::UseTree) -> Option<ast::UseTree> { |
57 | let lhs_path = old.path()?; | 56 | let lhs_path = old.path()?; |
58 | let rhs_path = new.path()?; | 57 | let rhs_path = new.path()?; |