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(
130130 }
131131
132132 // - 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 ( ) {
134135 if item == ItemInNs :: Types ( * def_id) {
135136 let name = scope_name. unwrap_or_else ( || name. clone ( ) ) ;
136137 return Some ( ModPath :: from_segments ( PathKind :: Plain , vec ! [ name] ) ) ;
137138 }
138139 }
139140
140141 // - 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
142144 let prelude_def_map = prelude_module. def_map ( db) ;
143145 let prelude_scope: & crate :: item_scope:: ItemScope =
144146 & prelude_def_map[ prelude_module. local_id ] . scope ;
@@ -1057,4 +1059,28 @@ fn f() {
10571059 "dep" ,
10581060 ) ;
10591061 }
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+ }
10601086}
You can’t perform that action at this time.
0 commit comments