diff options
Diffstat (limited to 'crates/ra_hir/src/code_model_impl')
-rw-r--r-- | crates/ra_hir/src/code_model_impl/function.rs | 5 | ||||
-rw-r--r-- | crates/ra_hir/src/code_model_impl/module.rs | 33 |
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 | ||
3 | use std::sync::Arc; | 3 | use std::sync::Arc; |
4 | 4 | ||
5 | use ra_db::Cancelable; | ||
6 | use ra_syntax::{TreeArc, ast::{self, NameOwner}}; | 5 | use ra_syntax::{TreeArc, ast::{self, NameOwner}}; |
7 | 6 | ||
8 | use crate::{ | 7 | use 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( |