Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/defs.rs')
-rw-r--r--crates/ide-db/src/defs.rs34
1 files changed, 24 insertions, 10 deletions
diff --git a/crates/ide-db/src/defs.rs b/crates/ide-db/src/defs.rs
index d95d94ec72..1b6ff8bad5 100644
--- a/crates/ide-db/src/defs.rs
+++ b/crates/ide-db/src/defs.rs
@@ -8,11 +8,11 @@
use arrayvec::ArrayVec;
use either::Either;
use hir::{
- Adt, AsAssocItem, AssocItem, AttributeTemplate, BuiltinAttr, BuiltinType, Const, Crate,
- DefWithBody, DeriveHelper, DocLinkDef, ExternCrateDecl, Field, Function, GenericParam,
- HasVisibility, HirDisplay, Impl, Label, Local, Macro, Module, ModuleDef, Name, PathResolution,
- Semantics, Static, ToolModule, Trait, TraitAlias, TupleField, TypeAlias, Variant, VariantDef,
- Visibility,
+ Adt, AsAssocItem, AsExternAssocItem, AssocItem, AttributeTemplate, BuiltinAttr, BuiltinType,
+ Const, Crate, DefWithBody, DeriveHelper, DocLinkDef, ExternAssocItem, ExternCrateDecl, Field,
+ Function, GenericParam, HasVisibility, HirDisplay, Impl, Label, Local, Macro, Module,
+ ModuleDef, Name, PathResolution, Semantics, Static, ToolModule, Trait, TraitAlias, TupleField,
+ TypeAlias, Variant, VariantDef, Visibility,
};
use stdx::{format_to, impl_from};
use syntax::{
@@ -213,8 +213,8 @@ impl Definition {
})
}
- pub fn label(&self, db: &RootDatabase) -> Option<String> {
- let label = match *self {
+ pub fn label(&self, db: &RootDatabase) -> String {
+ match *self {
Definition::Macro(it) => it.display(db).to_string(),
Definition::Field(it) => it.display(db).to_string(),
Definition::TupleField(it) => it.display(db).to_string(),
@@ -241,7 +241,11 @@ impl Definition {
}
}
Definition::SelfType(impl_def) => {
- impl_def.self_ty(db).as_adt().and_then(|adt| Definition::Adt(adt).label(db))?
+ let self_ty = &impl_def.self_ty(db);
+ match self_ty.as_adt() {
+ Some(it) => it.display(db).to_string(),
+ None => self_ty.display(db).to_string(),
+ }
}
Definition::GenericParam(it) => it.display(db).to_string(),
Definition::Label(it) => it.name(db).display(db).to_string(),
@@ -249,8 +253,7 @@ impl Definition {
Definition::BuiltinAttr(it) => format!("#[{}]", it.name(db)),
Definition::ToolModule(it) => it.name(db).to_string(),
Definition::DeriveHelper(it) => format!("derive_helper {}", it.name(db).display(db)),
- };
- Some(label)
+ }
}
}
@@ -739,6 +742,17 @@ impl AsAssocItem for Definition {
}
}
+impl AsExternAssocItem for Definition {
+ fn as_extern_assoc_item(self, db: &dyn hir::db::HirDatabase) -> Option<ExternAssocItem> {
+ match self {
+ Definition::Function(it) => it.as_extern_assoc_item(db),
+ Definition::Static(it) => it.as_extern_assoc_item(db),
+ Definition::TypeAlias(it) => it.as_extern_assoc_item(db),
+ _ => None,
+ }
+ }
+}
+
impl From<AssocItem> for Definition {
fn from(assoc_item: AssocItem) -> Self {
match assoc_item {