|
1 | 1 | use hir::{HasSource, InFile}; |
2 | 2 | use ide_db::assists::{AssistId, AssistKind}; |
3 | 3 | use syntax::{ |
4 | | - ast::{self, edit::IndentLevel}, |
5 | | - AstNode, TextSize, |
| 4 | + ast::{self, make}, |
| 5 | + AstNode, |
6 | 6 | }; |
7 | 7 |
|
8 | 8 | use crate::assist_context::{AssistContext, Assists}; |
@@ -65,26 +65,16 @@ fn add_variant_to_accumulator( |
65 | 65 | ) -> Option<()> { |
66 | 66 | let db = ctx.db(); |
67 | 67 | let InFile { file_id, value: enum_node } = adt.source(db)?.original_ast_node(db)?; |
68 | | - let enum_indent = IndentLevel::from_node(&enum_node.syntax()); |
69 | | - |
70 | | - let variant_list = enum_node.variant_list()?; |
71 | | - let offset = variant_list.syntax().text_range().end() - TextSize::of('}'); |
72 | | - let empty_enum = variant_list.variants().next().is_none(); |
73 | 68 |
|
| 69 | + let variant = make::variant(make::name(&name_ref.text()), None); |
74 | 70 | acc.add( |
75 | 71 | AssistId("generate_enum_variant", AssistKind::Generate), |
76 | 72 | "Generate variant", |
77 | 73 | target, |
78 | 74 | |builder| { |
79 | 75 | builder.edit_file(file_id.original_file(db)); |
80 | | - let text = format!( |
81 | | - "{maybe_newline}{indent_1}{name},\n{enum_indent}", |
82 | | - maybe_newline = if empty_enum { "\n" } else { "" }, |
83 | | - indent_1 = IndentLevel(1), |
84 | | - name = name_ref, |
85 | | - enum_indent = enum_indent |
86 | | - ); |
87 | | - builder.insert(offset, text) |
| 76 | + let node = builder.make_mut(enum_node); |
| 77 | + node.variant_list().map(|it| it.add_variant(variant.clone_for_update())); |
88 | 78 | }, |
89 | 79 | ) |
90 | 80 | } |
|
0 commit comments