Merge pull request #20136 from Hmikihiro/migrate-toggle_macro_delimiter

Migrate `toggle_macro_delimiter` Assist to use `SyntaxEditor`
This commit is contained in:
Laurențiu Nicola 2025-07-01 13:53:02 +00:00 committed by GitHub
commit aa16885e62
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,8 +1,7 @@
use ide_db::assists::AssistId; use ide_db::assists::AssistId;
use syntax::{ use syntax::{
AstNode, T, AstNode, T,
ast::{self, make}, ast::{self, syntax_factory::SyntaxFactory},
ted,
}; };
use crate::{AssistContext, Assists}; use crate::{AssistContext, Assists};
@ -37,8 +36,7 @@ pub(crate) fn toggle_macro_delimiter(acc: &mut Assists, ctx: &AssistContext<'_>)
RCur, RCur,
} }
let makro = ctx.find_node_at_offset::<ast::MacroCall>()?.clone_for_update(); let makro = ctx.find_node_at_offset::<ast::MacroCall>()?;
let makro_text_range = makro.syntax().text_range();
let cursor_offset = ctx.offset(); let cursor_offset = ctx.offset();
let semicolon = makro.semicolon_token(); let semicolon = makro.semicolon_token();
@ -71,24 +69,28 @@ pub(crate) fn toggle_macro_delimiter(acc: &mut Assists, ctx: &AssistContext<'_>)
}, },
token_tree.syntax().text_range(), token_tree.syntax().text_range(),
|builder| { |builder| {
let make = SyntaxFactory::with_mappings();
let mut editor = builder.make_editor(makro.syntax());
match token { match token {
MacroDelims::LPar | MacroDelims::RPar => { MacroDelims::LPar | MacroDelims::RPar => {
ted::replace(ltoken, make::token(T!['{'])); editor.replace(ltoken, make.token(T!['{']));
ted::replace(rtoken, make::token(T!['}'])); editor.replace(rtoken, make.token(T!['}']));
if let Some(sc) = semicolon { if let Some(sc) = semicolon {
ted::remove(sc); editor.delete(sc);
} }
} }
MacroDelims::LBra | MacroDelims::RBra => { MacroDelims::LBra | MacroDelims::RBra => {
ted::replace(ltoken, make::token(T!['('])); editor.replace(ltoken, make.token(T!['(']));
ted::replace(rtoken, make::token(T![')'])); editor.replace(rtoken, make.token(T![')']));
} }
MacroDelims::LCur | MacroDelims::RCur => { MacroDelims::LCur | MacroDelims::RCur => {
ted::replace(ltoken, make::token(T!['['])); editor.replace(ltoken, make.token(T!['[']));
ted::replace(rtoken, make::token(T![']'])); editor.replace(rtoken, make.token(T![']']));
} }
} }
builder.replace(makro_text_range, makro.syntax().text()); editor.add_mappings(make.finish_with_mappings());
builder.add_file_edits(ctx.vfs_file_id(), editor);
}, },
) )
} }