mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
move whitespace manipulation inside AstEditor
This commit is contained in:
parent
82c3fe7d13
commit
895597d567
@ -78,26 +78,24 @@ fn add_missing_impl_members_inner(
|
|||||||
|
|
||||||
ctx.add_action(AssistId(assist_id), label, |edit| {
|
ctx.add_action(AssistId(assist_id), label, |edit| {
|
||||||
let n_existing_items = impl_item_list.impl_items().count();
|
let n_existing_items = impl_item_list.impl_items().count();
|
||||||
let mut ast_editor = AstEditor::new(impl_item_list);
|
let items: Vec<_> = missing_items
|
||||||
if n_existing_items == 0 {
|
.into_iter()
|
||||||
ast_editor.make_multiline();
|
.map(|it| match it.kind() {
|
||||||
}
|
|
||||||
|
|
||||||
for item in missing_items {
|
|
||||||
let it = match item.kind() {
|
|
||||||
ImplItemKind::FnDef(def) => {
|
ImplItemKind::FnDef(def) => {
|
||||||
strip_docstring(ImplItem::cast(add_body(def).syntax()).unwrap())
|
strip_docstring(ImplItem::cast(add_body(def).syntax()).unwrap())
|
||||||
}
|
}
|
||||||
_ => strip_docstring(item),
|
_ => strip_docstring(it),
|
||||||
};
|
})
|
||||||
ast_editor.append_item(&it)
|
.collect();
|
||||||
}
|
let mut ast_editor = AstEditor::new(impl_item_list);
|
||||||
|
|
||||||
|
ast_editor.append_items(items.iter().map(|it| &**it));
|
||||||
|
|
||||||
let first_new_item = ast_editor.ast().impl_items().nth(n_existing_items).unwrap();
|
let first_new_item = ast_editor.ast().impl_items().nth(n_existing_items).unwrap();
|
||||||
let cursor_poisition = first_new_item.syntax().range().start();
|
let cursor_position = first_new_item.syntax().range().start();
|
||||||
ast_editor.into_text_edit(edit.text_edit_builder());
|
ast_editor.into_text_edit(edit.text_edit_builder());
|
||||||
|
|
||||||
edit.set_cursor(cursor_poisition);
|
edit.set_cursor(cursor_position);
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.build()
|
ctx.build()
|
||||||
|
@ -85,10 +85,6 @@ impl AstEditor<ast::NamedFieldList> {
|
|||||||
self.insert_field(InsertPosition::Last, field)
|
self.insert_field(InsertPosition::Last, field)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn make_multiline(&mut self) {
|
|
||||||
self.do_make_multiline()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn insert_field(
|
pub fn insert_field(
|
||||||
&mut self,
|
&mut self,
|
||||||
position: InsertPosition<&'_ ast::NamedField>,
|
position: InsertPosition<&'_ ast::NamedField>,
|
||||||
@ -161,8 +157,12 @@ impl AstEditor<ast::NamedFieldList> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl AstEditor<ast::ItemList> {
|
impl AstEditor<ast::ItemList> {
|
||||||
pub fn make_multiline(&mut self) {
|
pub fn append_items<'a>(&mut self, items: impl Iterator<Item = &'a ast::ImplItem>) {
|
||||||
self.do_make_multiline()
|
let n_existing_items = self.ast().impl_items().count();
|
||||||
|
if n_existing_items == 0 {
|
||||||
|
self.do_make_multiline();
|
||||||
|
}
|
||||||
|
items.for_each(|it| self.append_item(it));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn append_item(&mut self, item: &ast::ImplItem) {
|
pub fn append_item(&mut self, item: &ast::ImplItem) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user