aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/nameres/collector.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/nameres/collector.rs')
-rw-r--r--crates/ra_hir_def/src/nameres/collector.rs41
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