self.id.module(db)
}
+ pub fn ty(self, db: &impl HirDatabase) -> Ty {
+ db.type_for_def(self.into(), Namespace::Types)
+ }
+
// FIXME move to a more general type
/// Builds a resolver for type references inside this union.
pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
acc.add_resolution(ctx, name.to_string(), &res.def.map(hir::Resolution::Def));
}
}
- hir::ModuleDef::Enum(e) => {
- for variant in e.variants(ctx.db) {
- acc.add_enum_variant(ctx, variant);
+ hir::ModuleDef::Enum(_) | hir::ModuleDef::Struct(_) | hir::ModuleDef::Union(_) => {
+ if let hir::ModuleDef::Enum(e) = def {
+ for variant in e.variants(ctx.db) {
+ acc.add_enum_variant(ctx, variant);
+ }
}
- }
- hir::ModuleDef::Struct(s) => {
- let ty = s.ty(ctx.db);
+ let ty = match def {
+ hir::ModuleDef::Enum(e) => e.ty(ctx.db),
+ hir::ModuleDef::Struct(s) => s.ty(ctx.db),
+ hir::ModuleDef::Union(u) => u.ty(ctx.db),
+ _ => unreachable!(),
+ };
let krate = ctx.module.and_then(|m| m.krate(ctx.db));
if let Some(krate) = krate {
ty.iterate_impl_items(ctx.db, krate, |item| {
);
}
+ #[test]
+ fn completes_enum_associated_method() {
+ check_reference_completion(
+ "enum_associated_method",
+ "
+ //- /lib.rs
+ /// An enum
+ enum S {};
+
+ impl S {
+ /// An associated method
+ fn m() { }
+ }
+
+ fn foo() { let _ = S::<|> }
+ ",
+ );
+ }
+
+ #[test]
+ fn completes_union_associated_method() {
+ check_reference_completion(
+ "union_associated_method",
+ "
+ //- /lib.rs
+ /// A union
+ union U {};
+
+ impl U {
+ /// An associated method
+ fn m() { }
+ }
+
+ fn foo() { let _ = U::<|> }
+ ",
+ );
+ }
+
#[test]
fn completes_use_paths_across_crates() {
check_reference_completion(
--- /dev/null
+---
+created: "2019-06-29T10:30:34.110468474Z"
+creator: insta@0.8.1
+source: crates/ra_ide_api/src/completion/completion_item.rs
+expression: kind_completions
+---
+[
+ CompletionItem {
+ label: "m",
+ source_range: [100; 100),
+ delete: [100; 100),
+ insert: "m()$0",
+ kind: Function,
+ detail: "fn m()",
+ documentation: Documentation(
+ "An associated method",
+ ),
+ },
+]
--- /dev/null
+---
+created: "2019-06-29T10:37:44.968500164Z"
+creator: insta@0.8.1
+source: crates/ra_ide_api/src/completion/completion_item.rs
+expression: kind_completions
+---
+[
+ CompletionItem {
+ label: "m",
+ source_range: [101; 101),
+ delete: [101; 101),
+ insert: "m()$0",
+ kind: Function,
+ detail: "fn m()",
+ documentation: Documentation(
+ "An associated method",
+ ),
+ },
+]