@@ -332,7 +332,8 @@ impl CrateDefMap {
332
332
let name = path. expand_macro_expr ( ) ?;
333
333
// search local first
334
334
// FIXME: Remove public_macros check when we have a correct local_macors implementation
335
- let local = self . public_macros . get ( & name) . or ( self . local_macros . get ( & name) ) . map ( |it| * it) ;
335
+ let local =
336
+ self . public_macros . get ( & name) . or_else ( || self . local_macros . get ( & name) ) . map ( |it| * it) ;
336
337
if local. is_some ( ) {
337
338
return local;
338
339
}
@@ -405,7 +406,7 @@ impl CrateDefMap {
405
406
} ;
406
407
407
408
for ( i, segment) in segments {
408
- let curr = match curr_per_ns. as_ref ( ) . left ( ) . map_or ( None , |m| m. as_ref ( ) . take_types ( ) ) {
409
+ let curr = match curr_per_ns. as_ref ( ) . left ( ) . and_then ( |m| m. as_ref ( ) . take_types ( ) ) {
409
410
Some ( r) => r,
410
411
None => {
411
412
// we still have path segments left, but the path so far
@@ -421,10 +422,8 @@ impl CrateDefMap {
421
422
curr_per_ns = match curr {
422
423
ModuleDef :: Module ( module) => {
423
424
if module. krate != self . krate {
424
- let path = Path {
425
- segments : path. segments [ i..] . iter ( ) . cloned ( ) . collect ( ) ,
426
- kind : PathKind :: Self_ ,
427
- } ;
425
+ let path =
426
+ Path { segments : path. segments [ i..] . to_vec ( ) , kind : PathKind :: Self_ } ;
428
427
log:: debug!( "resolving {:?} in other crate" , path) ;
429
428
let defp_map = db. crate_def_map ( module. krate ) ;
430
429
let ( def, s) =
@@ -468,7 +467,7 @@ impl CrateDefMap {
468
467
) ;
469
468
470
469
return ResolvePathResult :: with (
471
- Either :: Left ( PerNs :: types ( ( * s ) . into ( ) ) ) ,
470
+ Either :: Left ( PerNs :: types ( * s ) ) ,
472
471
ReachedFixedPoint :: Yes ,
473
472
Some ( i) ,
474
473
) ;
@@ -479,8 +478,10 @@ impl CrateDefMap {
479
478
}
480
479
481
480
fn resolve_name_in_crate_root_or_extern_prelude ( & self , name : & Name ) -> ItemOrMacro {
482
- let from_crate_root =
483
- self [ self . root ] . scope . get_item_or_macro ( name) . unwrap_or ( Either :: Left ( PerNs :: none ( ) ) ) ;
481
+ let from_crate_root = self [ self . root ]
482
+ . scope
483
+ . get_item_or_macro ( name)
484
+ . unwrap_or_else ( || Either :: Left ( PerNs :: none ( ) ) ) ;
484
485
let from_extern_prelude = self . resolve_name_in_extern_prelude ( name) ;
485
486
486
487
or ( from_crate_root, Either :: Left ( from_extern_prelude) )
@@ -505,8 +506,10 @@ impl CrateDefMap {
505
506
// - current module / scope
506
507
// - extern prelude
507
508
// - std prelude
508
- let from_scope =
509
- self [ module] . scope . get_item_or_macro ( name) . unwrap_or ( Either :: Left ( PerNs :: none ( ) ) ) ; ;
509
+ let from_scope = self [ module]
510
+ . scope
511
+ . get_item_or_macro ( name)
512
+ . unwrap_or_else ( || Either :: Left ( PerNs :: none ( ) ) ) ; ;
510
513
let from_extern_prelude =
511
514
self . extern_prelude . get ( name) . map_or ( PerNs :: none ( ) , |& it| PerNs :: types ( it) ) ;
512
515
let from_prelude = self . resolve_in_prelude ( db, name) ;
@@ -525,7 +528,7 @@ impl CrateDefMap {
525
528
} else {
526
529
db. crate_def_map ( prelude. krate ) [ prelude. module_id ] . scope . get_item_or_macro ( name)
527
530
} ;
528
- resolution. unwrap_or ( Either :: Left ( PerNs :: none ( ) ) )
531
+ resolution. unwrap_or_else ( || Either :: Left ( PerNs :: none ( ) ) )
529
532
} else {
530
533
Either :: Left ( PerNs :: none ( ) )
531
534
}
0 commit comments