Implement type inference for enum variants

This commit is contained in:
Marcus Klaas de Vries 2019-01-08 16:01:19 +01:00
parent aca14c591f
commit 978de5cf8b
12 changed files with 218 additions and 45 deletions

View file

@ -21,14 +21,20 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) -> C
.add_to(acc)
});
}
hir::Def::Enum(e) => e
.variants(ctx.db)?
.into_iter()
.for_each(|(name, _variant)| {
CompletionItem::new(CompletionKind::Reference, name.to_string())
.kind(CompletionItemKind::EnumVariant)
.add_to(acc)
}),
hir::Def::Enum(e) => {
e.variants(ctx.db)?
.unwrap_or(vec![])
.into_iter()
.for_each(|variant| {
let variant_name = variant.name(ctx.db);
if let Ok(Some(name)) = variant_name {
CompletionItem::new(CompletionKind::Reference, name.to_string())
.kind(CompletionItemKind::EnumVariant)
.add_to(acc)
}
})
}
_ => return Ok(()),
};
Ok(())