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.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/ide-db/src/defs.rs b/crates/ide-db/src/defs.rs index bea6f24523..540cc70dd5 100644 --- a/crates/ide-db/src/defs.rs +++ b/crates/ide-db/src/defs.rs @@ -7,9 +7,9 @@ use arrayvec::ArrayVec; use hir::{ - Adt, AsAssocItem, AssocItem, BuiltinAttr, BuiltinType, Const, Field, Function, GenericParam, - HasVisibility, Impl, ItemInNs, Label, Local, Macro, Module, ModuleDef, Name, PathResolution, - Semantics, Static, ToolModule, Trait, TypeAlias, Variant, Visibility, + Adt, AsAssocItem, AssocItem, BuiltinAttr, BuiltinType, Const, Crate, Field, Function, + GenericParam, HasVisibility, Impl, ItemInNs, Label, Local, Macro, Module, ModuleDef, Name, + PathResolution, Semantics, Static, ToolModule, Trait, TypeAlias, Variant, Visibility, }; use stdx::impl_from; use syntax::{ @@ -46,6 +46,13 @@ impl Definition { self.module(db).map(|it| it.path_to_root(db).into_iter().rev()) } + pub fn krate(&self, db: &RootDatabase) -> Option<Crate> { + Some(match self { + Definition::Module(m) => m.krate(), + _ => self.module(db)?.krate(), + }) + } + pub fn module(&self, db: &RootDatabase) -> Option<Module> { let module = match self { Definition::Macro(it) => it.module(db), |