diff options
Diffstat (limited to 'crates/ra_assists')
-rw-r--r-- | crates/ra_assists/src/assists/move_bounds.rs | 9 | ||||
-rw-r--r-- | crates/ra_assists/src/ast_editor.rs | 53 | ||||
-rw-r--r-- | crates/ra_assists/src/lib.rs | 1 |
3 files changed, 4 insertions, 59 deletions
diff --git a/crates/ra_assists/src/assists/move_bounds.rs b/crates/ra_assists/src/assists/move_bounds.rs index 1d27832a3..39ff51233 100644 --- a/crates/ra_assists/src/assists/move_bounds.rs +++ b/crates/ra_assists/src/assists/move_bounds.rs | |||
@@ -1,11 +1,11 @@ | |||
1 | use hir::db::HirDatabase; | 1 | use hir::db::HirDatabase; |
2 | use ra_syntax::{ | 2 | use ra_syntax::{ |
3 | ast::{self, make, AstNode, NameOwner, TypeBoundsOwner}, | 3 | ast::{self, edit, make, AstNode, NameOwner, TypeBoundsOwner}, |
4 | SyntaxElement, | 4 | SyntaxElement, |
5 | SyntaxKind::*, | 5 | SyntaxKind::*, |
6 | }; | 6 | }; |
7 | 7 | ||
8 | use crate::{ast_editor::AstEditor, Assist, AssistCtx, AssistId}; | 8 | use crate::{Assist, AssistCtx, AssistId}; |
9 | 9 | ||
10 | pub(crate) fn move_bounds_to_where_clause(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { | 10 | pub(crate) fn move_bounds_to_where_clause(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { |
11 | let type_param_list = ctx.node_at_offset::<ast::TypeParamList>()?; | 11 | let type_param_list = ctx.node_at_offset::<ast::TypeParamList>()?; |
@@ -43,9 +43,8 @@ pub(crate) fn move_bounds_to_where_clause(mut ctx: AssistCtx<impl HirDatabase>) | |||
43 | (type_param, without_bounds) | 43 | (type_param, without_bounds) |
44 | }); | 44 | }); |
45 | 45 | ||
46 | let mut ast_editor = AstEditor::new(type_param_list.clone()); | 46 | let new_type_param_list = edit::replace_descendants(&type_param_list, new_params); |
47 | ast_editor.replace_descendants(new_params); | 47 | edit.replace_ast(type_param_list.clone(), new_type_param_list); |
48 | ast_editor.into_text_edit(edit.text_edit_builder()); | ||
49 | 48 | ||
50 | let where_clause = { | 49 | let where_clause = { |
51 | let predicates = type_param_list.type_params().filter_map(build_predicate); | 50 | let predicates = type_param_list.type_params().filter_map(build_predicate); |
diff --git a/crates/ra_assists/src/ast_editor.rs b/crates/ra_assists/src/ast_editor.rs deleted file mode 100644 index 69abf28a1..000000000 --- a/crates/ra_assists/src/ast_editor.rs +++ /dev/null | |||
@@ -1,53 +0,0 @@ | |||
1 | use std::{iter, ops::RangeInclusive}; | ||
2 | |||
3 | use ra_syntax::{ | ||
4 | algo, | ||
5 | ast::{self, TypeBoundsOwner}, | ||
6 | AstNode, SyntaxElement, | ||
7 | }; | ||
8 | use ra_text_edit::TextEditBuilder; | ||
9 | use rustc_hash::FxHashMap; | ||
10 | |||
11 | pub struct AstEditor<N: AstNode> { | ||
12 | original_ast: N, | ||
13 | ast: N, | ||
14 | } | ||
15 | |||
16 | impl<N: AstNode> AstEditor<N> { | ||
17 | pub fn new(node: N) -> AstEditor<N> | ||
18 | where | ||
19 | N: Clone, | ||
20 | { | ||
21 | AstEditor { original_ast: node.clone(), ast: node } | ||
22 | } | ||
23 | |||
24 | pub fn into_text_edit(self, builder: &mut TextEditBuilder) { | ||
25 | algo::diff(&self.original_ast.syntax(), self.ast().syntax()).into_text_edit(builder) | ||
26 | } | ||
27 | |||
28 | pub fn ast(&self) -> &N { | ||
29 | &self.ast | ||
30 | } | ||
31 | |||
32 | pub fn replace_descendants<T: AstNode>( | ||
33 | &mut self, | ||
34 | replacement_map: impl Iterator<Item = (T, T)>, | ||
35 | ) -> &mut Self { | ||
36 | let map = replacement_map | ||
37 | .map(|(from, to)| (from.syntax().clone().into(), to.syntax().clone().into())) | ||
38 | .collect::<FxHashMap<_, _>>(); | ||
39 | let new_syntax = algo::replace_descendants(self.ast.syntax(), &map); | ||
40 | self.ast = N::cast(new_syntax).unwrap(); | ||
41 | self | ||
42 | } | ||
43 | |||
44 | #[must_use] | ||
45 | fn replace_children( | ||
46 | &self, | ||
47 | to_delete: RangeInclusive<SyntaxElement>, | ||
48 | mut to_insert: impl Iterator<Item = SyntaxElement>, | ||
49 | ) -> N { | ||
50 | let new_syntax = algo::replace_children(self.ast().syntax(), to_delete, &mut to_insert); | ||
51 | N::cast(new_syntax).unwrap() | ||
52 | } | ||
53 | } | ||
diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs index 3ca3320f7..91b2a1dce 100644 --- a/crates/ra_assists/src/lib.rs +++ b/crates/ra_assists/src/lib.rs | |||
@@ -7,7 +7,6 @@ | |||
7 | 7 | ||
8 | mod assist_ctx; | 8 | mod assist_ctx; |
9 | mod marks; | 9 | mod marks; |
10 | pub mod ast_editor; | ||
11 | 10 | ||
12 | use hir::db::HirDatabase; | 11 | use hir::db::HirDatabase; |
13 | use itertools::Itertools; | 12 | use itertools::Itertools; |