aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/item_scope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/item_scope.rs')
-rw-r--r--crates/ra_hir_def/src/item_scope.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/crates/ra_hir_def/src/item_scope.rs b/crates/ra_hir_def/src/item_scope.rs
index 08d788cc9..e8ddcc3c2 100644
--- a/crates/ra_hir_def/src/item_scope.rs
+++ b/crates/ra_hir_def/src/item_scope.rs
@@ -70,20 +70,27 @@ impl ItemScope {
70 } 70 }
71 71
72 /// Get a name from current module scope, legacy macros are not included 72 /// Get a name from current module scope, legacy macros are not included
73 pub(crate) fn get(&self, name: &Name, shadow: BuiltinShadowMode) -> Option<PerNs> { 73 pub(crate) fn get(&self, name: &Name, shadow: BuiltinShadowMode) -> PerNs {
74 match shadow { 74 match shadow {
75 BuiltinShadowMode::Module => { 75 BuiltinShadowMode::Module => self
76 self.visible.get(name).or_else(|| BUILTIN_SCOPE.get(name)).copied() 76 .visible
77 } 77 .get(name)
78 .or_else(|| BUILTIN_SCOPE.get(name))
79 .copied()
80 .unwrap_or_else(PerNs::none),
78 BuiltinShadowMode::Other => { 81 BuiltinShadowMode::Other => {
79 let item = self.visible.get(name).copied(); 82 let item = self.visible.get(name).copied();
80 if let Some(def) = item { 83 if let Some(def) = item {
81 if let Some(ModuleDefId::ModuleId(_)) = def.take_types() { 84 if let Some(ModuleDefId::ModuleId(_)) = def.take_types() {
82 return BUILTIN_SCOPE.get(name).copied().or(item); 85 return BUILTIN_SCOPE
86 .get(name)
87 .copied()
88 .or(item)
89 .unwrap_or_else(PerNs::none);
83 } 90 }
84 } 91 }
85 92
86 item.or_else(|| BUILTIN_SCOPE.get(name).copied()) 93 item.or_else(|| BUILTIN_SCOPE.get(name).copied()).unwrap_or_else(PerNs::none)
87 } 94 }
88 } 95 }
89 } 96 }