diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2021-06-01 19:03:00 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2021-06-01 19:03:00 +0200 |
| commit | 41321fa71d43244737f29604abc48959ed72e654 (patch) | |
| tree | a9f50b7ff09e286bd2e3939a64ff60cea303720a | |
| parent | 4f63e79eb30a0695675a560dfe7ebae6f1dd8a94 (diff) | |
Fall back to legacy prelude
| -rw-r--r-- | crates/hir_def/src/nameres/collector.rs | 41 | ||||
| -rw-r--r-- | crates/hir_expand/src/name.rs | 1 |
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, |
