about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDouglas Campos <qmx@qmx.me>2018-08-10 02:14:06 +0000
committerDouglas Campos <qmx@qmx.me>2018-08-16 19:21:16 +0000
commit2fcabf2dd7fb71617d9af078cc64245fc790823f (patch)
tree55103d44c5415b10f3ec22da89f39a5cf54818f8
parentbfbbe6d426f33439d9c5fb6d592bcde10953411f (diff)
downloadrust-2fcabf2dd7fb71617d9af078cc64245fc790823f.tar.gz
rust-2fcabf2dd7fb71617d9af078cc64245fc790823f.zip
look into extern prelude to provide sugestions
-rw-r--r--src/librustc_resolve/lib.rs26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 6a2b595e3e7..a1338710b6b 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -4331,9 +4331,29 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
                                           -> Vec<ImportSuggestion>
         where FilterFn: Fn(Def) -> bool
     {
-        self.lookup_import_candidates_from_module(
-            lookup_name, namespace, self.graph_root, true, filter_fn
-        )
+        let mut suggestions = vec![];
+
+        suggestions.extend(
+            self.lookup_import_candidates_from_module(
+                lookup_name, namespace, self.graph_root, keywords::Crate.name(), filter_fn
+            )
+        );
+
+        if self.session.features_untracked().extern_prelude {
+            let extern_prelude_names = self.extern_prelude.clone();
+            for &krate_name in extern_prelude_names.iter() {
+                let krate_ident = Ident::with_empty_ctxt(krate_name);
+                let external_prelude_module =  self.load_extern_prelude_crate_if_needed(krate_ident);
+
+                suggestions.extend(
+                    self.lookup_import_candidates_from_module(
+                        lookup_name, namespace, external_prelude_module, krate_name, filter_fn
+                    )
+                );
+            }
+        }
+
+        suggestions
     }
 
     fn find_module(&mut self,