@@ -17,7 +17,7 @@ use crate::{
1717    nameres:: DefMap , 
1818    path:: { ModPath ,  PathKind } , 
1919    visibility:: { Visibility ,  VisibilityExplicitness } , 
20-     ModuleDefId ,  ModuleId , 
20+     ImportPathConfig ,   ModuleDefId ,  ModuleId , 
2121} ; 
2222
2323/// Find a path that can be used to refer to a certain item. This can depend on 
@@ -28,21 +28,10 @@ pub fn find_path(
2828    from :  ModuleId , 
2929    prefix_kind :  PrefixKind , 
3030    ignore_local_imports :  bool , 
31-     prefer_no_std :  bool , 
32-     prefer_prelude :  bool , 
31+     cfg :  ImportPathConfig , 
3332)  -> Option < ModPath >  { 
3433    let  _p = tracing:: span!( tracing:: Level :: INFO ,  "find_path" ) . entered ( ) ; 
35-     find_path_inner ( 
36-         FindPathCtx  { 
37-             db, 
38-             prefix :  prefix_kind, 
39-             prefer_no_std, 
40-             prefer_prelude, 
41-             ignore_local_imports, 
42-         } , 
43-         item, 
44-         from, 
45-     ) 
34+     find_path_inner ( FindPathCtx  {  db,  prefix :  prefix_kind,  cfg,  ignore_local_imports } ,  item,  from) 
4635} 
4736
4837#[ derive( Copy ,  Clone ,  Debug ) ]  
@@ -88,8 +77,7 @@ impl PrefixKind {
8877struct  FindPathCtx < ' db >  { 
8978    db :  & ' db  dyn  DefDatabase , 
9079    prefix :  PrefixKind , 
91-     prefer_no_std :  bool , 
92-     prefer_prelude :  bool , 
80+     cfg :  ImportPathConfig , 
9381    ignore_local_imports :  bool , 
9482} 
9583
@@ -107,7 +95,11 @@ fn find_path_inner(ctx: FindPathCtx<'_>, item: ItemInNs, from: ModuleId) -> Opti
10795        let  mut  visited_modules = FxHashSet :: default ( ) ; 
10896        return  find_path_for_module ( 
10997            FindPathCtx  { 
110-                 prefer_no_std :  ctx. prefer_no_std  || ctx. db . crate_supports_no_std ( crate_root. krate ) , 
98+                 cfg :  ImportPathConfig  { 
99+                     prefer_no_std :  ctx. cfg . prefer_no_std 
100+                         || ctx. db . crate_supports_no_std ( crate_root. krate ) , 
101+                     ..ctx. cfg 
102+                 } , 
111103                ..ctx
112104            } , 
113105            & def_map, 
@@ -160,7 +152,11 @@ fn find_path_inner(ctx: FindPathCtx<'_>, item: ItemInNs, from: ModuleId) -> Opti
160152
161153    calculate_best_path ( 
162154        FindPathCtx  { 
163-             prefer_no_std :  ctx. prefer_no_std  || ctx. db . crate_supports_no_std ( crate_root. krate ) , 
155+             cfg :  ImportPathConfig  { 
156+                 prefer_no_std :  ctx. cfg . prefer_no_std 
157+                     || ctx. db . crate_supports_no_std ( crate_root. krate ) , 
158+                 ..ctx. cfg 
159+             } , 
164160            ..ctx
165161        } , 
166162        & def_map, 
@@ -381,9 +377,7 @@ fn calculate_best_path(
381377                path. 0 . push_segment ( name) ; 
382378
383379                let  new_path = match  best_path. take ( )  { 
384-                     Some ( best_path)  => { 
385-                         select_best_path ( best_path,  path,  ctx. prefer_no_std ,  ctx. prefer_prelude ) 
386-                     } 
380+                     Some ( best_path)  => select_best_path ( best_path,  path,  ctx. cfg ) , 
387381                    None  => path, 
388382                } ; 
389383                best_path_len = new_path. 0 . len ( ) ; 
@@ -425,12 +419,7 @@ fn calculate_best_path(
425419                ) ; 
426420
427421                let  new_path_with_stab = match  best_path. take ( )  { 
428-                     Some ( best_path)  => select_best_path ( 
429-                         best_path, 
430-                         path_with_stab, 
431-                         ctx. prefer_no_std , 
432-                         ctx. prefer_prelude , 
433-                     ) , 
422+                     Some ( best_path)  => select_best_path ( best_path,  path_with_stab,  ctx. cfg ) , 
434423                    None  => path_with_stab, 
435424                } ; 
436425                update_best_path ( & mut  best_path,  new_path_with_stab) ; 
@@ -446,8 +435,7 @@ fn calculate_best_path(
446435fn  select_best_path ( 
447436    old_path @ ( _,  old_stability) :  ( ModPath ,  Stability ) , 
448437    new_path @ ( _,  new_stability) :  ( ModPath ,  Stability ) , 
449-     prefer_no_std :  bool , 
450-     prefer_prelude :  bool , 
438+     cfg :  ImportPathConfig , 
451439)  -> ( ModPath ,  Stability )  { 
452440    match  ( old_stability,  new_stability)  { 
453441        ( Stable ,  Unstable )  => return  old_path, 
@@ -461,7 +449,7 @@ fn select_best_path(
461449        let  ( old_path,  _)  = & old; 
462450        let  new_has_prelude = new_path. segments ( ) . iter ( ) . any ( |seg| seg == & known:: prelude) ; 
463451        let  old_has_prelude = old_path. segments ( ) . iter ( ) . any ( |seg| seg == & known:: prelude) ; 
464-         match  ( new_has_prelude,  old_has_prelude,  prefer_prelude)  { 
452+         match  ( new_has_prelude,  old_has_prelude,  cfg . prefer_prelude )  { 
465453            ( true ,  false ,  true )  | ( false ,  true ,  false )  => new, 
466454            ( true ,  false ,  false )  | ( false ,  true ,  true )  => old, 
467455            // no prelude difference in the paths, so pick the shorter one 
@@ -482,7 +470,7 @@ fn select_best_path(
482470
483471    match  ( old_path. 0 . segments ( ) . first ( ) ,  new_path. 0 . segments ( ) . first ( ) )  { 
484472        ( Some ( old) ,  Some ( new) )  if  STD_CRATES . contains ( old)  && STD_CRATES . contains ( new)  => { 
485-             let  rank = match  prefer_no_std { 
473+             let  rank = match  cfg . prefer_no_std  { 
486474                false  => |name :  & Name | match  name { 
487475                    name if  name == & known:: core => 0 , 
488476                    name if  name == & known:: alloc => 1 , 
@@ -647,10 +635,9 @@ mod tests {
647635        { 
648636            let  found_path = find_path_inner ( 
649637                FindPathCtx  { 
650-                     prefer_no_std :  false , 
651638                    db :  & db, 
652639                    prefix, 
653-                     prefer_prelude, 
640+                     cfg :   ImportPathConfig   {   prefer_no_std :   false ,   prefer_prelude  } , 
654641                    ignore_local_imports, 
655642                } , 
656643                resolved, 
0 commit comments