diff options
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index d822f7d93..7bddee9b9 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -332,7 +332,8 @@ impl CrateDefMap { | |||
332 | let name = path.expand_macro_expr()?; | 332 | let name = path.expand_macro_expr()?; |
333 | // search local first | 333 | // search local first |
334 | // FIXME: Remove public_macros check when we have a correct local_macors implementation | 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 | if local.is_some() { | 337 | if local.is_some() { |
337 | return local; | 338 | return local; |
338 | } | 339 | } |
@@ -479,8 +480,10 @@ impl CrateDefMap { | |||
479 | } | 480 | } |
480 | 481 | ||
481 | fn resolve_name_in_crate_root_or_extern_prelude(&self, name: &Name) -> ItemOrMacro { | 482 | fn resolve_name_in_crate_root_or_extern_prelude(&self, name: &Name) -> ItemOrMacro { |
482 | let from_crate_root = | 483 | let from_crate_root = self[self.root] |
483 | self[self.root].scope.get_item_or_macro(name).unwrap_or(Either::Left(PerNs::none())); | 484 | .scope |
485 | .get_item_or_macro(name) | ||
486 | .unwrap_or_else(|| Either::Left(PerNs::none())); | ||
484 | let from_extern_prelude = self.resolve_name_in_extern_prelude(name); | 487 | let from_extern_prelude = self.resolve_name_in_extern_prelude(name); |
485 | 488 | ||
486 | or(from_crate_root, Either::Left(from_extern_prelude)) | 489 | or(from_crate_root, Either::Left(from_extern_prelude)) |
@@ -505,8 +508,10 @@ impl CrateDefMap { | |||
505 | // - current module / scope | 508 | // - current module / scope |
506 | // - extern prelude | 509 | // - extern prelude |
507 | // - std prelude | 510 | // - std prelude |
508 | let from_scope = | 511 | let from_scope = self[module] |
509 | self[module].scope.get_item_or_macro(name).unwrap_or(Either::Left(PerNs::none()));; | 512 | .scope |
513 | .get_item_or_macro(name) | ||
514 | .unwrap_or_else(|| Either::Left(PerNs::none()));; | ||
510 | let from_extern_prelude = | 515 | let from_extern_prelude = |
511 | self.extern_prelude.get(name).map_or(PerNs::none(), |&it| PerNs::types(it)); | 516 | self.extern_prelude.get(name).map_or(PerNs::none(), |&it| PerNs::types(it)); |
512 | let from_prelude = self.resolve_in_prelude(db, name); | 517 | let from_prelude = self.resolve_in_prelude(db, name); |
@@ -525,7 +530,7 @@ impl CrateDefMap { | |||
525 | } else { | 530 | } else { |
526 | db.crate_def_map(prelude.krate)[prelude.module_id].scope.get_item_or_macro(name) | 531 | db.crate_def_map(prelude.krate)[prelude.module_id].scope.get_item_or_macro(name) |
527 | }; | 532 | }; |
528 | resolution.unwrap_or(Either::Left(PerNs::none())) | 533 | resolution.unwrap_or_else(|| Either::Left(PerNs::none())) |
529 | } else { | 534 | } else { |
530 | Either::Left(PerNs::none()) | 535 | Either::Left(PerNs::none()) |
531 | } | 536 | } |