Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/apply_demorgan.rs3
-rw-r--r--crates/ide-assists/src/handlers/convert_bool_then.rs6
-rw-r--r--crates/ide-assists/src/handlers/convert_named_struct_to_tuple_struct.rs3
-rw-r--r--crates/ide-assists/src/handlers/convert_to_guarded_return.rs3
-rw-r--r--crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs6
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_trait.rs3
-rw-r--r--crates/ide-assists/src/handlers/generate_mut_trait_impl.rs4
-rw-r--r--crates/ide-assists/src/handlers/generate_trait_from_impl.rs3
-rw-r--r--crates/ide-assists/src/handlers/remove_dbg.rs3
-rw-r--r--crates/ide-assists/src/handlers/replace_if_let_with_match.rs3
-rw-r--r--crates/ide-assists/src/handlers/replace_qualified_name_with_use.rs3
-rw-r--r--crates/ide-assists/src/utils.rs7
-rw-r--r--crates/ide-db/src/path_transform.rs3
-rw-r--r--crates/syntax/src/syntax_editor.rs25
-rw-r--r--crates/syntax/src/syntax_editor/edits.rs4
15 files changed, 25 insertions, 54 deletions
diff --git a/crates/ide-assists/src/handlers/apply_demorgan.rs b/crates/ide-assists/src/handlers/apply_demorgan.rs
index 9220d127ef..5eba0d0ef9 100644
--- a/crates/ide-assists/src/handlers/apply_demorgan.rs
+++ b/crates/ide-assists/src/handlers/apply_demorgan.rs
@@ -82,8 +82,7 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
let make = SyntaxFactory::with_mappings();
- let (mut editor, demorganed) = SyntaxEditor::new(bin_expr.syntax().clone());
- let demorganed = ast::BinExpr::cast(demorganed).unwrap();
+ let (mut editor, demorganed) = SyntaxEditor::new_typed(&bin_expr);
editor.replace(demorganed.op_token()?, make.token(inv_token));
let mut exprs = VecDeque::from([
diff --git a/crates/ide-assists/src/handlers/convert_bool_then.rs b/crates/ide-assists/src/handlers/convert_bool_then.rs
index f13d1c1f86..4e23f4789b 100644
--- a/crates/ide-assists/src/handlers/convert_bool_then.rs
+++ b/crates/ide-assists/src/handlers/convert_bool_then.rs
@@ -77,8 +77,7 @@ pub(crate) fn convert_if_to_bool_then(acc: &mut Assists, ctx: &AssistContext<'_>
"Convert `if` expression to `bool::then` call",
target,
|builder| {
- let (mut editor, closure_body) = SyntaxEditor::new(closure_body.syntax().clone());
- let closure_body = ast::Expr::cast(closure_body).unwrap();
+ let (mut editor, closure_body) = SyntaxEditor::new_typed(&closure_body);
// Rewrite all `Some(e)` in tail position to `e`
for_each_tail_expr(&closure_body, &mut |e| {
let e = match e {
@@ -188,8 +187,7 @@ pub(crate) fn convert_bool_then_to_if(acc: &mut Assists, ctx: &AssistContext<'_>
e => mapless_make.block_expr(None, Some(e)),
};
- let (mut editor, closure_body) = SyntaxEditor::new(closure_body.syntax().clone());
- let closure_body = ast::BlockExpr::cast(closure_body).unwrap();
+ let (mut editor, closure_body) = SyntaxEditor::new_typed(&closure_body);
// Wrap all tails in `Some(...)`
let none_path = mapless_make.expr_path(mapless_make.ident_path("None"));
let some_path = mapless_make.expr_path(mapless_make.ident_path("Some"));
diff --git a/crates/ide-assists/src/handlers/convert_named_struct_to_tuple_struct.rs b/crates/ide-assists/src/handlers/convert_named_struct_to_tuple_struct.rs
index 3c4f297bdd..35f38bb203 100644
--- a/crates/ide-assists/src/handlers/convert_named_struct_to_tuple_struct.rs
+++ b/crates/ide-assists/src/handlers/convert_named_struct_to_tuple_struct.rs
@@ -103,8 +103,7 @@ fn edit_struct_def(
// currently not triggered for struct definitions inside macro calls.
let tuple_fields = record_fields.fields().filter_map(|f| {
let (mut editor, field) =
- SyntaxEditor::new(ast::make::tuple_field(f.visibility(), f.ty()?).syntax().clone());
- let field = ast::TupleField::cast(field).unwrap();
+ SyntaxEditor::new_typed(&ast::make::tuple_field(f.visibility(), f.ty()?));
editor.insert_all(
Position::first_child_of(field.syntax()),
f.attrs().map(|attr| attr.syntax().clone().into()).collect(),
diff --git a/crates/ide-assists/src/handlers/convert_to_guarded_return.rs b/crates/ide-assists/src/handlers/convert_to_guarded_return.rs
index f5ec60ac8a..f2269675c9 100644
--- a/crates/ide-assists/src/handlers/convert_to_guarded_return.rs
+++ b/crates/ide-assists/src/handlers/convert_to_guarded_return.rs
@@ -261,8 +261,7 @@ impl<'db> ElseBlock<'db> {
return block_expr.reset_indent();
}
- let (mut edit, block_expr) = SyntaxEditor::new(block_expr.reset_indent().syntax().clone());
- let block_expr = ast::BlockExpr::cast(block_expr).unwrap();
+ let (mut edit, block_expr) = SyntaxEditor::new_typed(&block_expr.reset_indent());
let last_stmt = block_expr.statements().last().map(|it| it.syntax().clone());
let tail_expr = block_expr.tail_expr().map(|it| it.syntax().clone());
diff --git a/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs b/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
index 51bdca449c..20af3886d5 100644
--- a/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
+++ b/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs
@@ -103,10 +103,8 @@ fn edit_struct_def(
names: Vec<ast::Name>,
) {
let record_fields = tuple_fields.fields().zip(names).filter_map(|(f, name)| {
- let (mut field_editor, field) = SyntaxEditor::new(
- ast::make::record_field(f.visibility(), name, f.ty()?).syntax().clone(),
- );
- let field = ast::RecordField::cast(field).unwrap();
+ let (mut field_editor, field) =
+ SyntaxEditor::new_typed(&ast::make::record_field(f.visibility(), name, f.ty()?));
field_editor.insert_all(
Position::first_child_of(field.syntax()),
f.attrs().map(|attr| attr.syntax().clone().into()).collect(),
diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
index 92232ba4da..26b14608df 100644
--- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs
+++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
@@ -563,8 +563,7 @@ fn finalize_delegate(
return Some(delegate.clone());
}
- let (mut editor, delegate) = SyntaxEditor::new(delegate.syntax().clone());
- let delegate = ast::Impl::cast(delegate).unwrap();
+ let (mut editor, delegate) = SyntaxEditor::new_typed(delegate);
// 1. Replace assoc_item_list if we have new items
if let Some(items) = assoc_items
diff --git a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
index f45b68f79c..bd25f6252a 100644
--- a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
+++ b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
@@ -67,9 +67,7 @@ pub(crate) fn generate_mut_trait_impl(acc: &mut Assists, ctx: &AssistContext<'_>
format!("Generate `{trait_new}` impl from this `{trait_name}` trait"),
target,
|edit| {
- let (mut editor, impl_clone) =
- SyntaxEditor::new(impl_def.reset_indent().syntax().clone());
- let impl_clone = ast::Impl::cast(impl_clone).unwrap();
+ let (mut editor, impl_clone) = SyntaxEditor::new_typed(&impl_def.reset_indent());
let factory = SyntaxFactory::without_mappings();
apply_generate_mut_impl(&mut editor, &factory, &impl_clone, trait_new);
diff --git a/crates/ide-assists/src/handlers/generate_trait_from_impl.rs b/crates/ide-assists/src/handlers/generate_trait_from_impl.rs
index b7fdcce2f3..c25bd1ab39 100644
--- a/crates/ide-assists/src/handlers/generate_trait_from_impl.rs
+++ b/crates/ide-assists/src/handlers/generate_trait_from_impl.rs
@@ -99,8 +99,7 @@ pub(crate) fn generate_trait_from_impl(acc: &mut Assists, ctx: &AssistContext<'_
|builder| {
let trait_items: ast::AssocItemList = {
let (mut trait_items_editor, trait_items) =
- SyntaxEditor::new(impl_assoc_items.syntax().clone());
- let trait_items = ast::AssocItemList::cast(trait_items).unwrap();
+ SyntaxEditor::new_typed(&impl_assoc_items);
trait_items.assoc_items().for_each(|item| {
strip_body(&mut trait_items_editor, &item);
diff --git a/crates/ide-assists/src/handlers/remove_dbg.rs b/crates/ide-assists/src/handlers/remove_dbg.rs
index d56d85d12d..007dd91d1b 100644
--- a/crates/ide-assists/src/handlers/remove_dbg.rs
+++ b/crates/ide-assists/src/handlers/remove_dbg.rs
@@ -209,8 +209,7 @@ fn replace_nested_dbgs(expanded: ast::Expr) -> ast::Expr {
return replaced;
}
- let (mut editor, expanded) = SyntaxEditor::new(expanded.syntax().clone());
- let expanded = ast::Expr::cast(expanded).unwrap();
+ let (mut editor, expanded) = SyntaxEditor::new_typed(&expanded);
// We need to collect to avoid mutation during traversal.
let macro_exprs: Vec<_> =
expanded.syntax().descendants().filter_map(ast::MacroExpr::cast).collect();
diff --git a/crates/ide-assists/src/handlers/replace_if_let_with_match.rs b/crates/ide-assists/src/handlers/replace_if_let_with_match.rs
index 2730f5cb7b..548872c06e 100644
--- a/crates/ide-assists/src/handlers/replace_if_let_with_match.rs
+++ b/crates/ide-assists/src/handlers/replace_if_let_with_match.rs
@@ -402,8 +402,7 @@ fn let_and_guard(cond: &ast::Expr) -> (Option<ast::LetExpr>, Option<ast::Expr>)
} else if let ast::Expr::BinExpr(bin_expr) = cond
&& let Some(ast::Expr::LetExpr(let_expr)) = and_bin_expr_left(bin_expr).lhs()
{
- let (mut edit, new_expr) = SyntaxEditor::new(bin_expr.syntax().clone());
- let new_expr = ast::BinExpr::cast(new_expr).unwrap();
+ let (mut edit, new_expr) = SyntaxEditor::new_typed(bin_expr);
let left_bin = and_bin_expr_left(&new_expr);
if let Some(rhs) = left_bin.rhs() {
diff --git a/crates/ide-assists/src/handlers/replace_qualified_name_with_use.rs b/crates/ide-assists/src/handlers/replace_qualified_name_with_use.rs
index 693a081e91..7f0375f3cb 100644
--- a/crates/ide-assists/src/handlers/replace_qualified_name_with_use.rs
+++ b/crates/ide-assists/src/handlers/replace_qualified_name_with_use.rs
@@ -111,8 +111,7 @@ fn target_path(ctx: &AssistContext<'_>, mut original_path: ast::Path) -> Option<
}
fn drop_generic_args(path: &ast::Path) -> ast::Path {
- let (mut editor, path) = SyntaxEditor::new(path.syntax().clone());
- let path = ast::Path::cast(path).unwrap();
+ let (mut editor, path) = SyntaxEditor::new_typed(path);
if let Some(segment) = path.segment()
&& let Some(generic_args) = segment.generic_arg_list()
{
diff --git a/crates/ide-assists/src/utils.rs b/crates/ide-assists/src/utils.rs
index 145a6af7e8..08c5fdbe1c 100644
--- a/crates/ide-assists/src/utils.rs
+++ b/crates/ide-assists/src/utils.rs
@@ -248,8 +248,7 @@ pub fn add_trait_assoc_items_to_impl(
})
.filter_map(|item| match item {
ast::AssocItem::Fn(fn_) if fn_.body().is_none() => {
- let (mut fn_editor, fn_) = SyntaxEditor::new(fn_.syntax().clone());
- let fn_ = ast::Fn::cast(fn_).unwrap();
+ let (mut fn_editor, fn_) = SyntaxEditor::new_typed(&fn_);
let fill_expr: ast::Expr = match config.expr_fill_default {
ExprFillDefaultMode::Todo | ExprFillDefaultMode::Default => make.expr_todo(),
ExprFillDefaultMode::Underscore => make.expr_underscore().into(),
@@ -260,9 +259,7 @@ pub fn add_trait_assoc_items_to_impl(
ast::AssocItem::cast(new_fn_)
}
ast::AssocItem::TypeAlias(type_alias) => {
- let (mut type_alias_editor, type_alias) =
- SyntaxEditor::new(type_alias.syntax().clone());
- let type_alias = ast::TypeAlias::cast(type_alias).unwrap();
+ let (mut type_alias_editor, type_alias) = SyntaxEditor::new_typed(&type_alias);
if let Some(type_bound_list) = type_alias.type_bound_list() {
type_bound_list.remove(&mut type_alias_editor);
};
diff --git a/crates/ide-db/src/path_transform.rs b/crates/ide-db/src/path_transform.rs
index 3fd1505772..2a0a28a9ac 100644
--- a/crates/ide-db/src/path_transform.rs
+++ b/crates/ide-db/src/path_transform.rs
@@ -451,8 +451,7 @@ impl Ctx<'_> {
};
let found_path = self.target_module.find_path(self.source_scope.db, def, cfg)?;
let res = mod_path_to_ast(&found_path, self.target_edition);
- let (mut res_editor, res) = SyntaxEditor::new(res.syntax().clone());
- let res = ast::Path::cast(res).unwrap();
+ let (mut res_editor, res) = SyntaxEditor::new_typed(&res);
if let Some(args) = path.segment().and_then(|it| it.generic_arg_list())
&& let Some(segment) = res.segment()
{
diff --git a/crates/syntax/src/syntax_editor.rs b/crates/syntax/src/syntax_editor.rs
index a21a5dd3aa..64a21af6d7 100644
--- a/crates/syntax/src/syntax_editor.rs
+++ b/crates/syntax/src/syntax_editor.rs
@@ -456,8 +456,7 @@ mod tests {
.into(),
);
- let (mut editor, root) = SyntaxEditor::new(root.syntax().clone());
- let root = ast::MatchArm::cast(root).unwrap();
+ let (mut editor, root) = SyntaxEditor::new_typed(&root);
let to_wrap = root.syntax().descendants().find_map(ast::TupleExpr::cast).unwrap();
let to_replace = root.syntax().descendants().find_map(ast::BinExpr::cast).unwrap();
@@ -516,9 +515,7 @@ mod tests {
None,
);
- let (mut editor, root) = SyntaxEditor::new(root.syntax().clone());
- let root = ast::BlockExpr::cast(root).unwrap();
-
+ let (mut editor, root) = SyntaxEditor::new_typed(&root);
let second_let = root.syntax().descendants().find_map(ast::LetStmt::cast).unwrap();
let make = SyntaxFactory::without_mappings();
@@ -569,8 +566,7 @@ mod tests {
),
);
- let (mut editor, root) = SyntaxEditor::new(root.syntax().clone());
- let root = ast::BlockExpr::cast(root).unwrap();
+ let (mut editor, root) = SyntaxEditor::new_typed(&root);
let inner_block =
root.syntax().descendants().flat_map(ast::BlockExpr::cast).nth(1).unwrap();
@@ -625,8 +621,7 @@ mod tests {
None,
);
- let (mut editor, root) = SyntaxEditor::new(root.syntax().clone());
- let root = ast::BlockExpr::cast(root).unwrap();
+ let (mut editor, root) = SyntaxEditor::new_typed(&root);
let inner_block = root;
let make = SyntaxFactory::with_mappings();
@@ -674,8 +669,7 @@ mod tests {
false,
);
- let (mut editor, parent_fn) = SyntaxEditor::new(parent_fn.syntax().clone());
- let parent_fn = ast::Fn::cast(parent_fn).unwrap();
+ let (mut editor, parent_fn) = SyntaxEditor::new_typed(&parent_fn);
if let Some(ret_ty) = parent_fn.ret_type() {
editor.delete(ret_ty.syntax().clone());
@@ -702,8 +696,7 @@ mod tests {
let arg_list =
make::arg_list([make::expr_literal("1").into(), make::expr_literal("2").into()]);
- let (mut editor, arg_list) = SyntaxEditor::new(arg_list.syntax().clone());
- let arg_list = ast::ArgList::cast(arg_list).unwrap();
+ let (mut editor, arg_list) = SyntaxEditor::new_typed(&arg_list);
let target_expr = make::token(parser::SyntaxKind::UNDERSCORE);
@@ -722,8 +715,7 @@ mod tests {
let arg_list =
make::arg_list([make::expr_literal("1").into(), make::expr_literal("2").into()]);
- let (mut editor, arg_list) = SyntaxEditor::new(arg_list.syntax().clone());
- let arg_list = ast::ArgList::cast(arg_list).unwrap();
+ let (mut editor, arg_list) = SyntaxEditor::new_typed(&arg_list);
let target_expr = make::expr_literal("3").clone_for_update();
@@ -742,8 +734,7 @@ mod tests {
let arg_list =
make::arg_list([make::expr_literal("1").into(), make::expr_literal("2").into()]);
- let (mut editor, arg_list) = SyntaxEditor::new(arg_list.syntax().clone());
- let arg_list = ast::ArgList::cast(arg_list).unwrap();
+ let (mut editor, arg_list) = SyntaxEditor::new_typed(&arg_list);
let target_expr = make::ext::expr_unit().clone_for_update();
diff --git a/crates/syntax/src/syntax_editor/edits.rs b/crates/syntax/src/syntax_editor/edits.rs
index 253df826d7..ce435128a7 100644
--- a/crates/syntax/src/syntax_editor/edits.rs
+++ b/crates/syntax/src/syntax_editor/edits.rs
@@ -473,9 +473,7 @@ enum Foo {
}
fn check_add_variant(before: &str, expected: &str, variant: ast::Variant) {
- let (mut editor, enum_) =
- SyntaxEditor::new(ast_from_text::<ast::Enum>(before).syntax().clone());
- let enum_ = ast::Enum::cast(enum_).unwrap();
+ let (mut editor, enum_) = SyntaxEditor::new_typed(&ast_from_text::<ast::Enum>(before));
if let Some(it) = enum_.variant_list() {
it.add_variant(&mut editor, &variant)
}