aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model_impl
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model_impl')
-rw-r--r--crates/ra_hir/src/code_model_impl/function.rs5
-rw-r--r--crates/ra_hir/src/code_model_impl/module.rs33
2 files changed, 16 insertions, 22 deletions
diff --git a/crates/ra_hir/src/code_model_impl/function.rs b/crates/ra_hir/src/code_model_impl/function.rs
index d34803e32..66d7e1713 100644
--- a/crates/ra_hir/src/code_model_impl/function.rs
+++ b/crates/ra_hir/src/code_model_impl/function.rs
@@ -2,7 +2,6 @@ mod scope;
2 2
3use std::sync::Arc; 3use std::sync::Arc;
4 4
5use ra_db::Cancelable;
6use ra_syntax::{TreeArc, ast::{self, NameOwner}}; 5use ra_syntax::{TreeArc, ast::{self, NameOwner}};
7 6
8use crate::{ 7use crate::{
@@ -24,12 +23,12 @@ impl Function {
24 db.body_hir(self.def_id) 23 db.body_hir(self.def_id)
25 } 24 }
26 25
27 pub(crate) fn module(&self, db: &impl HirDatabase) -> Cancelable<Module> { 26 pub(crate) fn module(&self, db: &impl HirDatabase) -> Module {
28 self.def_id.module(db) 27 self.def_id.module(db)
29 } 28 }
30 29
31 /// The containing impl block, if this is a method. 30 /// The containing impl block, if this is a method.
32 pub(crate) fn impl_block(&self, db: &impl HirDatabase) -> Cancelable<Option<ImplBlock>> { 31 pub(crate) fn impl_block(&self, db: &impl HirDatabase) -> Option<ImplBlock> {
33 self.def_id.impl_block(db) 32 self.def_id.impl_block(db)
34 } 33 }
35} 34}
diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs
index 331b0500e..04301ae53 100644
--- a/crates/ra_hir/src/code_model_impl/module.rs
+++ b/crates/ra_hir/src/code_model_impl/module.rs
@@ -114,18 +114,13 @@ impl Module {
114 } 114 }
115 115
116 /// Returns a `ModuleScope`: a set of items, visible in this module. 116 /// Returns a `ModuleScope`: a set of items, visible in this module.
117 pub fn scope_impl(&self, db: &impl HirDatabase) -> Cancelable<ModuleScope> { 117 pub fn scope_impl(&self, db: &impl HirDatabase) -> ModuleScope {
118 let loc = self.def_id.loc(db); 118 let loc = self.def_id.loc(db);
119 let item_map = db.item_map(loc.source_root_id)?; 119 let item_map = db.item_map(loc.source_root_id);
120 let res = item_map.per_module[&loc.module_id].clone(); 120 item_map.per_module[&loc.module_id].clone()
121 Ok(res)
122 } 121 }
123 122
124 pub fn resolve_path_impl( 123 pub fn resolve_path_impl(&self, db: &impl HirDatabase, path: &Path) -> PerNs<DefId> {
125 &self,
126 db: &impl HirDatabase,
127 path: &Path,
128 ) -> Cancelable<PerNs<DefId>> {
129 let mut curr_per_ns = PerNs::types( 124 let mut curr_per_ns = PerNs::types(
130 match path.kind { 125 match path.kind {
131 PathKind::Crate => self.crate_root(db), 126 PathKind::Crate => self.crate_root(db),
@@ -134,7 +129,7 @@ impl Module {
134 if let Some(p) = self.parent(db) { 129 if let Some(p) = self.parent(db) {
135 p 130 p
136 } else { 131 } else {
137 return Ok(PerNs::none()); 132 return PerNs::none();
138 } 133 }
139 } 134 }
140 } 135 }
@@ -146,7 +141,7 @@ impl Module {
146 let curr = if let Some(r) = curr_per_ns.as_ref().take_types() { 141 let curr = if let Some(r) = curr_per_ns.as_ref().take_types() {
147 r 142 r
148 } else { 143 } else {
149 return Ok(PerNs::none()); 144 return PerNs::none();
150 }; 145 };
151 let module = match curr.resolve(db) { 146 let module = match curr.resolve(db) {
152 Def::Module(it) => it, 147 Def::Module(it) => it,
@@ -157,28 +152,28 @@ impl Module {
157 e.variants(db).into_iter().find(|(n, _variant)| n == name); 152 e.variants(db).into_iter().find(|(n, _variant)| n == name);
158 153
159 if let Some((_n, variant)) = matching_variant { 154 if let Some((_n, variant)) = matching_variant {
160 return Ok(PerNs::both(variant.def_id(), e.def_id())); 155 return PerNs::both(variant.def_id(), e.def_id());
161 } else { 156 } else {
162 return Ok(PerNs::none()); 157 return PerNs::none();
163 } 158 }
164 } else if segments.len() == idx { 159 } else if segments.len() == idx {
165 // enum 160 // enum
166 return Ok(PerNs::types(e.def_id())); 161 return PerNs::types(e.def_id());
167 } else { 162 } else {
168 // malformed enum? 163 // malformed enum?
169 return Ok(PerNs::none()); 164 return PerNs::none();
170 } 165 }
171 } 166 }
172 _ => return Ok(PerNs::none()), 167 _ => return PerNs::none(),
173 }; 168 };
174 let scope = module.scope(db)?; 169 let scope = module.scope(db);
175 curr_per_ns = if let Some(r) = scope.get(&name) { 170 curr_per_ns = if let Some(r) = scope.get(&name) {
176 r.def_id 171 r.def_id
177 } else { 172 } else {
178 return Ok(PerNs::none()); 173 return PerNs::none();
179 }; 174 };
180 } 175 }
181 Ok(curr_per_ns) 176 curr_per_ns
182 } 177 }
183 178
184 pub fn problems_impl( 179 pub fn problems_impl(