File tree Expand file tree Collapse file tree 1 file changed +28
-2
lines changed Expand file tree Collapse file tree 1 file changed +28
-2
lines changed Original file line number Diff line number Diff line change @@ -130,15 +130,17 @@ fn find_path_inner(
130
130
}
131
131
132
132
// - if the item is the crate root of a dependency crate, return the name from the extern prelude
133
- for ( name, def_id) in root. def_map ( db) . extern_prelude ( ) {
133
+ let root_def_map = root. def_map ( db) ;
134
+ for ( name, def_id) in root_def_map. extern_prelude ( ) {
134
135
if item == ItemInNs :: Types ( * def_id) {
135
136
let name = scope_name. unwrap_or_else ( || name. clone ( ) ) ;
136
137
return Some ( ModPath :: from_segments ( PathKind :: Plain , vec ! [ name] ) ) ;
137
138
}
138
139
}
139
140
140
141
// - if the item is in the prelude, return the name from there
141
- if let Some ( prelude_module) = def_map. prelude ( ) {
142
+ if let Some ( prelude_module) = root_def_map. prelude ( ) {
143
+ // Preludes in block DefMaps are ignored, only the crate DefMap is searched
142
144
let prelude_def_map = prelude_module. def_map ( db) ;
143
145
let prelude_scope: & crate :: item_scope:: ItemScope =
144
146
& prelude_def_map[ prelude_module. local_id ] . scope ;
@@ -1057,4 +1059,28 @@ fn f() {
1057
1059
"dep" ,
1058
1060
) ;
1059
1061
}
1062
+
1063
+ #[ test]
1064
+ fn prelude_with_inner_items ( ) {
1065
+ check_found_path (
1066
+ r#"
1067
+ //- /main.rs crate:main deps:std
1068
+ fn f() {
1069
+ fn inner() {}
1070
+ $0
1071
+ }
1072
+ //- /std.rs crate:std
1073
+ pub mod prelude {
1074
+ pub enum Option { None }
1075
+ pub use Option::*;
1076
+ }
1077
+ #[prelude_import]
1078
+ pub use prelude::*;
1079
+ "# ,
1080
+ "None" ,
1081
+ "None" ,
1082
+ "None" ,
1083
+ "None" ,
1084
+ ) ;
1085
+ }
1060
1086
}
You can’t perform that action at this time.
0 commit comments