ide_assists/handlers/
remove_mut.rs

1use syntax::{SyntaxKind, T};
2
3use crate::{AssistContext, AssistId, Assists};
4
5// Assist: remove_mut
6//
7// Removes the `mut` keyword.
8//
9// ```
10// impl Walrus {
11//     fn feed(&mut$0 self, amount: u32) {}
12// }
13// ```
14// ->
15// ```
16// impl Walrus {
17//     fn feed(&self, amount: u32) {}
18// }
19// ```
20pub(crate) fn remove_mut(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
21    let mut_token = ctx.find_token_syntax_at_offset(T![mut])?;
22
23    let target = mut_token.text_range();
24    acc.add(AssistId::refactor("remove_mut"), "Remove `mut` keyword", target, |builder| {
25        let mut editor = builder.make_editor(&mut_token.parent().unwrap());
26        match mut_token.next_token() {
27            Some(it) if it.kind() == SyntaxKind::WHITESPACE => editor.delete(it),
28            _ => (),
29        }
30        editor.delete(mut_token);
31        builder.add_file_edits(ctx.vfs_file_id(), editor);
32    })
33}