diff options
Diffstat (limited to 'crates/ra_hir_def/src/nameres/collector.rs')
-rw-r--r-- | crates/ra_hir_def/src/nameres/collector.rs | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs index 94da700ad..665dd106c 100644 --- a/crates/ra_hir_def/src/nameres/collector.rs +++ b/crates/ra_hir_def/src/nameres/collector.rs | |||
@@ -380,26 +380,35 @@ impl DefCollector<'_> { | |||
380 | 380 | ||
381 | while self.unresolved_imports.len() < n_previous_unresolved { | 381 | while self.unresolved_imports.len() < n_previous_unresolved { |
382 | n_previous_unresolved = self.unresolved_imports.len(); | 382 | n_previous_unresolved = self.unresolved_imports.len(); |
383 | let imports = std::mem::replace(&mut self.unresolved_imports, Vec::new()); | 383 | let mut imports = std::mem::replace(&mut self.unresolved_imports, Vec::new()); |
384 | for mut directive in imports { | 384 | for mut directive in &mut imports { |
385 | directive.status = self.resolve_import(directive.module_id, &directive.import); | 385 | directive.status = self.resolve_import(directive.module_id, &directive.import); |
386 | } | ||
386 | 387 | ||
387 | match directive.status { | 388 | let (glob_imports, non_glob_imports): (Vec<_>, Vec<_>) = |
388 | PartialResolvedImport::Indeterminate(_) => { | 389 | imports.into_iter().partition(|directive| directive.import.is_glob); |
389 | self.record_resolved_import(&directive); | 390 | let mut record = |imports: Vec<ImportDirective>| { |
390 | // FIXME: For avoid performance regression, | 391 | for directive in imports { |
391 | // we consider an imported resolved if it is indeterminate (i.e not all namespace resolved) | 392 | match directive.status { |
392 | self.resolved_imports.push(directive) | 393 | PartialResolvedImport::Indeterminate(_) => { |
393 | } | 394 | self.record_resolved_import(&directive); |
394 | PartialResolvedImport::Resolved(_) => { | 395 | // FIXME: For avoid performance regression, |
395 | self.record_resolved_import(&directive); | 396 | // we consider an imported resolved if it is indeterminate (i.e not all namespace resolved) |
396 | self.resolved_imports.push(directive) | 397 | self.resolved_imports.push(directive) |
397 | } | 398 | } |
398 | PartialResolvedImport::Unresolved => { | 399 | PartialResolvedImport::Resolved(_) => { |
399 | self.unresolved_imports.push(directive); | 400 | self.record_resolved_import(&directive); |
401 | self.resolved_imports.push(directive) | ||
402 | } | ||
403 | PartialResolvedImport::Unresolved => { | ||
404 | self.unresolved_imports.push(directive); | ||
405 | } | ||
400 | } | 406 | } |
401 | } | 407 | } |
402 | } | 408 | }; |
409 | |||
410 | record(glob_imports); | ||
411 | record(non_glob_imports); | ||
403 | } | 412 | } |
404 | } | 413 | } |
405 | 414 | ||