diff options
author | Aleksey Kladov <[email protected]> | 2021-05-18 12:42:41 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-05-22 13:27:32 +0100 |
commit | 47d7434dde215460fc95916f2703c6925f58dcce (patch) | |
tree | 2eb017e9a32da4fb6f729b6b9c617c2516dafc40 /crates/ide_assists/src/utils.rs | |
parent | 3cfe2d0a5d663d29c3d196f9d16e91964780792a (diff) |
internal: replace AstTransformer with mutable syntax trees
Diffstat (limited to 'crates/ide_assists/src/utils.rs')
-rw-r--r-- | crates/ide_assists/src/utils.rs | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/crates/ide_assists/src/utils.rs b/crates/ide_assists/src/utils.rs index fc7caee04..2e79a3aed 100644 --- a/crates/ide_assists/src/utils.rs +++ b/crates/ide_assists/src/utils.rs | |||
@@ -24,7 +24,7 @@ use syntax::{ | |||
24 | 24 | ||
25 | use crate::{ | 25 | use crate::{ |
26 | assist_context::{AssistBuilder, AssistContext}, | 26 | assist_context::{AssistBuilder, AssistContext}, |
27 | ast_transform::{self, AstTransform, QualifyPaths, SubstituteTypeParams}, | 27 | ast_transform::AstTransform, |
28 | }; | 28 | }; |
29 | 29 | ||
30 | pub(crate) fn unwrap_trivial_block(block: ast::BlockExpr) -> ast::Expr { | 30 | pub(crate) fn unwrap_trivial_block(block: ast::BlockExpr) -> ast::Expr { |
@@ -132,14 +132,18 @@ pub fn add_trait_assoc_items_to_impl( | |||
132 | target_scope: hir::SemanticsScope, | 132 | target_scope: hir::SemanticsScope, |
133 | ) -> (ast::Impl, ast::AssocItem) { | 133 | ) -> (ast::Impl, ast::AssocItem) { |
134 | let source_scope = sema.scope_for_def(trait_); | 134 | let source_scope = sema.scope_for_def(trait_); |
135 | let ast_transform = QualifyPaths::new(&target_scope, &source_scope) | 135 | |
136 | .or(SubstituteTypeParams::for_trait_impl(&source_scope, trait_, impl_.clone())); | 136 | let transform = AstTransform { |
137 | 137 | subst: (trait_, impl_.clone()), | |
138 | let items = items | 138 | source_scope: &source_scope, |
139 | .into_iter() | 139 | target_scope: &target_scope, |
140 | .map(|it| it.clone_for_update()) | 140 | }; |
141 | .inspect(|it| ast_transform::apply(&*ast_transform, it)) | 141 | |
142 | .map(|it| edit::remove_attrs_and_docs(&it).clone_subtree().clone_for_update()); | 142 | let items = items.into_iter().map(|assoc_item| { |
143 | let assoc_item = assoc_item.clone_for_update(); | ||
144 | transform.apply(assoc_item.clone()); | ||
145 | edit::remove_attrs_and_docs(&assoc_item).clone_subtree().clone_for_update() | ||
146 | }); | ||
143 | 147 | ||
144 | let res = impl_.clone_for_update(); | 148 | let res = impl_.clone_for_update(); |
145 | 149 | ||