Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 27444ed

Browse files
committed
Migrate promote_local_to_const to mutable ast
1 parent 6ab2788 commit 27444ed

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

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

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@ use ide_db::{
88
use stdx::to_upper_snake_case;
99
use syntax::{
1010
ast::{self, make, HasName},
11-
AstNode, WalkEvent,
11+
ted, AstNode, WalkEvent,
1212
};
1313

14-
use crate::{
15-
assist_context::{AssistContext, Assists},
16-
utils::{render_snippet, Cursor},
17-
};
14+
use crate::assist_context::{AssistContext, Assists};
1815

1916
// Assist: promote_local_to_const
2017
//
@@ -75,24 +72,28 @@ pub(crate) fn promote_local_to_const(acc: &mut Assists, ctx: &AssistContext<'_>)
7572
AssistId("promote_local_to_const", AssistKind::Refactor),
7673
"Promote local to constant",
7774
target,
78-
|builder| {
75+
|edit| {
7976
let name = to_upper_snake_case(&name.to_string());
8077
let usages = Definition::Local(local).usages(&ctx.sema).all();
8178
if let Some(usages) = usages.references.get(&ctx.file_id()) {
8279
for usage in usages {
83-
builder.replace(usage.range, &name);
80+
let Some(usage) = usage.name.as_name_ref().cloned() else {
81+
continue
82+
};
83+
let usage = edit.make_mut(usage);
84+
ted::replace(usage.syntax(), make::name_ref(&name).clone_for_update().syntax());
8485
}
8586
}
8687

87-
let item = make::item_const(None, make::name(&name), make::ty(&ty), initializer);
88-
match ctx.config.snippet_cap.zip(item.name()) {
89-
Some((cap, name)) => builder.replace_snippet(
90-
cap,
91-
target,
92-
render_snippet(cap, item.syntax(), Cursor::Before(name.syntax())),
93-
),
94-
None => builder.replace(target, item.to_string()),
88+
let item = make::item_const(None, make::name(&name), make::ty(&ty), initializer)
89+
.clone_for_update();
90+
let let_stmt = edit.make_mut(let_stmt);
91+
92+
if let Some((cap, name)) = ctx.config.snippet_cap.zip(item.name()) {
93+
edit.add_tabstop_before(cap, name);
9594
}
95+
96+
ted::replace(let_stmt.syntax(), item.syntax());
9697
},
9798
)
9899
}

0 commit comments

Comments
 (0)