diff options
author | Aleksey Kladov <[email protected]> | 2019-01-18 13:36:56 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-01-19 12:37:25 +0000 |
commit | c0aeb5204c010a11db2015113a7858b517415de1 (patch) | |
tree | 0a41b5828fde247ce21af57c182235e935d3ffb8 /crates/ra_hir/src/nameres.rs | |
parent | b93c6bc5575db4acc5aa5867b6f0cc0dd37858f4 (diff) |
switched to lowerd module
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index aea95e08c..ab0a9041d 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -60,7 +60,7 @@ pub struct Resolution { | |||
60 | /// None for unresolved | 60 | /// None for unresolved |
61 | pub def_id: PerNs<DefId>, | 61 | pub def_id: PerNs<DefId>, |
62 | /// ident by whitch this is imported into local scope. | 62 | /// ident by whitch this is imported into local scope. |
63 | pub import: Option<NamedImport>, | 63 | pub import: Option<LoweredImport>, |
64 | } | 64 | } |
65 | 65 | ||
66 | #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] | 66 | #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] |
@@ -151,10 +151,10 @@ impl<T> PerNs<T> { | |||
151 | 151 | ||
152 | pub(crate) struct Resolver<'a, DB> { | 152 | pub(crate) struct Resolver<'a, DB> { |
153 | db: &'a DB, | 153 | db: &'a DB, |
154 | input: &'a FxHashMap<ModuleId, Arc<InputModuleItems>>, | 154 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, |
155 | source_root: SourceRootId, | 155 | source_root: SourceRootId, |
156 | module_tree: Arc<ModuleTree>, | 156 | module_tree: Arc<ModuleTree>, |
157 | processed_imports: FxHashSet<(ModuleId, usize)>, | 157 | processed_imports: FxHashSet<(ModuleId, LoweredImport)>, |
158 | result: ItemMap, | 158 | result: ItemMap, |
159 | } | 159 | } |
160 | 160 | ||
@@ -164,7 +164,7 @@ where | |||
164 | { | 164 | { |
165 | pub(crate) fn new( | 165 | pub(crate) fn new( |
166 | db: &'a DB, | 166 | db: &'a DB, |
167 | input: &'a FxHashMap<ModuleId, Arc<InputModuleItems>>, | 167 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, |
168 | source_root: SourceRootId, | 168 | source_root: SourceRootId, |
169 | module_tree: Arc<ModuleTree>, | 169 | module_tree: Arc<ModuleTree>, |
170 | ) -> Resolver<'a, DB> { | 170 | ) -> Resolver<'a, DB> { |
@@ -197,7 +197,7 @@ where | |||
197 | self.result | 197 | self.result |
198 | } | 198 | } |
199 | 199 | ||
200 | fn populate_module(&mut self, module_id: ModuleId, input: Arc<InputModuleItems>) { | 200 | fn populate_module(&mut self, module_id: ModuleId, input: Arc<LoweredModule>) { |
201 | let mut module_items = ModuleScope::default(); | 201 | let mut module_items = ModuleScope::default(); |
202 | 202 | ||
203 | // Populate extern crates prelude | 203 | // Populate extern crates prelude |
@@ -220,14 +220,14 @@ where | |||
220 | } | 220 | } |
221 | }; | 221 | }; |
222 | } | 222 | } |
223 | for import in input.imports.iter() { | 223 | for (import_id, import_data) in input.imports.iter() { |
224 | if let Some(name) = import.path.segments.iter().last() { | 224 | if let Some(name) = import_data.path.segments.iter().last() { |
225 | if let ImportKind::Named(import) = import.kind { | 225 | if !import_data.is_glob { |
226 | module_items.items.insert( | 226 | module_items.items.insert( |
227 | name.clone(), | 227 | name.clone(), |
228 | Resolution { | 228 | Resolution { |
229 | def_id: PerNs::none(), | 229 | def_id: PerNs::none(), |
230 | import: Some(import), | 230 | import: Some(import_id), |
231 | }, | 231 | }, |
232 | ); | 232 | ); |
233 | } | 233 | } |
@@ -281,23 +281,27 @@ where | |||
281 | } | 281 | } |
282 | 282 | ||
283 | fn resolve_imports(&mut self, module_id: ModuleId) { | 283 | fn resolve_imports(&mut self, module_id: ModuleId) { |
284 | for (i, import) in self.input[&module_id].imports.iter().enumerate() { | 284 | for (import_id, import_data) in self.input[&module_id].imports.iter() { |
285 | if self.processed_imports.contains(&(module_id, i)) { | 285 | if self.processed_imports.contains(&(module_id, import_id)) { |
286 | // already done | 286 | // already done |
287 | continue; | 287 | continue; |
288 | } | 288 | } |
289 | if self.resolve_import(module_id, import) { | 289 | if self.resolve_import(module_id, import_id, import_data) { |
290 | log::debug!("import {:?} resolved (or definite error)", import); | 290 | log::debug!("import {:?} resolved (or definite error)", import_id); |
291 | self.processed_imports.insert((module_id, i)); | 291 | self.processed_imports.insert((module_id, import_id)); |
292 | } | 292 | } |
293 | } | 293 | } |
294 | } | 294 | } |
295 | 295 | ||
296 | fn resolve_import(&mut self, module_id: ModuleId, import: &Import) -> bool { | 296 | fn resolve_import( |
297 | &mut self, | ||
298 | module_id: ModuleId, | ||
299 | import_id: LoweredImport, | ||
300 | import: &ImportData, | ||
301 | ) -> bool { | ||
297 | log::debug!("resolving import: {:?}", import); | 302 | log::debug!("resolving import: {:?}", import); |
298 | let ptr = match import.kind { | 303 | if import.is_glob { |
299 | ImportKind::Glob => return false, | 304 | return false; |
300 | ImportKind::Named(ptr) => ptr, | ||
301 | }; | 305 | }; |
302 | 306 | ||
303 | let mut curr: ModuleId = match import.path.kind { | 307 | let mut curr: ModuleId = match import.path.kind { |
@@ -358,7 +362,7 @@ where | |||
358 | self.update(module_id, |items| { | 362 | self.update(module_id, |items| { |
359 | let res = Resolution { | 363 | let res = Resolution { |
360 | def_id, | 364 | def_id, |
361 | import: Some(ptr), | 365 | import: Some(import_id), |
362 | }; | 366 | }; |
363 | items.items.insert(name.clone(), res); | 367 | items.items.insert(name.clone(), res); |
364 | }); | 368 | }); |
@@ -394,7 +398,7 @@ where | |||
394 | self.update(module_id, |items| { | 398 | self.update(module_id, |items| { |
395 | let res = Resolution { | 399 | let res = Resolution { |
396 | def_id, | 400 | def_id, |
397 | import: Some(ptr), | 401 | import: Some(import_id), |
398 | }; | 402 | }; |
399 | items.items.insert(name.clone(), res); | 403 | items.items.insert(name.clone(), res); |
400 | }) | 404 | }) |