about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDropDemBits <r3usrlnd@gmail.com>2024-09-17 18:25:32 -0400
committerDropDemBits <r3usrlnd@gmail.com>2024-09-17 18:25:32 -0400
commitd34cbe040df9bce2aa3f6f7cf62633484ad31bf1 (patch)
tree9980a1c16af3853cc2b3361649f935982660c386
parent5bd2f42c0630e7b9be2c9dc20db20402c31e4d01 (diff)
downloadrust-d34cbe040df9bce2aa3f6f7cf62633484ad31bf1.tar.gz
rust-d34cbe040df9bce2aa3f6f7cf62633484ad31bf1.zip
Use `SyntaxEditor` in `extract_type_alias`
-rw-r--r--src/tools/rust-analyzer/crates/ide-assists/src/handlers/extract_type_alias.rs28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/extract_type_alias.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/extract_type_alias.rs
index dcf16e89b2c..1eaf31628f3 100644
--- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/extract_type_alias.rs
+++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/extract_type_alias.rs
@@ -2,7 +2,7 @@ use either::Either;
 use ide_db::syntax_helpers::node_ext::walk_ty;
 use syntax::{
     ast::{self, edit::IndentLevel, make, AstNode, HasGenericArgs, HasGenericParams, HasName},
-    ted,
+    syntax_editor,
 };
 
 use crate::{AssistContext, AssistId, AssistKind, Assists};
@@ -43,9 +43,8 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>) ->
         AssistId("extract_type_alias", AssistKind::RefactorExtract),
         "Extract type as type alias",
         target,
-        |edit| {
-            let node = edit.make_syntax_mut(node.clone());
-            let target_ty = edit.make_mut(ty.clone());
+        |builder| {
+            let mut edit = builder.make_editor(node);
 
             let mut known_generics = match item.generic_param_list() {
                 Some(it) => it.generic_params().collect(),
@@ -67,25 +66,28 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>) ->
                 .map_or(String::new(), |it| it.to_generic_args().to_string());
             // FIXME: replace with a `ast::make` constructor
             let new_ty = make::ty(&format!("Type{ty_args}")).clone_for_update();
-            ted::replace(target_ty.syntax(), new_ty.syntax());
+            edit.replace(ty.syntax(), new_ty.syntax());
 
             // Insert new alias
-            let indent = IndentLevel::from_node(&node);
             let ty_alias = make::ty_alias("Type", generic_params, None, None, Some((ty, None)))
                 .clone_for_update();
-            ted::insert_all(
-                ted::Position::before(node),
+
+            if let Some(cap) = ctx.config.snippet_cap {
+                if let Some(name) = ty_alias.name() {
+                    edit.add_annotation(name.syntax(), builder.make_tabstop_before(cap));
+                }
+            }
+
+            let indent = IndentLevel::from_node(node);
+            edit.insert_all(
+                syntax_editor::Position::before(node),
                 vec![
                     ty_alias.syntax().clone().into(),
                     make::tokens::whitespace(&format!("\n\n{indent}")).into(),
                 ],
             );
 
-            if let Some(cap) = ctx.config.snippet_cap {
-                if let Some(name) = ty_alias.name() {
-                    edit.add_tabstop_before(cap, name);
-                }
-            }
+            builder.add_file_edits(ctx.file_id(), edit);
         },
     )
 }