diff options
author | Aleksey Kladov <[email protected]> | 2018-11-27 16:56:03 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-11-27 16:56:03 +0000 |
commit | 192e2bbb0e5c772d43ec61d36de56a0f7062610e (patch) | |
tree | 160b6aecfabb2f7dac111763b35b6f52ba6ff25b /crates/ra_analysis/src/descriptors/mod.rs | |
parent | aa7fd563a4b8817223ac50fa22cd946ce354f47d (diff) |
resolve_path works with DefIds
Diffstat (limited to 'crates/ra_analysis/src/descriptors/mod.rs')
-rw-r--r-- | crates/ra_analysis/src/descriptors/mod.rs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/crates/ra_analysis/src/descriptors/mod.rs b/crates/ra_analysis/src/descriptors/mod.rs index 98094d9ee..7a1bcf447 100644 --- a/crates/ra_analysis/src/descriptors/mod.rs +++ b/crates/ra_analysis/src/descriptors/mod.rs | |||
@@ -13,9 +13,12 @@ use crate::{ | |||
13 | FileId, | 13 | FileId, |
14 | db::SyntaxDatabase, | 14 | db::SyntaxDatabase, |
15 | descriptors::function::{resolve_local_name, FnId, FnScopes}, | 15 | descriptors::function::{resolve_local_name, FnId, FnScopes}, |
16 | descriptors::module::{ModuleId, ModuleTree, ModuleSource, nameres::{ItemMap, InputModuleItems, FileItems}}, | 16 | descriptors::module::{ |
17 | ModuleId, ModuleTree, ModuleSource, ModuleDescriptor, | ||
18 | nameres::{ItemMap, InputModuleItems, FileItems} | ||
19 | }, | ||
17 | input::SourceRootId, | 20 | input::SourceRootId, |
18 | loc2id::IdDatabase, | 21 | loc2id::{IdDatabase, DefId, DefLoc}, |
19 | syntax_ptr::LocalSyntaxPtr, | 22 | syntax_ptr::LocalSyntaxPtr, |
20 | Cancelable, | 23 | Cancelable, |
21 | }; | 24 | }; |
@@ -67,6 +70,25 @@ salsa::query_group! { | |||
67 | } | 70 | } |
68 | } | 71 | } |
69 | 72 | ||
73 | pub(crate) enum Def { | ||
74 | Module(ModuleDescriptor), | ||
75 | Item, | ||
76 | } | ||
77 | |||
78 | impl DefId { | ||
79 | pub(crate) fn resolve(self, db: &impl DescriptorDatabase) -> Cancelable<Def> { | ||
80 | let loc = db.id_maps().def_loc(self); | ||
81 | let res = match loc { | ||
82 | DefLoc::Module { id, source_root } => { | ||
83 | let descr = ModuleDescriptor::new(db, source_root, id)?; | ||
84 | Def::Module(descr) | ||
85 | } | ||
86 | DefLoc::Item { .. } => Def::Item, | ||
87 | }; | ||
88 | Ok(res) | ||
89 | } | ||
90 | } | ||
91 | |||
70 | #[derive(Debug)] | 92 | #[derive(Debug)] |
71 | pub struct ReferenceDescriptor { | 93 | pub struct ReferenceDescriptor { |
72 | pub range: TextRange, | 94 | pub range: TextRange, |