Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-diagnostics/src/handlers/missing_fields.rs')
-rw-r--r--crates/ide-diagnostics/src/handlers/missing_fields.rs26
1 files changed, 18 insertions, 8 deletions
diff --git a/crates/ide-diagnostics/src/handlers/missing_fields.rs b/crates/ide-diagnostics/src/handlers/missing_fields.rs
index 6b02111016..a354d123f5 100644
--- a/crates/ide-diagnostics/src/handlers/missing_fields.rs
+++ b/crates/ide-diagnostics/src/handlers/missing_fields.rs
@@ -5,9 +5,13 @@ use hir::{
sym,
};
use ide_db::{
- FxHashMap, assists::Assist, famous_defs::FamousDefs,
- imports::import_assets::item_for_path_search, source_change::SourceChange,
- syntax_helpers::tree_diff::diff, text_edit::TextEdit,
+ FxHashMap,
+ assists::{Assist, ExprFillDefaultMode},
+ famous_defs::FamousDefs,
+ imports::import_assets::item_for_path_search,
+ source_change::SourceChange,
+ syntax_helpers::tree_diff::diff,
+ text_edit::TextEdit,
use_trivial_constructor::use_trivial_constructor,
};
use stdx::format_to;
@@ -102,8 +106,9 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::MissingFields) -> Option<Vec<Ass
});
let generate_fill_expr = |ty: &Type| match ctx.config.expr_fill_default {
- crate::ExprFillDefaultMode::Todo => make::ext::expr_todo(),
- crate::ExprFillDefaultMode::Default => {
+ ExprFillDefaultMode::Todo => make::ext::expr_todo(),
+ ExprFillDefaultMode::Underscore => make::ext::expr_underscore(),
+ ExprFillDefaultMode::Default => {
get_default_constructor(ctx, d, ty).unwrap_or_else(make::ext::expr_todo)
}
};
@@ -158,9 +163,14 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::MissingFields) -> Option<Vec<Ass
let old_field_list = field_list_parent.record_pat_field_list()?;
let new_field_list = old_field_list.clone_for_update();
for (f, _) in missing_fields.iter() {
- let field = make::record_pat_field_shorthand(make::name_ref(
- &f.name(ctx.sema.db).display_no_db(ctx.edition).to_smolstr(),
- ));
+ let field = make::record_pat_field_shorthand(
+ make::ident_pat(
+ false,
+ false,
+ make::name(&f.name(ctx.sema.db).display_no_db(ctx.edition).to_smolstr()),
+ )
+ .into(),
+ );
new_field_list.add_field(field.clone_for_update());
}
build_text_edit(new_field_list.syntax(), old_field_list.syntax())