aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir')
-rw-r--r--crates/ra_hir/src/code_model.rs13
-rw-r--r--crates/ra_hir/src/from_id.rs16
-rw-r--r--crates/ra_hir/src/source_binder.rs4
3 files changed, 33 insertions, 0 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index cc42068a1..4da3db0d6 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -227,6 +227,19 @@ impl Module {
227 pub(crate) fn with_module_id(self, module_id: LocalModuleId) -> Module { 227 pub(crate) fn with_module_id(self, module_id: LocalModuleId) -> Module {
228 Module::new(self.krate(), module_id) 228 Module::new(self.krate(), module_id)
229 } 229 }
230
231 pub fn find_path(
232 self,
233 db: &impl DefDatabase,
234 item: ModuleDef,
235 ) -> Option<hir_def::path::ModPath> {
236 // FIXME expose namespace choice
237 hir_def::find_path::find_path(
238 db,
239 hir_def::item_scope::ItemInNs::Types(item.into()),
240 self.into(),
241 )
242 }
230} 243}
231 244
232#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 245#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs
index 75a1a7772..c16c17072 100644
--- a/crates/ra_hir/src/from_id.rs
+++ b/crates/ra_hir/src/from_id.rs
@@ -91,6 +91,22 @@ impl From<ModuleDefId> for ModuleDef {
91 } 91 }
92} 92}
93 93
94impl From<ModuleDef> for ModuleDefId {
95 fn from(id: ModuleDef) -> Self {
96 match id {
97 ModuleDef::Module(it) => ModuleDefId::ModuleId(it.into()),
98 ModuleDef::Function(it) => ModuleDefId::FunctionId(it.into()),
99 ModuleDef::Adt(it) => ModuleDefId::AdtId(it.into()),
100 ModuleDef::EnumVariant(it) => ModuleDefId::EnumVariantId(it.into()),
101 ModuleDef::Const(it) => ModuleDefId::ConstId(it.into()),
102 ModuleDef::Static(it) => ModuleDefId::StaticId(it.into()),
103 ModuleDef::Trait(it) => ModuleDefId::TraitId(it.into()),
104 ModuleDef::TypeAlias(it) => ModuleDefId::TypeAliasId(it.into()),
105 ModuleDef::BuiltinType(it) => ModuleDefId::BuiltinType(it),
106 }
107 }
108}
109
94impl From<DefWithBody> for DefWithBodyId { 110impl From<DefWithBody> for DefWithBodyId {
95 fn from(def: DefWithBody) -> Self { 111 fn from(def: DefWithBody) -> Self {
96 match def { 112 match def {
diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs
index 2c422af8b..71339565f 100644
--- a/crates/ra_hir/src/source_binder.rs
+++ b/crates/ra_hir/src/source_binder.rs
@@ -205,6 +205,10 @@ impl SourceAnalyzer {
205 } 205 }
206 } 206 }
207 207
208 pub fn module(&self) -> Option<crate::code_model::Module> {
209 Some(crate::code_model::Module { id: self.resolver.module_id()? })
210 }
211
208 fn expr_id(&self, expr: &ast::Expr) -> Option<ExprId> { 212 fn expr_id(&self, expr: &ast::Expr) -> Option<ExprId> {
209 let src = InFile { file_id: self.file_id, value: expr }; 213 let src = InFile { file_id: self.file_id, value: expr };
210 self.body_source_map.as_ref()?.node_expr(src) 214 self.body_source_map.as_ref()?.node_expr(src)