mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge pull request #20136 from Hmikihiro/migrate-toggle_macro_delimiter
Migrate `toggle_macro_delimiter` Assist to use `SyntaxEditor`
This commit is contained in:
commit
aa16885e62
@ -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);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user