Skip to content

Commit e4b6541

Browse files
7708: handle both FamousDefs fixture and plain code.
Also fix typo in example.
1 parent 9a84daf commit e4b6541

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

crates/ide_assists/src/handlers/generate_default_from_new.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ pub(crate) fn generate_default_from_new(acc: &mut Assists, ctx: &AssistContext)
5353
}
5454

5555
let impl_ = fn_node.syntax().ancestors().into_iter().find_map(ast::Impl::cast)?;
56-
let implements_default = is_default_implemented(ctx, &impl_)?;
57-
if implements_default {
56+
if is_default_implemented(ctx, &impl_) {
5857
return None;
5958
}
6059

@@ -84,14 +83,25 @@ impl Default for {} {{
8483
)
8584
}
8685

87-
fn is_default_implemented(ctx: &AssistContext, impl_: &Impl) -> Option<bool> {
86+
fn is_default_implemented(ctx: &AssistContext, impl_: &Impl) -> bool {
8887
let db = ctx.sema.db;
89-
let impl_def = ctx.sema.to_def(impl_)?;
88+
let impl_ = ctx.sema.to_def(impl_);
89+
let impl_def;
90+
match impl_ {
91+
Some(value) => impl_def = value,
92+
None => return false,
93+
}
94+
9095
let ty = impl_def.target_ty(db);
9196
let krate = impl_def.module(db).krate();
92-
let default_trait = FamousDefs(&ctx.sema, Some(krate)).core_default_Default()?;
93-
let implements_default = ty.impls_trait(db, default_trait, &[]);
94-
Some(implements_default)
97+
let default = FamousDefs(&ctx.sema, Some(krate)).core_default_Default();
98+
let default_trait;
99+
match default {
100+
Some(value) => default_trait = value,
101+
None => return false,
102+
}
103+
104+
ty.impls_trait(db, default_trait, &[])
95105
}
96106

97107
#[cfg(test)]
@@ -205,7 +215,7 @@ impl Exmaple {
205215
r#"
206216
struct Example { _inner: () }
207217
208-
impl Exmaple {
218+
impl Example {
209219
pub fn n$0ew() -> Self {
210220
Self { _inner: () }
211221
}

0 commit comments

Comments
 (0)