Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/add_missing_match_arms.rs')
-rw-r--r--crates/ide-assists/src/handlers/add_missing_match_arms.rs29
1 files changed, 19 insertions, 10 deletions
diff --git a/crates/ide-assists/src/handlers/add_missing_match_arms.rs b/crates/ide-assists/src/handlers/add_missing_match_arms.rs
index 667a1d7813..632fe0d72c 100644
--- a/crates/ide-assists/src/handlers/add_missing_match_arms.rs
+++ b/crates/ide-assists/src/handlers/add_missing_match_arms.rs
@@ -80,16 +80,25 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_,
let module = scope.module();
let cfg = ctx.config.find_path_config(ctx.sema.is_nightly(scope.krate()));
let self_ty = if ctx.config.prefer_self_ty {
- scope.expression_store_owner().and_then(|def| {
- match def {
- hir::ExpressionStoreOwner::Body(def_with_body) => {
- def_with_body.as_assoc_item(ctx.db())
+ scope
+ .expression_store_owner()
+ .and_then(|def| {
+ match def {
+ hir::ExpressionStoreOwner::Body(def_with_body) => {
+ def_with_body.as_assoc_item(ctx.db())
+ }
+ hir::ExpressionStoreOwner::Signature(def) => def.as_assoc_item(ctx.db()),
+ hir::ExpressionStoreOwner::VariantFields(_) => None,
+ }?
+ .implementing_ty(ctx.db())
+ })
+ .map(|self_ty| {
+ if let Some(owner) = scope.generic_def() {
+ self_ty.try_rebase_into_owner(ctx.db(), owner).unwrap()
+ } else {
+ self_ty
}
- hir::ExpressionStoreOwner::Signature(def) => def.as_assoc_item(ctx.db()),
- hir::ExpressionStoreOwner::VariantFields(_) => None,
- }?
- .implementing_ty(ctx.db())
- })
+ })
} else {
None
};
@@ -613,7 +622,7 @@ fn build_pat(
hir::StructKind::Tuple => {
let mut name_generator = suggest_name::NameGenerator::default();
let pats = fields.into_iter().map(|f| {
- let name = name_generator.for_type(&f.ty(db).to_type(db), db, edition);
+ let name = name_generator.for_type(&f.ty(db), db, edition);
match name {
Some(name) => make.ident_pat(false, false, make.name(&name)).into(),
None => make.wildcard_pat().into(),