Skip to content

Commit 745286d

Browse files
committed
Adapt changes to assist so that we no longer use mutable editor
1 parent 1573144 commit 745286d

90 files changed

Lines changed: 883 additions & 1018 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

crates/hir-expand/src/builtin/derive_macro.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,8 +1294,8 @@ fn coerce_pointee_expand(
12941294
));
12951295
}
12961296

1297-
let (mut editor, strukt) = SyntaxEditor::with_ast_node(strukt);
1298-
strukt.get_or_create_where_clause(&mut editor, new_predicates.into_iter());
1297+
let (editor, strukt) = SyntaxEditor::with_ast_node(strukt);
1298+
strukt.get_or_create_where_clause(&editor, new_predicates.into_iter());
12991299
let edit = editor.finish();
13001300
let strukt = ast::Struct::cast(edit.new_root().clone()).unwrap();
13011301
let adt = ast::Adt::Struct(strukt.clone());

crates/ide-assists/src/handlers/add_braces.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ pub(crate) fn add_braces(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<(
5656
},
5757
expr.syntax().text_range(),
5858
|builder| {
59-
let mut editor = builder.make_editor(expr.syntax());
59+
let editor = builder.make_editor(expr.syntax());
60+
let make = editor.make();
6061

6162
let new_expr = expr.reset_indent().indent(1.into());
62-
let block_expr = editor.make().block_expr(None, Some(new_expr));
63+
let block_expr = make.block_expr(None, Some(new_expr));
6364

6465
editor.replace(expr.syntax(), block_expr.indent(expr.indent_level()).syntax());
6566
builder.add_file_edits(ctx.vfs_file_id(), editor);

crates/ide-assists/src/handlers/add_explicit_dot_deref.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,15 @@ pub(crate) fn add_explicit_method_call_deref(
5353
"Insert explicit method call derefs",
5454
dot_token.text_range(),
5555
|builder| {
56-
let mut editor = builder.make_editor(method_call_expr.syntax());
56+
let editor = builder.make_editor(method_call_expr.syntax());
57+
let make = editor.make();
5758
let mut expr = receiver.clone();
5859

5960
for adjust_kind in adjustments {
60-
expr = adjust_kind.wrap_expr(expr, editor.make());
61+
expr = adjust_kind.wrap_expr(expr, make);
6162
}
6263

63-
expr = editor.make().expr_paren(expr).into();
64+
expr = make.expr_paren(expr).into();
6465
editor.replace(receiver.syntax(), expr.syntax());
6566

6667
builder.add_file_edits(ctx.vfs_file_id(), editor);

crates/ide-assists/src/handlers/add_label_to_loop.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,14 @@ pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext<'_>) -> O
4242
"Add Label",
4343
loop_expr.syntax().text_range(),
4444
|builder| {
45-
let mut editor = builder.make_editor(loop_expr.syntax());
45+
let editor = builder.make_editor(loop_expr.syntax());
46+
let make = editor.make();
4647

47-
let label = editor.make().lifetime("'l");
48+
let label = make.lifetime("'l");
4849
let elements = vec![
4950
label.syntax().clone().into(),
50-
editor.make().token(T![:]).into(),
51-
editor.make().whitespace(" ").into(),
51+
make.token(T![:]).into(),
52+
make.whitespace(" ").into(),
5253
];
5354
editor.insert_all(Position::before(&loop_kw), elements);
5455

@@ -64,7 +65,7 @@ pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext<'_>) -> O
6465
_ => return,
6566
};
6667
if let Some(token) = token {
67-
insert_label_after_token(&mut editor, &token, ctx, builder);
68+
insert_label_after_token(&editor, &token, ctx, builder);
6869
}
6970
});
7071

@@ -83,13 +84,14 @@ fn loop_token(loop_expr: &ast::AnyHasLoopBody) -> Option<syntax::SyntaxToken> {
8384
}
8485

8586
fn insert_label_after_token(
86-
editor: &mut SyntaxEditor,
87+
editor: &SyntaxEditor,
8788
token: &SyntaxToken,
8889
ctx: &AssistContext<'_>,
8990
builder: &mut SourceChangeBuilder,
9091
) {
91-
let label = editor.make().lifetime("'l");
92-
let elements = vec![editor.make().whitespace(" ").into(), label.syntax().clone().into()];
92+
let make = editor.make();
93+
let label = make.lifetime("'l");
94+
let elements = vec![make.whitespace(" ").into(), label.syntax().clone().into()];
9395
editor.insert_all(Position::after(token), elements);
9496

9597
if let Some(cap) = ctx.config.snippet_cap {

crates/ide-assists/src/handlers/add_missing_impl_members.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,10 @@ fn add_missing_impl_members_inner(
148148

149149
let target = impl_def.syntax().text_range();
150150
acc.add(AssistId::quick_fix(assist_id), label, target, |edit| {
151-
let mut editor = edit.make_editor(impl_def.syntax());
151+
let editor = edit.make_editor(impl_def.syntax());
152+
let make = editor.make();
152153
let new_item = add_trait_assoc_items_to_impl(
153-
editor.make(),
154+
make,
154155
&ctx.sema,
155156
ctx.config,
156157
&missing_items,
@@ -166,7 +167,7 @@ fn add_missing_impl_members_inner(
166167
let mut first_new_item = if let DefaultMethods::No = mode
167168
&& let ast::AssocItem::Fn(func) = &first_new_item
168169
&& let Some(body) = try_gen_trait_body(
169-
editor.make(),
170+
make,
170171
ctx,
171172
func,
172173
trait_ref,
@@ -175,7 +176,7 @@ fn add_missing_impl_members_inner(
175176
)
176177
&& let Some(func_body) = func.body()
177178
{
178-
let (mut func_editor, _) = SyntaxEditor::new(first_new_item.syntax().clone());
179+
let (func_editor, _) = SyntaxEditor::new(first_new_item.syntax().clone());
179180
func_editor.replace(func_body.syntax(), body.syntax());
180181
ast::AssocItem::cast(func_editor.finish().new_root().clone())
181182
} else {
@@ -189,12 +190,12 @@ fn add_missing_impl_members_inner(
189190
.collect::<Vec<_>>();
190191

191192
if let Some(assoc_item_list) = impl_def.assoc_item_list() {
192-
assoc_item_list.add_items(&mut editor, new_assoc_items);
193+
assoc_item_list.add_items(&editor, new_assoc_items);
193194
} else {
194-
let assoc_item_list = editor.make().assoc_item_list(new_assoc_items);
195+
let assoc_item_list = make.assoc_item_list(new_assoc_items);
195196
editor.insert_all(
196197
Position::after(impl_def.syntax()),
197-
vec![editor.make().whitespace(" ").into(), assoc_item_list.syntax().clone().into()],
198+
vec![make.whitespace(" ").into(), assoc_item_list.syntax().clone().into()],
198199
);
199200
first_new_item = assoc_item_list.assoc_items().next();
200201
}

crates/ide-assists/src/handlers/add_missing_match_arms.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -271,12 +271,12 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
271271
}
272272
};
273273

274-
let mut editor = builder.make_editor(&old_place);
274+
let editor = builder.make_editor(&old_place);
275275
let mut arms_edit = ArmsEdit { match_arm_list, place: old_place, last_arm: None };
276276

277-
arms_edit.remove_wildcard_arms(ctx, &mut editor);
278-
arms_edit.add_comma_after_last_arm(ctx, &make, &mut editor);
279-
arms_edit.append_arms(&missing_arms, &make, &mut editor);
277+
arms_edit.remove_wildcard_arms(ctx, &editor);
278+
arms_edit.add_comma_after_last_arm(ctx, &make, &editor);
279+
arms_edit.append_arms(&missing_arms, &make, &editor);
280280

281281
if let Some(cap) = ctx.config.snippet_cap {
282282
if let Some(it) = missing_arms
@@ -357,7 +357,7 @@ struct ArmsEdit {
357357
}
358358

359359
impl ArmsEdit {
360-
fn remove_wildcard_arms(&mut self, ctx: &AssistContext<'_>, editor: &mut SyntaxEditor) {
360+
fn remove_wildcard_arms(&mut self, ctx: &AssistContext<'_>, editor: &SyntaxEditor) {
361361
for arm in self.match_arm_list.arms() {
362362
if !matches!(arm.pat(), Some(Pat::WildcardPat(_))) {
363363
self.last_arm = Some(arm);
@@ -386,7 +386,7 @@ impl ArmsEdit {
386386
}
387387
}
388388

389-
fn append_arms(&self, arms: &[ast::MatchArm], make: &SyntaxFactory, editor: &mut SyntaxEditor) {
389+
fn append_arms(&self, arms: &[ast::MatchArm], make: &SyntaxFactory, editor: &SyntaxEditor) {
390390
let Some(mut before) = self.place.last_token() else {
391391
stdx::never!("match arm list not contain any token");
392392
return;
@@ -419,7 +419,7 @@ impl ArmsEdit {
419419
&self,
420420
ctx: &AssistContext<'_>,
421421
make: &SyntaxFactory,
422-
editor: &mut SyntaxEditor,
422+
editor: &SyntaxEditor,
423423
) {
424424
if let Some(last_arm) = &self.last_arm
425425
&& last_arm.comma_token().is_none()

crates/ide-assists/src/handlers/add_turbo_fish.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,21 +93,23 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
9393
"Add `: _` before assignment operator",
9494
ident.text_range(),
9595
|builder| {
96-
let mut editor = builder.make_editor(let_stmt.syntax());
96+
let editor = builder.make_editor(let_stmt.syntax());
97+
let make = editor.make();
9798

9899
if let_stmt.semicolon_token().is_none() {
99100
editor.insert(
100101
Position::last_child_of(let_stmt.syntax()),
101-
editor.make().token(syntax::SyntaxKind::SEMICOLON),
102+
make.token(syntax::SyntaxKind::SEMICOLON),
102103
);
103104
}
104105

105-
let placeholder_ty = editor.make().ty_placeholder();
106+
let make = editor.make();
107+
let placeholder_ty = make.ty_placeholder();
106108

107109
if let Some(pat) = let_stmt.pat() {
108110
let elements = vec![
109-
editor.make().token(syntax::SyntaxKind::COLON).into(),
110-
editor.make().whitespace(" ").into(),
111+
make.token(syntax::SyntaxKind::COLON).into(),
112+
make.whitespace(" ").into(),
111113
placeholder_ty.syntax().clone().into(),
112114
];
113115
editor.insert_all(Position::after(pat.syntax()), elements);
@@ -140,7 +142,7 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
140142
ident.text_range(),
141143
|builder| {
142144
builder.trigger_parameter_hints();
143-
let mut editor = match &turbofish_target {
145+
let editor = match &turbofish_target {
144146
Either::Left(it) => builder.make_editor(it.syntax()),
145147
Either::Right(it) => builder.make_editor(it.syntax()),
146148
};

crates/ide-assists/src/handlers/apply_demorgan.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
8080
_ => return None,
8181
};
8282

83-
let (mut editor, demorganed) = SyntaxEditor::with_ast_node(&bin_expr);
84-
editor.replace(demorganed.op_token()?, editor.make().token(inv_token));
83+
let (editor, demorganed) = SyntaxEditor::with_ast_node(&bin_expr);
84+
let make = editor.make();
85+
editor.replace(demorganed.op_token()?, make.token(inv_token));
8586

8687
let mut exprs = VecDeque::from([
8788
(bin_expr.lhs()?, demorganed.lhs()?, prec),
@@ -92,23 +93,23 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
9293
if let BinExpr(bin_expr) = &expr {
9394
if let BinExpr(cbin_expr) = &demorganed {
9495
if op == bin_expr.op_kind()? {
95-
editor.replace(cbin_expr.op_token()?, editor.make().token(inv_token));
96+
editor.replace(cbin_expr.op_token()?, make.token(inv_token));
9697
exprs.push_back((bin_expr.lhs()?, cbin_expr.lhs()?, prec));
9798
exprs.push_back((bin_expr.rhs()?, cbin_expr.rhs()?, prec));
9899
} else {
99-
let mut inv = invert_boolean_expression(editor.make(), expr);
100+
let mut inv = invert_boolean_expression(make, expr);
100101
if precedence(&inv).needs_parentheses_in(prec) {
101-
inv = editor.make().expr_paren(inv).into();
102+
inv = make.expr_paren(inv).into();
102103
}
103104
editor.replace(demorganed.syntax(), inv.syntax());
104105
}
105106
} else {
106107
return None;
107108
}
108109
} else {
109-
let mut inv = invert_boolean_expression(editor.make(), demorganed.clone());
110+
let mut inv = invert_boolean_expression(make, demorganed.clone());
110111
if precedence(&inv).needs_parentheses_in(prec) {
111-
inv = editor.make().expr_paren(inv).into();
112+
inv = make.expr_paren(inv).into();
112113
}
113114
editor.replace(demorganed.syntax(), inv.syntax());
114115
}
@@ -123,7 +124,8 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
123124
"Apply De Morgan's law",
124125
op_range,
125126
|builder| {
126-
let mut editor = builder.make_editor(bin_expr.syntax());
127+
let editor = builder.make_editor(bin_expr.syntax());
128+
let make = editor.make();
127129

128130
let (target_node, result_expr) = if let Some(neg_expr) = bin_expr
129131
.syntax()
@@ -139,17 +141,17 @@ pub(crate) fn apply_demorgan(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
139141
bin_expr.syntax().parent().and_then(ast::ParenExpr::cast)
140142
{
141143
cov_mark::hit!(demorgan_double_parens);
142-
(paren_expr.syntax().clone(), add_bang_paren(editor.make(), demorganed))
144+
(paren_expr.syntax().clone(), add_bang_paren(make, demorganed))
143145
} else {
144-
(bin_expr.syntax().clone(), add_bang_paren(editor.make(), demorganed))
146+
(bin_expr.syntax().clone(), add_bang_paren(make, demorganed))
145147
};
146148

147149
let final_expr = if target_node
148150
.parent()
149151
.is_some_and(|p| result_expr.needs_parens_in_place_of(&p, &target_node))
150152
{
151153
cov_mark::hit!(demorgan_keep_parens_for_op_precedence2);
152-
editor.make().expr_paren(result_expr).into()
154+
make.expr_paren(result_expr).into()
153155
} else {
154156
result_expr
155157
};
@@ -202,17 +204,18 @@ pub(crate) fn apply_demorgan_iterator(acc: &mut Assists, ctx: &AssistContext<'_>
202204
label,
203205
op_range,
204206
|builder| {
205-
let mut editor = builder.make_editor(method_call.syntax());
207+
let editor = builder.make_editor(method_call.syntax());
208+
let make = editor.make();
206209
// replace the method name
207210
let new_name = match name.text().as_str() {
208-
"all" => editor.make().name_ref("any"),
209-
"any" => editor.make().name_ref("all"),
211+
"all" => make.name_ref("any"),
212+
"any" => make.name_ref("all"),
210213
_ => unreachable!(),
211214
};
212215
editor.replace(name.syntax(), new_name.syntax());
213216

214217
// negate all tail expressions in the closure body
215-
let tail_cb = &mut |e: &_| tail_cb_impl(&mut editor, e);
218+
let tail_cb = &mut |e: &_| tail_cb_impl(&editor, e);
216219
walk_expr(&closure_body, &mut |expr| {
217220
if let ast::Expr::ReturnExpr(ret_expr) = expr
218221
&& let Some(ret_expr_arg) = &ret_expr.expr()
@@ -233,10 +236,7 @@ pub(crate) fn apply_demorgan_iterator(acc: &mut Assists, ctx: &AssistContext<'_>
233236
prefix_expr.op_token().expect("prefix expression always has an operator"),
234237
);
235238
} else {
236-
editor.insert(
237-
Position::before(method_call.syntax()),
238-
editor.make().token(SyntaxKind::BANG),
239-
);
239+
editor.insert(Position::before(method_call.syntax()), make.token(SyntaxKind::BANG));
240240
}
241241
builder.add_file_edits(ctx.vfs_file_id(), editor);
242242
},
@@ -265,7 +265,7 @@ fn validate_method_call_expr(
265265
it_type.impls_trait(sema.db, iter_trait, &[]).then_some((name_ref, arg_expr))
266266
}
267267

268-
fn tail_cb_impl(editor: &mut SyntaxEditor, e: &ast::Expr) {
268+
fn tail_cb_impl(editor: &SyntaxEditor, e: &ast::Expr) {
269269
match e {
270270
ast::Expr::BreakExpr(break_expr) => {
271271
if let Some(break_expr_arg) = break_expr.expr() {

0 commit comments

Comments
 (0)