Skip to content

Commit 0129628

Browse files
Merge #8297
8297: Only populate prelude for crate-level DefMaps r=jonas-schievink a=jonas-schievink Fixes #8281 bors r+ Co-authored-by: Jonas Schievink <[email protected]>
2 parents f4d5698 + 7ceaba2 commit 0129628

File tree

2 files changed

+58
-14
lines changed

2 files changed

+58
-14
lines changed

crates/hir_def/src/nameres/collector.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,22 @@ pub(super) fn collect_defs(
5454
) -> DefMap {
5555
let crate_graph = db.crate_graph();
5656

57-
// populate external prelude
58-
for dep in &crate_graph[def_map.krate].dependencies {
59-
log::debug!("crate dep {:?} -> {:?}", dep.name, dep.crate_id);
60-
let dep_def_map = db.crate_def_map(dep.crate_id);
61-
def_map
62-
.extern_prelude
63-
.insert(dep.as_name(), dep_def_map.module_id(dep_def_map.root).into());
64-
65-
// look for the prelude
66-
// If the dependency defines a prelude, we overwrite an already defined
67-
// prelude. This is necessary to import the "std" prelude if a crate
68-
// depends on both "core" and "std".
69-
if dep_def_map.prelude.is_some() {
70-
def_map.prelude = dep_def_map.prelude;
57+
if block.is_none() {
58+
// populate external prelude
59+
for dep in &crate_graph[def_map.krate].dependencies {
60+
log::debug!("crate dep {:?} -> {:?}", dep.name, dep.crate_id);
61+
let dep_def_map = db.crate_def_map(dep.crate_id);
62+
def_map
63+
.extern_prelude
64+
.insert(dep.as_name(), dep_def_map.module_id(dep_def_map.root).into());
65+
66+
// look for the prelude
67+
// If the dependency defines a prelude, we overwrite an already defined
68+
// prelude. This is necessary to import the "std" prelude if a crate
69+
// depends on both "core" and "std".
70+
if dep_def_map.prelude.is_some() {
71+
def_map.prelude = dep_def_map.prelude;
72+
}
7173
}
7274
}
7375

crates/ide/src/hover.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3897,4 +3897,46 @@ trait A where
38973897
"#]],
38983898
);
38993899
}
3900+
3901+
#[test]
3902+
fn string_shadowed_with_inner_items() {
3903+
check(
3904+
r#"
3905+
//- /main.rs crate:main deps:alloc
3906+
3907+
/// Custom `String` type.
3908+
struct String;
3909+
3910+
fn f() {
3911+
let _: String$0;
3912+
3913+
fn inner() {}
3914+
}
3915+
3916+
//- /alloc.rs crate:alloc
3917+
#[prelude_import]
3918+
pub use string::*;
3919+
3920+
mod string {
3921+
/// This is `alloc::String`.
3922+
pub struct String;
3923+
}
3924+
"#,
3925+
expect![[r#"
3926+
*String*
3927+
3928+
```rust
3929+
main
3930+
```
3931+
3932+
```rust
3933+
struct String
3934+
```
3935+
3936+
---
3937+
3938+
Custom `String` type.
3939+
"#]],
3940+
)
3941+
}
39003942
}

0 commit comments

Comments
 (0)