about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crates/hir_def/src/nameres/collector.rs41
-rw-r--r--crates/hir_expand/src/name.rs1
2 files changed, 28 insertions, 14 deletions
diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs
index 5984243055c..6b41921ae46 100644
--- a/crates/hir_def/src/nameres/collector.rs
+++ b/crates/hir_def/src/nameres/collector.rs
@@ -486,22 +486,35 @@ impl DefCollector<'_> {
         } else {
             PathKind::Abs
         };
-        let path =
-            ModPath::from_segments(path_kind, [krate, name![prelude], edition].iter().cloned());
+        let path = ModPath::from_segments(
+            path_kind.clone(),
+            [krate.clone(), name![prelude], edition].iter().cloned(),
+        );
+        // Fall back to the older `std::prelude::v1` for compatibility with Rust <1.52.0
+        // FIXME remove this fallback
+        let fallback_path =
+            ModPath::from_segments(path_kind, [krate, name![prelude], name![v1]].iter().cloned());
 
-        let (per_ns, _) =
-            self.def_map.resolve_path(self.db, self.def_map.root, &path, BuiltinShadowMode::Other);
+        for path in &[path, fallback_path] {
+            let (per_ns, _) = self.def_map.resolve_path(
+                self.db,
+                self.def_map.root,
+                &path,
+                BuiltinShadowMode::Other,
+            );
 
-        match &per_ns.types {
-            Some((ModuleDefId::ModuleId(m), _)) => {
-                self.def_map.prelude = Some(*m);
-            }
-            _ => {
-                log::error!(
-                    "could not resolve prelude path `{}` to module (resolved to {:?})",
-                    path,
-                    per_ns.types
-                );
+            match &per_ns.types {
+                Some((ModuleDefId::ModuleId(m), _)) => {
+                    self.def_map.prelude = Some(*m);
+                    return;
+                }
+                _ => {
+                    log::debug!(
+                        "could not resolve prelude path `{}` to module (resolved to {:?})",
+                        path,
+                        per_ns.types
+                    );
+                }
             }
         }
     }
diff --git a/crates/hir_expand/src/name.rs b/crates/hir_expand/src/name.rs
index abc6753bf13..00b8adc1ebd 100644
--- a/crates/hir_expand/src/name.rs
+++ b/crates/hir_expand/src/name.rs
@@ -180,6 +180,7 @@ pub mod known {
         rust_2015,
         rust_2018,
         rust_2021,
+        v1,
         // Components of known path (type name)
         Iterator,
         IntoIterator,