|
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